From 677953067f2bb5502a70f0d004f1ac844b18a128 Mon Sep 17 00:00:00 2001 From: emkael Date: Mon, 16 Jan 2017 22:04:43 +0100 Subject: * Facebook support --- .../tests/FacebookClientTest.php | 308 +++++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 lib/facebook-graph-sdk/tests/FacebookClientTest.php (limited to 'lib/facebook-graph-sdk/tests/FacebookClientTest.php') diff --git a/lib/facebook-graph-sdk/tests/FacebookClientTest.php b/lib/facebook-graph-sdk/tests/FacebookClientTest.php new file mode 100644 index 0000000..6e9bb6c --- /dev/null +++ b/lib/facebook-graph-sdk/tests/FacebookClientTest.php @@ -0,0 +1,308 @@ +fbApp = new FacebookApp('id', 'shhhh!'); + $this->fbClient = new FacebookClient(new MyFooClientHandler()); + } + + public function testACustomHttpClientCanBeInjected() + { + $handler = new MyFooClientHandler(); + $client = new FacebookClient($handler); + $httpHandler = $client->getHttpClientHandler(); + + $this->assertInstanceOf('Facebook\Tests\MyFooClientHandler', $httpHandler); + } + + public function testTheHttpClientWillFallbackToDefault() + { + $client = new FacebookClient(); + $httpHandler = $client->getHttpClientHandler(); + + if (function_exists('curl_init')) { + $this->assertInstanceOf('Facebook\HttpClients\FacebookCurlHttpClient', $httpHandler); + } else { + $this->assertInstanceOf('Facebook\HttpClients\FacebookStreamHttpClient', $httpHandler); + } + } + + public function testBetaModeCanBeDisabledOrEnabledViaConstructor() + { + $client = new FacebookClient(null, false); + $url = $client->getBaseGraphUrl(); + $this->assertEquals(FacebookClient::BASE_GRAPH_URL, $url); + + $client = new FacebookClient(null, true); + $url = $client->getBaseGraphUrl(); + $this->assertEquals(FacebookClient::BASE_GRAPH_URL_BETA, $url); + } + + public function testBetaModeCanBeDisabledOrEnabledViaMethod() + { + $client = new FacebookClient(); + $client->enableBetaMode(false); + $url = $client->getBaseGraphUrl(); + $this->assertEquals(FacebookClient::BASE_GRAPH_URL, $url); + + $client->enableBetaMode(true); + $url = $client->getBaseGraphUrl(); + $this->assertEquals(FacebookClient::BASE_GRAPH_URL_BETA, $url); + } + + public function testGraphVideoUrlCanBeSet() + { + $client = new FacebookClient(); + $client->enableBetaMode(false); + $url = $client->getBaseGraphUrl($postToVideoUrl = true); + $this->assertEquals(FacebookClient::BASE_GRAPH_VIDEO_URL, $url); + + $client->enableBetaMode(true); + $url = $client->getBaseGraphUrl($postToVideoUrl = true); + $this->assertEquals(FacebookClient::BASE_GRAPH_VIDEO_URL_BETA, $url); + } + + public function testAFacebookRequestEntityCanBeUsedToSendARequestToGraph() + { + $fbRequest = new FacebookRequest($this->fbApp, 'token', 'GET', '/foo'); + $response = $this->fbClient->sendRequest($fbRequest); + + $this->assertInstanceOf('Facebook\FacebookResponse', $response); + $this->assertEquals(200, $response->getHttpStatusCode()); + $this->assertEquals('{"data":[{"id":"123","name":"Foo"},{"id":"1337","name":"Bar"}]}', $response->getBody()); + } + + public function testAFacebookBatchRequestEntityCanBeUsedToSendABatchRequestToGraph() + { + $fbRequests = [ + new FacebookRequest($this->fbApp, 'token', 'GET', '/foo'), + new FacebookRequest($this->fbApp, 'token', 'POST', '/bar'), + ]; + $fbBatchRequest = new FacebookBatchRequest($this->fbApp, $fbRequests); + + $fbBatchClient = new FacebookClient(new MyFooBatchClientHandler()); + $response = $fbBatchClient->sendBatchRequest($fbBatchRequest); + + $this->assertInstanceOf('Facebook\FacebookBatchResponse', $response); + $this->assertEquals('GET', $response[0]->getRequest()->getMethod()); + $this->assertEquals('POST', $response[1]->getRequest()->getMethod()); + } + + public function testAFacebookBatchRequestWillProperlyBatchFiles() + { + $fbRequests = [ + new FacebookRequest($this->fbApp, 'token', 'POST', '/photo', [ + 'message' => 'foobar', + 'source' => new FacebookFile(__DIR__ . '/foo.txt'), + ]), + new FacebookRequest($this->fbApp, 'token', 'POST', '/video', [ + 'message' => 'foobar', + 'source' => new FacebookVideo(__DIR__ . '/foo.txt'), + ]), + ]; + $fbBatchRequest = new FacebookBatchRequest($this->fbApp, $fbRequests); + $fbBatchRequest->prepareRequestsForBatch(); + + list($url, $method, $headers, $body) = $this->fbClient->prepareRequestMessage($fbBatchRequest); + + $this->assertEquals(FacebookClient::BASE_GRAPH_VIDEO_URL . '/' . Facebook::DEFAULT_GRAPH_VERSION, $url); + $this->assertEquals('POST', $method); + $this->assertContains('multipart/form-data; boundary=', $headers['Content-Type']); + $this->assertContains('Content-Disposition: form-data; name="batch"', $body); + $this->assertContains('Content-Disposition: form-data; name="include_headers"', $body); + $this->assertContains('"name":0,"attached_files":', $body); + $this->assertContains('"name":1,"attached_files":', $body); + $this->assertContains('"; filename="foo.txt"', $body); + } + + public function testARequestOfParamsWillBeUrlEncoded() + { + $fbRequest = new FacebookRequest($this->fbApp, 'token', 'POST', '/foo', ['foo' => 'bar']); + $response = $this->fbClient->sendRequest($fbRequest); + + $headersSent = $response->getRequest()->getHeaders(); + + $this->assertEquals('application/x-www-form-urlencoded', $headersSent['Content-Type']); + } + + public function testARequestWithFilesWillBeMultipart() + { + $myFile = new FacebookFile(__DIR__ . '/foo.txt'); + $fbRequest = new FacebookRequest($this->fbApp, 'token', 'POST', '/foo', ['file' => $myFile]); + $response = $this->fbClient->sendRequest($fbRequest); + + $headersSent = $response->getRequest()->getHeaders(); + + $this->assertContains('multipart/form-data; boundary=', $headersSent['Content-Type']); + } + + /** + * @group integration + */ + public function testCanCreateATestUserAndGetTheProfileAndThenDeleteTheTestUser() + { + $this->initializeTestApp(); + + // Create a test user + $testUserPath = '/' . FacebookTestCredentials::$appId . '/accounts/test-users'; + $params = [ + 'installed' => true, + 'name' => 'Foo Phpunit User', + 'locale' => 'en_US', + 'permissions' => implode(',', ['read_stream', 'user_photos']), + ]; + + $request = new FacebookRequest( + static::$testFacebookApp, + static::$testFacebookApp->getAccessToken(), + 'POST', + $testUserPath, + $params + ); + $response = static::$testFacebookClient->sendRequest($request)->getGraphNode(); + + $testUserId = $response->getField('id'); + $testUserAccessToken = $response->getField('access_token'); + + // Get the test user's profile + $request = new FacebookRequest( + static::$testFacebookApp, + $testUserAccessToken, + 'GET', + '/me' + ); + $graphNode = static::$testFacebookClient->sendRequest($request)->getGraphNode(); + + $this->assertInstanceOf('Facebook\GraphNodes\GraphNode', $graphNode); + $this->assertNotNull($graphNode->getField('id')); + $this->assertEquals('Foo Phpunit User', $graphNode->getField('name')); + + // Delete test user + $request = new FacebookRequest( + static::$testFacebookApp, + static::$testFacebookApp->getAccessToken(), + 'DELETE', + '/' . $testUserId + ); + $graphNode = static::$testFacebookClient->sendRequest($request)->getGraphNode(); + + $this->assertTrue($graphNode->getField('success')); + } + + public function initializeTestApp() + { + if (!file_exists(__DIR__ . '/FacebookTestCredentials.php')) { + throw new FacebookSDKException( + 'You must create a FacebookTestCredentials.php file from FacebookTestCredentials.php.dist' + ); + } + + if (!strlen(FacebookTestCredentials::$appId) || + !strlen(FacebookTestCredentials::$appSecret) + ) { + throw new FacebookSDKException( + 'You must fill out FacebookTestCredentials.php' + ); + } + static::$testFacebookApp = new FacebookApp( + FacebookTestCredentials::$appId, + FacebookTestCredentials::$appSecret + ); + + // Use default client + $client = null; + + // Uncomment to enable curl implementation. + //$client = new FacebookCurlHttpClient(); + + // Uncomment to enable stream wrapper implementation. + //$client = new FacebookStreamHttpClient(); + + // Uncomment to enable Guzzle implementation. + //$client = new FacebookGuzzleHttpClient(); + + static::$testFacebookClient = new FacebookClient($client); + } +} -- cgit v1.2.3