File
4 years ago
Fixtures
4 years ago
Session
4 years ago
schema
4 years ago
AcceptHeaderItemTest.php
4 years ago
AcceptHeaderTest.php
4 years ago
ApacheRequestTest.php
4 years ago
BinaryFileResponseTest.php
4 years ago
CookieTest.php
4 years ago
ExpressionRequestMatcherTest.php
4 years ago
FileBagTest.php
4 years ago
HeaderBagTest.php
4 years ago
IpUtilsTest.php
4 years ago
JsonResponseTest.php
4 years ago
ParameterBagTest.php
4 years ago
RedirectResponseTest.php
4 years ago
RequestMatcherTest.php
4 years ago
RequestStackTest.php
4 years ago
RequestTest.php
4 years ago
ResponseFunctionalTest.php
4 years ago
ResponseHeaderBagTest.php
4 years ago
ResponseTest.php
4 years ago
ResponseTestCase.php
4 years ago
ServerBagTest.php
4 years ago
StreamedResponseTest.php
4 years ago
JsonResponseTest.php
263 lines
| 1 | <?php |
| 2 | |
| 3 | /* |
| 4 | * This file is part of the Symfony package. |
| 5 | * |
| 6 | * (c) Fabien Potencier <fabien@symfony.com> |
| 7 | * |
| 8 | * For the full copyright and license information, please view the LICENSE |
| 9 | * file that was distributed with this source code. |
| 10 | */ |
| 11 | |
| 12 | namespace Symfony\Component\HttpFoundation\Tests; |
| 13 | |
| 14 | use PHPUnit\Framework\TestCase; |
| 15 | use Symfony\Component\HttpFoundation\JsonResponse; |
| 16 | |
| 17 | class JsonResponseTest extends TestCase |
| 18 | { |
| 19 | protected function setUp() |
| 20 | { |
| 21 | parent::setUp(); |
| 22 | |
| 23 | if (!\defined('HHVM_VERSION')) { |
| 24 | $this->iniSet('serialize_precision', 14); |
| 25 | } |
| 26 | } |
| 27 | |
| 28 | public function testConstructorEmptyCreatesJsonObject() |
| 29 | { |
| 30 | $response = new JsonResponse(); |
| 31 | $this->assertSame('{}', $response->getContent()); |
| 32 | } |
| 33 | |
| 34 | public function testConstructorWithArrayCreatesJsonArray() |
| 35 | { |
| 36 | $response = new JsonResponse([0, 1, 2, 3]); |
| 37 | $this->assertSame('[0,1,2,3]', $response->getContent()); |
| 38 | } |
| 39 | |
| 40 | public function testConstructorWithAssocArrayCreatesJsonObject() |
| 41 | { |
| 42 | $response = new JsonResponse(['foo' => 'bar']); |
| 43 | $this->assertSame('{"foo":"bar"}', $response->getContent()); |
| 44 | } |
| 45 | |
| 46 | public function testConstructorWithSimpleTypes() |
| 47 | { |
| 48 | $response = new JsonResponse('foo'); |
| 49 | $this->assertSame('"foo"', $response->getContent()); |
| 50 | |
| 51 | $response = new JsonResponse(0); |
| 52 | $this->assertSame('0', $response->getContent()); |
| 53 | |
| 54 | $response = new JsonResponse(0.1); |
| 55 | $this->assertEquals(0.1, $response->getContent()); |
| 56 | $this->assertIsString($response->getContent()); |
| 57 | |
| 58 | $response = new JsonResponse(true); |
| 59 | $this->assertSame('true', $response->getContent()); |
| 60 | } |
| 61 | |
| 62 | public function testConstructorWithCustomStatus() |
| 63 | { |
| 64 | $response = new JsonResponse([], 202); |
| 65 | $this->assertSame(202, $response->getStatusCode()); |
| 66 | } |
| 67 | |
| 68 | public function testConstructorAddsContentTypeHeader() |
| 69 | { |
| 70 | $response = new JsonResponse(); |
| 71 | $this->assertSame('application/json', $response->headers->get('Content-Type')); |
| 72 | } |
| 73 | |
| 74 | public function testConstructorWithCustomHeaders() |
| 75 | { |
| 76 | $response = new JsonResponse([], 200, ['ETag' => 'foo']); |
| 77 | $this->assertSame('application/json', $response->headers->get('Content-Type')); |
| 78 | $this->assertSame('foo', $response->headers->get('ETag')); |
| 79 | } |
| 80 | |
| 81 | public function testConstructorWithCustomContentType() |
| 82 | { |
| 83 | $headers = ['Content-Type' => 'application/vnd.acme.blog-v1+json']; |
| 84 | |
| 85 | $response = new JsonResponse([], 200, $headers); |
| 86 | $this->assertSame('application/vnd.acme.blog-v1+json', $response->headers->get('Content-Type')); |
| 87 | } |
| 88 | |
| 89 | public function testSetJson() |
| 90 | { |
| 91 | $response = new JsonResponse('1', 200, [], true); |
| 92 | $this->assertEquals('1', $response->getContent()); |
| 93 | |
| 94 | $response = new JsonResponse('[1]', 200, [], true); |
| 95 | $this->assertEquals('[1]', $response->getContent()); |
| 96 | |
| 97 | $response = new JsonResponse(null, 200, []); |
| 98 | $response->setJson('true'); |
| 99 | $this->assertEquals('true', $response->getContent()); |
| 100 | } |
| 101 | |
| 102 | public function testCreate() |
| 103 | { |
| 104 | $response = JsonResponse::create(['foo' => 'bar'], 204); |
| 105 | |
| 106 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 107 | $this->assertEquals('{"foo":"bar"}', $response->getContent()); |
| 108 | $this->assertEquals(204, $response->getStatusCode()); |
| 109 | } |
| 110 | |
| 111 | public function testStaticCreateEmptyJsonObject() |
| 112 | { |
| 113 | $response = JsonResponse::create(); |
| 114 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 115 | $this->assertSame('{}', $response->getContent()); |
| 116 | } |
| 117 | |
| 118 | public function testStaticCreateJsonArray() |
| 119 | { |
| 120 | $response = JsonResponse::create([0, 1, 2, 3]); |
| 121 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 122 | $this->assertSame('[0,1,2,3]', $response->getContent()); |
| 123 | } |
| 124 | |
| 125 | public function testStaticCreateJsonObject() |
| 126 | { |
| 127 | $response = JsonResponse::create(['foo' => 'bar']); |
| 128 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 129 | $this->assertSame('{"foo":"bar"}', $response->getContent()); |
| 130 | } |
| 131 | |
| 132 | public function testStaticCreateWithSimpleTypes() |
| 133 | { |
| 134 | $response = JsonResponse::create('foo'); |
| 135 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 136 | $this->assertSame('"foo"', $response->getContent()); |
| 137 | |
| 138 | $response = JsonResponse::create(0); |
| 139 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 140 | $this->assertSame('0', $response->getContent()); |
| 141 | |
| 142 | $response = JsonResponse::create(0.1); |
| 143 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 144 | $this->assertEquals(0.1, $response->getContent()); |
| 145 | $this->assertIsString($response->getContent()); |
| 146 | |
| 147 | $response = JsonResponse::create(true); |
| 148 | $this->assertInstanceOf('Symfony\Component\HttpFoundation\JsonResponse', $response); |
| 149 | $this->assertSame('true', $response->getContent()); |
| 150 | } |
| 151 | |
| 152 | public function testStaticCreateWithCustomStatus() |
| 153 | { |
| 154 | $response = JsonResponse::create([], 202); |
| 155 | $this->assertSame(202, $response->getStatusCode()); |
| 156 | } |
| 157 | |
| 158 | public function testStaticCreateAddsContentTypeHeader() |
| 159 | { |
| 160 | $response = JsonResponse::create(); |
| 161 | $this->assertSame('application/json', $response->headers->get('Content-Type')); |
| 162 | } |
| 163 | |
| 164 | public function testStaticCreateWithCustomHeaders() |
| 165 | { |
| 166 | $response = JsonResponse::create([], 200, ['ETag' => 'foo']); |
| 167 | $this->assertSame('application/json', $response->headers->get('Content-Type')); |
| 168 | $this->assertSame('foo', $response->headers->get('ETag')); |
| 169 | } |
| 170 | |
| 171 | public function testStaticCreateWithCustomContentType() |
| 172 | { |
| 173 | $headers = ['Content-Type' => 'application/vnd.acme.blog-v1+json']; |
| 174 | |
| 175 | $response = JsonResponse::create([], 200, $headers); |
| 176 | $this->assertSame('application/vnd.acme.blog-v1+json', $response->headers->get('Content-Type')); |
| 177 | } |
| 178 | |
| 179 | public function testSetCallback() |
| 180 | { |
| 181 | $response = JsonResponse::create(['foo' => 'bar'])->setCallback('callback'); |
| 182 | |
| 183 | $this->assertEquals('/**/callback({"foo":"bar"});', $response->getContent()); |
| 184 | $this->assertEquals('text/javascript', $response->headers->get('Content-Type')); |
| 185 | } |
| 186 | |
| 187 | public function testJsonEncodeFlags() |
| 188 | { |
| 189 | $response = new JsonResponse('<>\'&"'); |
| 190 | |
| 191 | $this->assertEquals('"\u003C\u003E\u0027\u0026\u0022"', $response->getContent()); |
| 192 | } |
| 193 | |
| 194 | public function testGetEncodingOptions() |
| 195 | { |
| 196 | $response = new JsonResponse(); |
| 197 | |
| 198 | $this->assertEquals(\JSON_HEX_TAG | \JSON_HEX_APOS | \JSON_HEX_AMP | \JSON_HEX_QUOT, $response->getEncodingOptions()); |
| 199 | } |
| 200 | |
| 201 | public function testSetEncodingOptions() |
| 202 | { |
| 203 | $response = new JsonResponse(); |
| 204 | $response->setData([[1, 2, 3]]); |
| 205 | |
| 206 | $this->assertEquals('[[1,2,3]]', $response->getContent()); |
| 207 | |
| 208 | $response->setEncodingOptions(\JSON_FORCE_OBJECT); |
| 209 | |
| 210 | $this->assertEquals('{"0":{"0":1,"1":2,"2":3}}', $response->getContent()); |
| 211 | } |
| 212 | |
| 213 | public function testItAcceptsJsonAsString() |
| 214 | { |
| 215 | $response = JsonResponse::fromJsonString('{"foo":"bar"}'); |
| 216 | $this->assertSame('{"foo":"bar"}', $response->getContent()); |
| 217 | } |
| 218 | |
| 219 | public function testSetCallbackInvalidIdentifier() |
| 220 | { |
| 221 | $this->expectException('InvalidArgumentException'); |
| 222 | $response = new JsonResponse('foo'); |
| 223 | $response->setCallback('+invalid'); |
| 224 | } |
| 225 | |
| 226 | public function testSetContent() |
| 227 | { |
| 228 | $this->expectException('InvalidArgumentException'); |
| 229 | JsonResponse::create("\xB1\x31"); |
| 230 | } |
| 231 | |
| 232 | public function testSetContentJsonSerializeError() |
| 233 | { |
| 234 | $this->expectException('Exception'); |
| 235 | $this->expectExceptionMessage('This error is expected'); |
| 236 | if (!interface_exists('JsonSerializable', false)) { |
| 237 | $this->markTestSkipped('JsonSerializable is required.'); |
| 238 | } |
| 239 | |
| 240 | $serializable = new JsonSerializableObject(); |
| 241 | |
| 242 | JsonResponse::create($serializable); |
| 243 | } |
| 244 | |
| 245 | public function testSetComplexCallback() |
| 246 | { |
| 247 | $response = JsonResponse::create(['foo' => 'bar']); |
| 248 | $response->setCallback('ಠ_ಠ["foo"].bar[0]'); |
| 249 | |
| 250 | $this->assertEquals('/**/ಠ_ಠ["foo"].bar[0]({"foo":"bar"});', $response->getContent()); |
| 251 | } |
| 252 | } |
| 253 | |
| 254 | if (interface_exists('JsonSerializable', false)) { |
| 255 | class JsonSerializableObject implements \JsonSerializable |
| 256 | { |
| 257 | public function jsonSerialize() |
| 258 | { |
| 259 | throw new \Exception('This error is expected'); |
| 260 | } |
| 261 | } |
| 262 | } |
| 263 |