diff --git a/composer.json b/composer.json index 8f8df5b..8b3d397 100644 --- a/composer.json +++ b/composer.json @@ -37,7 +37,6 @@ "Gt\\Http\\Test\\": "./test/phpunit" } }, - "scripts": { "phpunit": "vendor/bin/phpunit --configuration phpunit.xml", "phpstan": "vendor/bin/phpstan analyse --memory-limit=512M --level 7 src", @@ -50,7 +49,6 @@ "@phpmd" ] }, - "extra": { "branch-alias": { "dev-master": "1.3-dev" diff --git a/src/Response.php b/src/Response.php index 133164e..685fbad 100644 --- a/src/Response.php +++ b/src/Response.php @@ -104,6 +104,14 @@ public function setExitCallback(callable $callback):void { $this->exitCallback = $callback; } + public function abort(?int $statusCode = null):void { + if($statusCode) { + $this->setStatus($statusCode); + } + + call_user_func($this->exitCallback); + } + public function reload():void { $this->redirect($this->request?->getUri() ?? new Uri("./")); } @@ -164,6 +172,10 @@ public function withStatus( return $clone; } + public function setStatus(int $code):void { + $this->statusCode = $code; + } + /** @inheritDoc */ public function getReasonPhrase():string { return StatusCode::REASON_PHRASE[$this->statusCode ?? 0] ?? ""; diff --git a/src/ResponseStatusException/ClientError/HttpBadRequest.php b/src/ResponseStatusException/ClientError/HttpBadRequest.php index be4731e..6e064c6 100644 --- a/src/ResponseStatusException/ClientError/HttpBadRequest.php +++ b/src/ResponseStatusException/ClientError/HttpBadRequest.php @@ -1,7 +1,8 @@ setStatus(321); + self::assertSame(321, $sut->getStatusCode()); + } + + public function testAbort() { + $called = false; + $exitCallback = function()use(&$called) { + $called = true; + }; + + $sut = new Response(); + $sut->setExitCallback($exitCallback); + $sut->abort(); + self::assertTrue($called); + } + + public function testAbort_withNewStatus() { + $called = false; + $exitCallback = function()use(&$called) { + $called = true; + }; + + $sut = new Response(500); + $sut->setExitCallback($exitCallback); + $sut->abort(503); + self::assertTrue($called); + self::assertSame(503, $sut->getStatusCode()); + } + public function testGetReasonPhraseDefault() { $notFound = new Response(404); self::assertEquals("Not Found", $notFound->getReasonPhrase());