'bar'], 201); self::assertSame(201, $response->status); self::assertSame(['foo' => 'bar'], $response->body()); } public function testErrorResponseDefaultsToGivenStatus(): void { $response = Response::error('nope', 404); self::assertSame(404, $response->status); self::assertSame(['error' => 'nope'], $response->body()); } public function testJsonResponseIsNotAStream(): void { $response = Response::json(['foo' => 'bar']); self::assertFalse($response->isStream()); self::assertNull($response->writer()); } public function testStreamResponseExposesTheWriterWithoutBody(): void { $response = Response::stream(function (): void { echo 'hi'; }); self::assertTrue($response->isStream()); self::assertSame(200, $response->status); self::assertNull($response->body()); ob_start(); ($response->writer())(); self::assertSame('hi', ob_get_clean()); } }