2013-01-10 15:28:59 -06:00
|
|
|
<?php
|
|
|
|
|
|
2017-01-17 14:30:19 +00:00
|
|
|
namespace Illuminate\Tests\Http;
|
|
|
|
|
|
2013-01-10 15:28:59 -06:00
|
|
|
use Mockery as m;
|
2017-02-10 15:13:41 +01:00
|
|
|
use JsonSerializable;
|
2013-01-10 15:28:59 -06:00
|
|
|
use Illuminate\Http\Request;
|
2016-12-30 21:31:11 +01:00
|
|
|
use PHPUnit\Framework\TestCase;
|
2013-01-10 15:28:59 -06:00
|
|
|
use Illuminate\Http\RedirectResponse;
|
2014-09-08 17:05:21 -05:00
|
|
|
use Illuminate\Contracts\Support\Jsonable;
|
2017-02-10 15:13:41 +01:00
|
|
|
use Illuminate\Contracts\Support\Arrayable;
|
2013-01-10 15:28:59 -06:00
|
|
|
|
2016-12-30 21:31:11 +01:00
|
|
|
class HttpResponseTest extends TestCase
|
2015-06-01 16:26:53 +01:00
|
|
|
{
|
2015-06-01 15:56:31 +01:00
|
|
|
public function tearDown()
|
|
|
|
|
{
|
|
|
|
|
m::close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testJsonResponsesAreConvertedAndHeadersAreSet()
|
|
|
|
|
{
|
2017-02-10 15:13:41 +01:00
|
|
|
$response = new \Illuminate\Http\Response(new ArrayableStub);
|
|
|
|
|
$this->assertEquals('{"foo":"bar"}', $response->getContent());
|
|
|
|
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
|
|
|
|
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response(new JsonableStub);
|
2015-06-01 15:56:31 +01:00
|
|
|
$this->assertEquals('foo', $response->getContent());
|
|
|
|
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
|
|
|
|
|
2017-02-10 15:13:41 +01:00
|
|
|
$response = new \Illuminate\Http\Response(new ArrayableAndJsonableStub);
|
|
|
|
|
$this->assertEquals('{"foo":"bar"}', $response->getContent());
|
|
|
|
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
|
|
|
|
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response();
|
2015-06-01 16:35:44 +01:00
|
|
|
$response->setContent(['foo' => 'bar']);
|
2015-06-01 15:56:31 +01:00
|
|
|
$this->assertEquals('{"foo":"bar"}', $response->getContent());
|
|
|
|
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
2015-12-20 21:04:47 +01:00
|
|
|
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response(new JsonSerializableStub);
|
2015-12-20 21:04:47 +01:00
|
|
|
$this->assertEquals('{"foo":"bar"}', $response->getContent());
|
|
|
|
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
2015-06-01 15:56:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testRenderablesAreRendered()
|
|
|
|
|
{
|
|
|
|
|
$mock = m::mock('Illuminate\Contracts\Support\Renderable');
|
|
|
|
|
$mock->shouldReceive('render')->once()->andReturn('foo');
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response($mock);
|
2015-06-01 15:56:31 +01:00
|
|
|
$this->assertEquals('foo', $response->getContent());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testHeader()
|
|
|
|
|
{
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response();
|
2015-06-01 15:56:31 +01:00
|
|
|
$this->assertNull($response->headers->get('foo'));
|
|
|
|
|
$response->header('foo', 'bar');
|
|
|
|
|
$this->assertEquals('bar', $response->headers->get('foo'));
|
|
|
|
|
$response->header('foo', 'baz', false);
|
|
|
|
|
$this->assertEquals('bar', $response->headers->get('foo'));
|
|
|
|
|
$response->header('foo', 'baz');
|
|
|
|
|
$this->assertEquals('baz', $response->headers->get('foo'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testWithCookie()
|
|
|
|
|
{
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response();
|
2016-03-02 12:38:56 +01:00
|
|
|
$this->assertCount(0, $response->headers->getCookies());
|
2017-01-17 14:30:19 +00:00
|
|
|
$this->assertEquals($response, $response->withCookie(new \Symfony\Component\HttpFoundation\Cookie('foo', 'bar')));
|
2015-06-01 15:56:31 +01:00
|
|
|
$cookies = $response->headers->getCookies();
|
2016-03-02 12:38:56 +01:00
|
|
|
$this->assertCount(1, $cookies);
|
2015-06-01 15:56:31 +01:00
|
|
|
$this->assertEquals('foo', $cookies[0]->getName());
|
|
|
|
|
$this->assertEquals('bar', $cookies[0]->getValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testGetOriginalContent()
|
|
|
|
|
{
|
2015-06-01 16:35:44 +01:00
|
|
|
$arr = ['foo' => 'bar'];
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response();
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->setContent($arr);
|
|
|
|
|
$this->assertSame($arr, $response->getOriginalContent());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testSetAndRetrieveStatusCode()
|
|
|
|
|
{
|
2017-01-17 14:30:19 +00:00
|
|
|
$response = new \Illuminate\Http\Response('foo');
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->setStatusCode(404);
|
|
|
|
|
$this->assertSame(404, $response->getStatusCode());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testOnlyInputOnRedirect()
|
|
|
|
|
{
|
|
|
|
|
$response = new RedirectResponse('foo.bar');
|
2015-06-01 16:35:44 +01:00
|
|
|
$response->setRequest(Request::create('/', 'GET', ['name' => 'Taylor', 'age' => 26]));
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->setSession($session = m::mock('Illuminate\Session\Store'));
|
2015-06-01 16:35:44 +01:00
|
|
|
$session->shouldReceive('flashInput')->once()->with(['name' => 'Taylor']);
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->onlyInput('name');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testExceptInputOnRedirect()
|
|
|
|
|
{
|
|
|
|
|
$response = new RedirectResponse('foo.bar');
|
2015-06-01 16:35:44 +01:00
|
|
|
$response->setRequest(Request::create('/', 'GET', ['name' => 'Taylor', 'age' => 26]));
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->setSession($session = m::mock('Illuminate\Session\Store'));
|
2015-06-01 16:35:44 +01:00
|
|
|
$session->shouldReceive('flashInput')->once()->with(['name' => 'Taylor']);
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->exceptInput('age');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testFlashingErrorsOnRedirect()
|
|
|
|
|
{
|
|
|
|
|
$response = new RedirectResponse('foo.bar');
|
2015-06-01 16:35:44 +01:00
|
|
|
$response->setRequest(Request::create('/', 'GET', ['name' => 'Taylor', 'age' => 26]));
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->setSession($session = m::mock('Illuminate\Session\Store'));
|
2017-01-17 14:30:19 +00:00
|
|
|
$session->shouldReceive('get')->with('errors', m::type('Illuminate\Support\ViewErrorBag'))->andReturn(new \Illuminate\Support\ViewErrorBag);
|
2015-06-01 15:56:31 +01:00
|
|
|
$session->shouldReceive('flash')->once()->with('errors', m::type('Illuminate\Support\ViewErrorBag'));
|
|
|
|
|
$provider = m::mock('Illuminate\Contracts\Support\MessageProvider');
|
2017-01-17 14:30:19 +00:00
|
|
|
$provider->shouldReceive('getMessageBag')->once()->andReturn(new \Illuminate\Support\MessageBag);
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->withErrors($provider);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testSettersGettersOnRequest()
|
|
|
|
|
{
|
|
|
|
|
$response = new RedirectResponse('foo.bar');
|
|
|
|
|
$this->assertNull($response->getRequest());
|
|
|
|
|
$this->assertNull($response->getSession());
|
|
|
|
|
|
|
|
|
|
$request = Request::create('/', 'GET');
|
|
|
|
|
$session = m::mock('Illuminate\Session\Store');
|
|
|
|
|
$response->setRequest($request);
|
|
|
|
|
$response->setSession($session);
|
|
|
|
|
$this->assertSame($request, $response->getRequest());
|
|
|
|
|
$this->assertSame($session, $response->getSession());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testRedirectWithErrorsArrayConvertsToMessageBag()
|
|
|
|
|
{
|
|
|
|
|
$response = new RedirectResponse('foo.bar');
|
2015-06-01 16:35:44 +01:00
|
|
|
$response->setRequest(Request::create('/', 'GET', ['name' => 'Taylor', 'age' => 26]));
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->setSession($session = m::mock('Illuminate\Session\Store'));
|
2017-01-17 14:30:19 +00:00
|
|
|
$session->shouldReceive('get')->with('errors', m::type('Illuminate\Support\ViewErrorBag'))->andReturn(new \Illuminate\Support\ViewErrorBag);
|
2015-06-01 15:56:31 +01:00
|
|
|
$session->shouldReceive('flash')->once()->with('errors', m::type('Illuminate\Support\ViewErrorBag'));
|
2015-06-01 16:35:44 +01:00
|
|
|
$provider = ['foo' => 'bar'];
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->withErrors($provider);
|
|
|
|
|
}
|
|
|
|
|
|
2017-02-28 22:06:52 +01:00
|
|
|
public function testWithHeaders()
|
|
|
|
|
{
|
|
|
|
|
$response = new \Illuminate\Http\Response(null, 200, ['foo' => 'bar']);
|
|
|
|
|
$this->assertSame('bar', $response->headers->get('foo'));
|
|
|
|
|
|
|
|
|
|
$response->withHeaders(['foo' => 'BAR', 'bar' => 'baz']);
|
|
|
|
|
$this->assertSame('BAR', $response->headers->get('foo'));
|
|
|
|
|
$this->assertSame('baz', $response->headers->get('bar'));
|
|
|
|
|
|
|
|
|
|
$responseMessageBag = new \Symfony\Component\HttpFoundation\ResponseHeaderBag(['bar' => 'BAZ', 'titi' => 'toto']);
|
|
|
|
|
$response->withHeaders($responseMessageBag);
|
|
|
|
|
$this->assertSame('BAZ', $response->headers->get('bar'));
|
|
|
|
|
$this->assertSame('toto', $response->headers->get('titi'));
|
|
|
|
|
|
|
|
|
|
$headerBag = new \Symfony\Component\HttpFoundation\HeaderBag(['bar' => 'BAAA', 'titi' => 'TATA']);
|
|
|
|
|
$response->withHeaders($headerBag);
|
|
|
|
|
$this->assertSame('BAAA', $response->headers->get('bar'));
|
|
|
|
|
$this->assertSame('TATA', $response->headers->get('titi'));
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-01 15:56:31 +01:00
|
|
|
public function testMagicCall()
|
|
|
|
|
{
|
|
|
|
|
$response = new RedirectResponse('foo.bar');
|
2015-06-01 16:35:44 +01:00
|
|
|
$response->setRequest(Request::create('/', 'GET', ['name' => 'Taylor', 'age' => 26]));
|
2015-06-01 15:56:31 +01:00
|
|
|
$response->setSession($session = m::mock('Illuminate\Session\Store'));
|
|
|
|
|
$session->shouldReceive('flash')->once()->with('foo', 'bar');
|
|
|
|
|
$response->withFoo('bar');
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-25 23:21:08 +00:00
|
|
|
/**
|
2017-01-17 14:30:19 +00:00
|
|
|
* @expectedException \BadMethodCallException
|
2015-11-25 23:21:08 +00:00
|
|
|
*/
|
2015-06-01 15:56:31 +01:00
|
|
|
public function testMagicCallException()
|
|
|
|
|
{
|
|
|
|
|
$response = new RedirectResponse('foo.bar');
|
|
|
|
|
$response->doesNotExist('bar');
|
|
|
|
|
}
|
2013-01-10 15:28:59 -06:00
|
|
|
}
|
|
|
|
|
|
2017-02-10 15:13:41 +01:00
|
|
|
class ArrayableStub implements Arrayable
|
|
|
|
|
{
|
|
|
|
|
public function toArray()
|
|
|
|
|
{
|
|
|
|
|
return ['foo' => 'bar'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class ArrayableAndJsonableStub implements Arrayable, Jsonable
|
|
|
|
|
{
|
|
|
|
|
public function toJson($options = 0)
|
|
|
|
|
{
|
|
|
|
|
return '{"foo":"bar"}';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function toArray()
|
|
|
|
|
{
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-01 16:26:53 +01:00
|
|
|
class JsonableStub implements Jsonable
|
|
|
|
|
{
|
|
|
|
|
public function toJson($options = 0)
|
|
|
|
|
{
|
|
|
|
|
return 'foo';
|
|
|
|
|
}
|
2014-02-27 19:30:59 +00:00
|
|
|
}
|
2015-12-20 21:04:47 +01:00
|
|
|
|
2017-02-10 15:13:41 +01:00
|
|
|
class JsonSerializableStub implements JsonSerializable
|
2015-12-20 21:04:47 +01:00
|
|
|
{
|
|
|
|
|
public function jsonSerialize()
|
|
|
|
|
{
|
|
|
|
|
return ['foo' => 'bar'];
|
|
|
|
|
}
|
|
|
|
|
}
|