phpBrowser = new \Codeception\Module\PhpBrowser(make_container()); $url = 'http://localhost:8010'; $this->phpBrowser->_setConfig(['url' => $url]); $this->phpBrowser->_initialize(); $this->module = Stub::make('\Codeception\Module\REST'); $this->module->_inject($this->phpBrowser); $this->module->_initialize(); $this->module->_before(Stub::makeEmpty('\Codeception\Test\Cest')); $this->phpBrowser->_before(Stub::makeEmpty('\Codeception\Test\Cest')); } private function setStubResponse($response) { $this->phpBrowser = Stub::make('\Codeception\Module\PhpBrowser', ['_getResponseContent' => $response]); $this->module->_inject($this->phpBrowser); $this->module->_initialize(); $this->module->_before(Stub::makeEmpty('\Codeception\Test\Cest')); } public function testGet() { $this->module->sendGET('/rest/user/'); $this->module->seeResponseIsJson(); $this->module->seeResponseContains('davert'); $this->module->seeResponseContainsJson(['name' => 'davert']); $this->module->seeResponseCodeIs(200); $this->module->dontSeeResponseCodeIs(404); } public function testSendAbsoluteUrlGet() { $this->module->sendGET('http://127.0.0.1:8010/rest/user/'); $this->module->seeResponseCodeIs(200); } public function testPost() { $this->module->sendPOST('/rest/user/', ['name' => 'john']); $this->module->seeResponseContains('john'); $this->module->seeResponseContainsJson(['name' => 'john']); } public function testValidJson() { $this->setStubResponse('{"xxx": "yyy"}'); $this->module->seeResponseIsJson(); $this->setStubResponse('{"xxx": "yyy", "zzz": ["a","b"]}'); $this->module->seeResponseIsJson(); $this->module->seeResponseEquals('{"xxx": "yyy", "zzz": ["a","b"]}'); } public function testInvalidJson() { $this->setExpectedException('PHPUnit\Framework\ExpectationFailedException'); $this->setStubResponse('{xxx = yyy}'); $this->module->seeResponseIsJson(); } public function testValidXml() { $this->setStubResponse(''); $this->module->seeResponseIsXml(); $this->setStubResponse('John'); $this->module->seeResponseIsXml(); $this->module->seeResponseEquals('John'); } public function testInvalidXml() { $this->setExpectedException('PHPUnit\Framework\ExpectationFailedException'); $this->setStubResponse('John'); $this->module->seeResponseIsXml(); } public function testSeeInJson() { $this->setStubResponse( '{"ticket": {"title": "Bug should be fixed", "user": {"name": "Davert"}, "labels": null}}' ); $this->module->seeResponseIsJson(); $this->module->seeResponseContainsJson(['name' => 'Davert']); $this->module->seeResponseContainsJson(['user' => ['name' => 'Davert']]); $this->module->seeResponseContainsJson(['ticket' => ['title' => 'Bug should be fixed']]); $this->module->seeResponseContainsJson(['ticket' => ['user' => ['name' => 'Davert']]]); $this->module->seeResponseContainsJson(array('ticket' => array('labels' => null))); } public function testSeeInJsonCollection() { $this->setStubResponse( '[{"user":"Blacknoir","age":27,"tags":["wed-dev","php"]},' . '{"user":"John Doe","age":27,"tags":["web-dev","java"]}]' ); $this->module->seeResponseIsJson(); $this->module->seeResponseContainsJson(array('tags' => array('web-dev', 'java'))); $this->module->seeResponseContainsJson(array('user' => 'John Doe', 'age' => 27)); } public function testArrayJson() { $this->setStubResponse( '[{"id":1,"title": "Bug should be fixed"},{"title": "Feature should be implemented","id":2}]' ); $this->module->seeResponseContainsJson(array('id' => 1)); } /** * @issue https://github.com/Codeception/Codeception/issues/4202 */ public function testSeeResponseContainsJsonFailsGracefullyWhenJsonResultIsNotArray() { $this->shouldFail(); $this->setStubResponse(json_encode('no_status')); $this->module->seeResponseContainsJson(array('id' => 1)); } public function testDontSeeResponseJsonMatchesJsonPathPassesWhenJsonResultIsNotArray() { $this->setStubResponse(json_encode('no_status')); $this->module->dontSeeResponseJsonMatchesJsonPath('$.error'); } public function testDontSeeInJson() { $this->setStubResponse('{"ticket": {"title": "Bug should be fixed", "user": {"name": "Davert"}}}'); $this->module->seeResponseIsJson(); $this->module->dontSeeResponseContainsJson(array('name' => 'Davet')); $this->module->dontSeeResponseContainsJson(array('user' => array('name' => 'Davet'))); $this->module->dontSeeResponseContainsJson(array('user' => array('title' => 'Bug should be fixed'))); } public function testApplicationJsonIncludesJsonAsContent() { $this->module->haveHttpHeader('Content-Type', 'application/json'); $this->module->sendPOST('/', array('name' => 'john')); /** @var $request \Symfony\Component\BrowserKit\Request **/ $request = $this->module->client->getRequest(); $this->assertContains('application/json', $request->getServer()); $server = $request->getServer(); $this->assertEquals('application/json', $server['HTTP_CONTENT_TYPE']); $this->assertJson($request->getContent()); $this->assertEmpty($request->getParameters()); } /** * @issue https://github.com/Codeception/Codeception/issues/3516 */ public function testApplicationJsonHeaderCheckIsCaseInsensitive() { $this->module->haveHttpHeader('content-type', 'application/json'); $this->module->sendPOST('/', array('name' => 'john')); /** @var $request \Symfony\Component\BrowserKit\Request **/ $request = $this->module->client->getRequest(); $server = $request->getServer(); $this->assertEquals('application/json', $server['HTTP_CONTENT_TYPE']); $this->assertJson($request->getContent()); $this->assertEmpty($request->getParameters()); } public function testGetApplicationJsonNotIncludesJsonAsContent() { $this->module->haveHttpHeader('Content-Type', 'application/json'); $this->module->sendGET('/', array('name' => 'john')); /** @var $request \Symfony\Component\BrowserKit\Request **/ $request = $this->module->client->getRequest(); $this->assertNull($request->getContent()); $this->assertContains('john', $request->getParameters()); } /** * @Issue https://github.com/Codeception/Codeception/issues/2075 * Client is undefined for the second test */ public function testTwoTests() { $cest1 = Stub::makeEmpty('\Codeception\Test\Cest'); $cest2 = Stub::makeEmpty('\Codeception\Test\Cest'); $this->module->sendGET('/rest/user/'); $this->module->seeResponseIsJson(); $this->module->seeResponseContains('davert'); $this->module->seeResponseContainsJson(array('name' => 'davert')); $this->module->seeResponseCodeIs(200); $this->module->dontSeeResponseCodeIs(404); $this->phpBrowser->_after($cest1); $this->module->_after($cest1); $this->module->_before($cest2); $this->phpBrowser->_before($cest2); $this->module->sendGET('/rest/user/'); $this->module->seeResponseIsJson(); $this->module->seeResponseContains('davert'); $this->module->seeResponseContainsJson(array('name' => 'davert')); $this->module->seeResponseCodeIs(200); $this->module->dontSeeResponseCodeIs(404); } /** * @Issue https://github.com/Codeception/Codeception/issues/2070 */ public function testArrayOfZeroesInJsonResponse() { $this->module->haveHttpHeader('Content-Type', 'application/json'); $this->module->sendGET('/rest/zeroes'); $this->module->dontSeeResponseContainsJson([ 'responseCode' => 0, 'data' => [ 0, 0, 0, ] ]); } public function testFileUploadWithKeyValueArray() { $tmpFileName = tempnam('/tmp', 'test_'); file_put_contents($tmpFileName, 'test data'); $files = [ 'file' => $tmpFileName, ]; $this->module->sendPOST('/rest/file-upload', [], $files); $this->module->seeResponseContainsJson([ 'uploaded' => true, ]); } public function testFileUploadWithFilesArray() { $tmpFileName = tempnam('/tmp', 'test_'); file_put_contents($tmpFileName, 'test data'); $files = [ 'file' => [ 'name' => 'file.txt', 'type' => 'text/plain', 'size' => 9, 'tmp_name' => $tmpFileName, ] ]; $this->module->sendPOST('/rest/file-upload', [], $files); $this->module->seeResponseContainsJson([ 'uploaded' => true, ]); } public function testCanInspectResultOfPhpBrowserRequest() { $this->phpBrowser->amOnPage('/rest/user/'); $this->module->seeResponseCodeIs(200); $this->module->seeResponseIsJson(); } /** * @Issue 4203 https://github.com/Codeception/Codeception/issues/4203 */ public function testSessionHeaderBackup() { $this->module->haveHttpHeader('foo', 'bar'); $this->module->sendGET('/rest/foo/'); $this->module->seeResponseContains('foo: "bar"'); $session = $this->phpBrowser->_backupSession(); $this->module->haveHttpHeader('foo', 'baz'); $this->module->sendGET('/rest/foo/'); $this->module->seeResponseContains('foo: "baz"'); $this->phpBrowser->_loadSession($session); $this->module->sendGET('/rest/foo/'); $this->module->seeResponseContains('foo: "bar"'); } protected function shouldFail() { $this->setExpectedException('PHPUnit\Framework\AssertionFailedError'); } public function testGrabFromCurrentUrl() { $this->module->sendGET('/rest/foo/'); $this->assertEquals('/rest/foo/', $this->phpBrowser->grabFromCurrentUrl()); } }