| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 | <?phprequire_once 'tests/data/app/data.php';use Codeception\Module;use Codeception\Module\Facebook;use Codeception\Module\PhpBrowser;use Codeception\Lib\Driver\Facebook as FacebookDriver;use Codeception\Util\Stub;class FacebookTest extends \PHPUnit\Framework\TestCase{    protected $config = array(        'app_id' => '460287924057084',        'secret' => 'e27a5a07f9f07f52682d61dd69b716b5',        'test_user' => array(            'permissions' => ['publish_actions', 'user_posts'],            'name' => 'Codeception Testuser'        )    );    /**     * @var Facebook     */    protected $module;    /**     * @var FacebookDriver     */    protected $facebook;    protected function makeTest()    {        return Stub::makeEmpty(            '\Codeception\Test\Cept',            array('dispatcher' => Stub::makeEmpty('Symfony\Component\EventDispatcher\EventDispatcher'))        );    }    protected function makeContainer()    {        return \Codeception\Util\Stub::make('Codeception\Lib\ModuleContainer');    }    public function setUp()    {        $this->module = new Facebook($this->makeContainer());        $this->module->_setConfig($this->config);        $this->module->_initialize();        $reflection = new ReflectionProperty('Codeception\Module\Facebook', 'facebook');        $reflection->setAccessible(true);        $this->facebook = $reflection->getValue($this->module);    }    protected function tearDown()    {        $this->module->_afterSuite();    }    /**     * @covers Facebook::haveFacebookTestUserId     * @covers Facebook::haveFacebookTestUserAccount     * @covers Facebook::grabFacebookTestUserEmail     * @covers Facebook::grabFacebookTestUserAccessToken     */    public function testHaveFacebookTestUserAccount()    {        $this->module->haveFacebookTestUserAccount(false);        $this->assertNotEmpty($this->module->grabFacebookTestUserId());        $this->assertNotEmpty($this->module->grabFacebookTestUserEmail());        $this->assertNotEmpty($this->module->grabFacebookTestUserAccessToken());        $testUserEmailBeforeRenew = $this->module->grabFacebookTestUserEmail();        $this->module->haveFacebookTestUserAccount(true);        $testUserEmailAfterRenew = $this->module->grabFacebookTestUserEmail();        $this->assertNotEquals($testUserEmailBeforeRenew, $testUserEmailAfterRenew);        $testUserIdBeforeRenew = $this->module->grabFacebookTestUserId();        $this->module->haveFacebookTestUserAccount(true);        $testUserIdAfterRenew = $this->module->grabFacebookTestUserId();        $this->assertNotEquals($testUserIdBeforeRenew, $testUserIdAfterRenew);        $this->assertEquals(ucwords($this->config['test_user']['name']), $this->module->grabFacebookTestUserName());    }    public function testSeePostOnFacebookWithMessage()    {        $this->checkPublishPermissions();        // precondition #1: I have facebook user        $this->module->haveFacebookTestUserAccount();        // precondition #2: I have published the post with place attached        $params = array('message' => 'I feel great!');        $this->module->postToFacebookAsTestUser($params);        // assert that post was published in the facebook and place is the same        $this->module->seePostOnFacebookWithMessage($params['message']);    }    public function testSeePostOnFacebookWithAttachedPlace()    {        $this->checkPublishPermissions();        // precondition #1: I have facebook user        $this->module->haveFacebookTestUserAccount();        // precondition #2: I have published the post with place attached        $params = array('place' => '111227078906045'); //        $this->module->postToFacebookAsTestUser($params);        // assert that post was published in the facebook and place is the same        $this->module->seePostOnFacebookWithAttachedPlace($params['place']);    }    public function testLoginToFacebook()    {        // precondition: you need to have a server running for this test        // you can start a php server with: php -S 127.0.0.1:8000 -t tests/data/app        $browserModule = new PhpBrowser($this->makeContainer());        $this->initModule($browserModule, ['url' => 'http://localhost:8000']);        $this->module->_inject($browserModule);        $this->loginToFacebook($browserModule);        // cleanup        $browserModule->_after($this->makeTest());        data::clean();    }    private function loginToFacebook(PhpBrowser $browserModule)    {        // preconditions: #1 facebook test user is created        $this->module->haveFacebookTestUserAccount();        $testUserName = $this->module->grabFacebookTestUserName();        // preconditions: #2 test user is logged in on facebook        $this->module->haveTestUserLoggedInOnFacebook();        // go to our page with facebook login button        $browserModule->amOnPage('/facebook');        // check that yet we are not logged in on facebook        $browserModule->see('You are not Connected.');        // click on "Login with Facebook" button to start login with facebook        $browserModule->click('Login with Facebook');        // check that we are logged in with facebook        $browserModule->see('Your User Object (/me)');        $browserModule->see($testUserName);    }    private function checkPublishPermissions()    {        if (!in_array('publish_actions', $this->config['test_user']['permissions']) ||            !in_array('user_posts', $this->config['test_user']['permissions'])        ) {            $this->markTestSkipped("You need both publish_actions and user_posts permissions for this test");        }    }    private function initModule(PhpBrowser $browserModule, array $params)    {        $browserModule->_setConfig($params);        $browserModule->_initialize();        $browserModule->_before($this->makeTest());    }}
 |