123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- require_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->_cleanup();
- $browserModule->_before($this->makeTest());
- }
- }
|