Skip to content

Commit

Permalink
Adding Interface with status codes
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas Oppermann committed Aug 14, 2015
1 parent 8657da7 commit 3ce63cf
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 85 deletions.
64 changes: 0 additions & 64 deletions src/Httpstatus.php
Expand Up @@ -26,70 +26,6 @@ class Httpstatus implements Countable, IteratorAggregate
const CLASS_CLIENT_ERROR = 4;
const CLASS_SERVER_ERROR = 5;

/**
* Every standard HTTP status code as a constant
*/
const HTTP_CONTINUE = 100;
const HTTP_SWITCHING_PROTOCOLS = 101;
const HTTP_PROCESSING = 102; // RFC2518
const HTTP_OK = 200;
const HTTP_CREATED = 201;
const HTTP_ACCEPTED = 202;
const HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
const HTTP_NO_CONTENT = 204;
const HTTP_RESET_CONTENT = 205;
const HTTP_PARTIAL_CONTENT = 206;
const HTTP_MULTI_STATUS = 207; // RFC4918
const HTTP_ALREADY_REPORTED = 208; // RFC5842
const HTTP_IM_USED = 226; // RFC3229
const HTTP_MULTIPLE_CHOICES = 300;
const HTTP_MOVED_PERMANENTLY = 301;
const HTTP_FOUND = 302;
const HTTP_SEE_OTHER = 303;
const HTTP_NOT_MODIFIED = 304;
const HTTP_USE_PROXY = 305;
const HTTP_RESERVED = 306;
const HTTP_TEMPORARY_REDIRECT = 307;
const HTTP_PERMANENT_REDIRECT = 308; // RFC7238
const HTTP_BAD_REQUEST = 400;
const HTTP_UNAUTHORIZED = 401;
const HTTP_PAYMENT_REQUIRED = 402;
const HTTP_FORBIDDEN = 403;
const HTTP_NOT_FOUND = 404;
const HTTP_METHOD_NOT_ALLOWED = 405;
const HTTP_NOT_ACCEPTABLE = 406;
const HTTP_PROXY_AUTHENTICATION_REQUIRED = 407;
const HTTP_REQUEST_TIMEOUT = 408;
const HTTP_CONFLICT = 409;
const HTTP_GONE = 410;
const HTTP_LENGTH_REQUIRED = 411;
const HTTP_PRECONDITION_FAILED = 412;
const HTTP_PAYLOAD_TOO_LARGE = 413;
const HTTP_URI_TOO_LONG = 414;
const HTTP_UNSUPPORTED_MEDIA_TYPE = 415;
const HTTP_RANGE_NOT_SATISFIABLE = 416;
const HTTP_EXPECTATION_FAILED = 417;
const HTTP_MISDIRECTED_REQUEST = 421;
const HTTP_UNPROCESSABLE_ENTITY = 422; // RFC4918
const HTTP_LOCKED = 423; // RFC4918
const HTTP_FAILED_DEPENDENCY = 424; // RFC4918
const HTTP_RESERVED_FOR_WEBDAV_ADVANCED_COLLECTIONS_EXPIRED_PROPOSAL = 425; // RFC2817
const HTTP_UPGRADE_REQUIRED = 426; // RFC2817
const HTTP_PRECONDITION_REQUIRED = 428; // RFC6585
const HTTP_TOO_MANY_REQUESTS = 429; // RFC6585
const HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; // RFC6585
const HTTP_INTERNAL_SERVER_ERROR = 500;
const HTTP_NOT_IMPLEMENTED = 501;
const HTTP_BAD_GATEWAY = 502;
const HTTP_SERVICE_UNAVAILABLE = 503;
const HTTP_GATEWAY_TIMEOUT = 504;
const HTTP_VERSION_NOT_SUPPORTED = 505;
const HTTP_VARIANT_ALSO_NEGOTIATES = 506; // RFC2295
const HTTP_INSUFFICIENT_STORAGE = 507; // RFC4918
const HTTP_LOOP_DETECTED = 508; // RFC5842
const HTTP_NOT_EXTENDED = 510; // RFC2774
const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; // RFC6585

