'application/json', 'Authorization' => 'Bearer valid-token', ]; $data = ['a' => 'b', 'c' => 'd']; $request = new Request('http://example.com', 'POST', $headers, json_encode($data)); $this->assertEquals('http://example.com', (string)$request->getUri()); $this->assertContains($request->getMethod(), 'POST'); $this->assertEquals('application/json', $request->getHeaderLine('Content-Type')); $this->assertEquals(json_encode($data), $request->getBody()->__toString()); } /** * @param array $headers The HTTP headers to set. * @param array|string|null $data The request body to use. * @param string $method The HTTP method to use. * * @dataProvider additionProvider */ public function testMethods(array $headers, $data, $method) { $request = new Request('http://example.com', $method, $headers, json_encode($data)); $this->assertEquals($request->getMethod(), $method); $this->assertEquals('http://example.com', (string)$request->getUri()); $this->assertEquals('application/json', $request->getHeaderLine('Content-Type')); $this->assertEquals(json_encode($data), $request->getBody()->__toString()); } /** * @dataProvider additionProvider */ public function additionProvider() { $headers = [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer valid-token', ]; $data = ['a' => 'b', 'c' => 'd']; return [ [$headers, $data, Request::METHOD_POST], [$headers, $data, Request::METHOD_GET], [$headers, $data, Request::METHOD_PUT], [$headers, $data, Request::METHOD_DELETE], ]; } /** * test array data, header and constructor * * @return void */ public function testConstructorArrayData() { $headers = [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer valid-token', ]; $data = ['a' => 'b', 'c' => 'd']; $request = new Request('http://example.com', 'POST', $headers, $data); $this->assertEquals('http://example.com', (string)$request->getUri()); $this->assertEquals('POST', $request->getMethod()); $this->assertEquals('application/x-www-form-urlencoded', $request->getHeaderLine('Content-Type')); $this->assertEquals('a=b&c=d', $request->getBody()->__toString()); } /** * test nested array data for encoding of brackets, header and constructor * * @return void */ public function testConstructorArrayNestedData() { $headers = [ 'Content-Type' => 'application/json', 'Authorization' => 'Bearer valid-token', ]; $data = ['a' => 'b', 'c' => ['foo', 'bar']]; $request = new Request('http://example.com', 'POST', $headers, $data); $this->assertEquals('http://example.com', (string)$request->getUri()); $this->assertEquals('POST', $request->getMethod()); $this->assertEquals('application/x-www-form-urlencoded', $request->getHeaderLine('Content-Type')); $this->assertEquals('a=b&c%5B0%5D=foo&c%5B1%5D=bar', $request->getBody()->__toString()); } /** * test body method. * * @return void */ public function testBody() { $data = '{"json":"data"}'; $request = new Request('', Request::METHOD_GET, [], $data); $this->assertEquals($data, $request->getBody()->__toString()); } /** * test body method with array payload * * @return void */ public function testBodyArray() { $data = [ 'a' => 'b', 'c' => 'd', 'e' => ['f', 'g'], ]; $request = new Request('', Request::METHOD_GET, [], $data); $this->assertEquals('application/x-www-form-urlencoded', $request->getHeaderLine('content-type')); $this->assertEquals( 'a=b&c=d&e%5B0%5D=f&e%5B1%5D=g', $request->getBody()->__toString(), 'Body should be serialized' ); } /** * Test that body() modifies the PSR7 stream * * @return void */ public function testBodyInteroperability() { $request = new Request(); $this->assertSame('', $request->getBody()->__toString()); $data = '{"json":"data"}'; $request = new Request('', Request::METHOD_GET, [], $data); $this->assertSame($data, $request->getBody()->__toString()); } /** * Test the default headers * * @return void */ public function testDefaultHeaders() { $request = new Request(); $this->assertEquals('CakePHP', $request->getHeaderLine('User-Agent')); $this->assertEquals('close', $request->getHeaderLine('Connection')); } }