protected $httpStatus = [
100 => 'Continue',
101 => 'Switching Protocols',
Expand Down
70 changes: 70 additions & 0 deletions src/Httpstatuscodes.php
@@ -0,0 +1,70 @@
<?php

namespace Lukasoppermann\Httpstatus;

interface Httpstatuscodes
{
/**
* Every standard HTTP status code as a constant
*/
const HTTP_CONTINUE = 100;
const HTTP_SWITCHING_PROTOCOLS = 101;
const HTTP_PROCESSING = 102; // RFC2518
const HTTP_OK = 200;
const HTTP_CREATED = 201;
const HTTP_ACCEPTED = 202;
const HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
const HTTP_NO_CONTENT = 204;
const HTTP_RESET_CONTENT = 205;
const HTTP_PARTIAL_CONTENT = 206;
const HTTP_MULTI_STATUS = 207; // RFC4918
const HTTP_ALREADY_REPORTED = 208; // RFC5842
const HTTP_IM_USED = 226; // RFC3229
const HTTP_MULTIPLE_CHOICES = 300;
const HTTP_MOVED_PERMANENTLY = 301;
const HTTP_FOUND = 302;
const HTTP_SEE_OTHER = 303;
const HTTP_NOT_MODIFIED = 304;
const HTTP_USE_PROXY = 305;
const HTTP_RESERVED = 306;
const HTTP_TEMPORARY_REDIRECT = 307;
const HTTP_PERMANENT_REDIRECT = 308; // RFC7238
const HTTP_BAD_REQUEST = 400;
const HTTP_UNAUTHORIZED = 401;
const HTTP_PAYMENT_REQUIRED = 402;
const HTTP_FORBIDDEN = 403;
const HTTP_NOT_FOUND = 404;
const HTTP_METHOD_NOT_ALLOWED = 405;
const HTTP_NOT_ACCEPTABLE = 406;
const HTTP_PROXY_AUTHENTICATION_REQUIRED = 407;
const HTTP_REQUEST_TIMEOUT = 408;
const HTTP_CONFLICT = 409;
const HTTP_GONE = 410;
const HTTP_LENGTH_REQUIRED = 411;
const HTTP_PRECONDITION_FAILED = 412;
const HTTP_PAYLOAD_TOO_LARGE = 413;
const HTTP_URI_TOO_LONG = 414;
const HTTP_UNSUPPORTED_MEDIA_TYPE = 415;
const HTTP_RANGE_NOT_SATISFIABLE = 416;
const HTTP_EXPECTATION_FAILED = 417;
const HTTP_MISDIRECTED_REQUEST = 421;
const HTTP_UNPROCESSABLE_ENTITY = 422; // RFC4918
const HTTP_LOCKED = 423; // RFC4918
const HTTP_FAILED_DEPENDENCY = 424; // RFC4918
const HTTP_RESERVED_FOR_WEBDAV_ADVANCED_COLLECTIONS_EXPIRED_PROPOSAL = 425; // RFC2817
const HTTP_UPGRADE_REQUIRED = 426; // RFC2817
const HTTP_PRECONDITION_REQUIRED = 428; // RFC6585
const HTTP_TOO_MANY_REQUESTS = 429; // RFC6585
const HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; // RFC6585
const HTTP_INTERNAL_SERVER_ERROR = 500;
const HTTP_NOT_IMPLEMENTED = 501;
const HTTP_BAD_GATEWAY = 502;
const HTTP_SERVICE_UNAVAILABLE = 503;
const HTTP_GATEWAY_TIMEOUT = 504;
const HTTP_VERSION_NOT_SUPPORTED = 505;
const HTTP_VARIANT_ALSO_NEGOTIATES = 506; // RFC2295
const HTTP_INSUFFICIENT_STORAGE = 507; // RFC4918
const HTTP_LOOP_DETECTED = 508; // RFC5842
const HTTP_NOT_EXTENDED = 510; // RFC2774
const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; // RFC6585
}
32 changes: 11 additions & 21 deletions tests/HttpstatusTest.php
Expand Up @@ -132,17 +132,6 @@ public function testGetStatusTextCustom()
$this->assertSame($custom[404], $Httpstatus->getReasonPhrase(404), 'Expected $Httpstatus->getReasonPhrase("404") to return '.$custom[404]);
}

public function testConstants()
{
$prefix = 'Lukasoppermann\Httpstatus\Httpstatus::HTTP_';
foreach ($this->statuses as $code => $text) {
$this->assertSame(
$code,
constant($prefix.strtoupper(str_replace([' ', '-', 'HTTP_'], ['_', '_', ''], $text)))
);
}
}

/**
* @expectedException InvalidArgumentException
* @expectedExceptionMessage The reason phrase can not contain carriage return characters
Expand Down Expand Up @@ -271,17 +260,18 @@ public function testGetResponseClass($expectedClass, $statusCode)
*/
public function responseClasses()
{
$Httpstatuscodes = $this->getMock('Lukasoppermann\Httpstatus\Httpstatuscodes');
return [
[Httpstatus::CLASS_INFORMATIONAL, Httpstatus::HTTP_CONTINUE],
[Httpstatus::CLASS_INFORMATIONAL, Httpstatus::HTTP_SWITCHING_PROTOCOLS],
[Httpstatus::CLASS_SUCCESS, Httpstatus::HTTP_OK],
[Httpstatus::CLASS_SUCCESS, Httpstatus::HTTP_PARTIAL_CONTENT],
[Httpstatus::CLASS_REDIRECTION, Httpstatus::HTTP_MULTIPLE_CHOICES],
[Httpstatus::CLASS_REDIRECTION, Httpstatus::HTTP_MOVED_PERMANENTLY],
[Httpstatus::CLASS_CLIENT_ERROR, Httpstatus::HTTP_BAD_REQUEST],
[Httpstatus::CLASS_CLIENT_ERROR, Httpstatus::HTTP_NOT_FOUND],
[Httpstatus::CLASS_SERVER_ERROR, Httpstatus::HTTP_INTERNAL_SERVER_ERROR],
[Httpstatus::CLASS_SERVER_ERROR, Httpstatus::HTTP_GATEWAY_TIMEOUT],
[Httpstatus::CLASS_INFORMATIONAL, $Httpstatuscodes::HTTP_CONTINUE],
[Httpstatus::CLASS_INFORMATIONAL, $Httpstatuscodes::HTTP_SWITCHING_PROTOCOLS],
[Httpstatus::CLASS_SUCCESS, $Httpstatuscodes::HTTP_OK],
[Httpstatus::CLASS_SUCCESS, $Httpstatuscodes::HTTP_PARTIAL_CONTENT],
[Httpstatus::CLASS_REDIRECTION, $Httpstatuscodes::HTTP_MULTIPLE_CHOICES],
[Httpstatus::CLASS_REDIRECTION, $Httpstatuscodes::HTTP_MOVED_PERMANENTLY],
[Httpstatus::CLASS_CLIENT_ERROR, $Httpstatuscodes::HTTP_BAD_REQUEST],
[Httpstatus::CLASS_CLIENT_ERROR, $Httpstatuscodes::HTTP_NOT_FOUND],
[Httpstatus::CLASS_SERVER_ERROR, $Httpstatuscodes::HTTP_INTERNAL_SERVER_ERROR],
[Httpstatus::CLASS_SERVER_ERROR, $Httpstatuscodes::HTTP_GATEWAY_TIMEOUT],
];
}

Expand Down
44 changes: 44 additions & 0 deletions tests/HttpstatuscodesTest.php
@@ -0,0 +1,44 @@
<?php

namespace Lukasoppermann\Httpstatus\tests;

use League\Csv\Reader;
use PHPUnit_Framework_TestCase;

/**
* @group formatter
*/
class HttpstatuscodesTest extends PHPUnit_Framework_TestCase
{
protected $statuses;

public function setUp()
{
// This file is from https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv
// It is a csv of all http codes & texts used for testing here
$csv = Reader::createFromPath(__DIR__.'/data/http-status-codes-1.csv');
$statuses = $csv->setOffset(1)->addFilter(function ($row) {
if (!isset($row[1])) {
return false;
}
$desc = trim($row[1]);
return !(empty($desc) || in_array($desc, ['Unassigned', '(Unused)']));
})->fetchAssoc(['Value', 'Description']);

// preapre statuses
foreach ($statuses as $key => $code) {
$this->statuses[$code['Value']] = $code['Description'];
}
}

public function testConstants()
{
$prefix = 'Lukasoppermann\Httpstatus\Httpstatuscodes::HTTP_';
foreach ($this->statuses as $code => $text) {
$this->assertSame(
$code,
constant($prefix.strtoupper(str_replace([' ', '-', 'HTTP_'], ['_', '_', ''], $text)))
);
}
}
}

0 comments on commit 3ce63cf

Please sign in to comment.