Skip to content

Commit 884e49a

Browse files
author
Greg Bowler
committed
Test ServerInfo class
1 parent b40dc6a commit 884e49a

File tree

2 files changed

+161
-1
lines changed

2 files changed

+161
-1
lines changed

src/ServerInfo.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public function getQueryParams():array {
9090
}
9191

9292
public function withQueryParams(array $query):self {
93-
$queryString = http_build_cookie($query);
93+
$queryString = http_build_query($query);
9494
return $this->withQueryString($queryString);
9595
}
9696

test/unit/ServerInfoTest.php

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
<?php
2+
namespace Gt\Http\Test;
3+
4+
use Gt\Http\ServerInfo;
5+
use PHPUnit\Framework\TestCase;
6+
7+
class ServerInfoTest extends TestCase {
8+
public function testGetHttpHeadersArrayEmpty() {
9+
$sut = new ServerInfo(self::getServerArray());
10+
self::assertEmpty($sut->getHttpHeadersArray());
11+
}
12+
13+
public function testGetHttpHeadersArray() {
14+
$httpHeaders = [
15+
"HTTP_ACCEPT" => "test/php",
16+
"HTTP_HOST" => "localhost",
17+
"HTTP_USER_AGENT" => "PHPUnit",
18+
];
19+
$server = array_merge(
20+
self::getServerArray(),
21+
$httpHeaders
22+
);
23+
$sut = new ServerInfo($server);
24+
$httpHeadersArray = $sut->getHttpHeadersArray();
25+
self::assertCount(
26+
count($httpHeaders),
27+
$httpHeadersArray
28+
);
29+
30+
foreach($httpHeaders as $key => $value) {
31+
$httplessKey = substr($key, strlen("HTTP_"));
32+
self::assertArrayHasKey($httplessKey, $httpHeadersArray);
33+
self::assertEquals($value, $httpHeadersArray[$httplessKey]);
34+
}
35+
}
36+
37+
public function testGetServerProtocol() {
38+
$sut = new ServerInfo(self::getServerArray());
39+
self::assertEquals("TEST/123", $sut->getServerProtocol());
40+
}
41+
42+
public function testGetServerProtocolVersion() {
43+
$sut = new ServerInfo(self::getServerArray());
44+
self::assertEquals(123, $sut->getServerProtocolVersion());
45+
}
46+
47+
public function testGetRequestMethod() {
48+
$sut = new ServerInfo(self::getServerArray());
49+
self::assertEquals("TEST", $sut->getRequestMethod());
50+
}
51+
52+
public function testGetRequestTime() {
53+
$sut = new ServerInfo(self::getServerArray());
54+
self::assertEquals((int)microtime(true), (int)$sut->getRequestTime());
55+
}
56+
57+
public function testGetQueryString() {
58+
$sut = new ServerInfo(self::getServerArray());
59+
self::assertEquals("key1=value1&key2=value2", $sut->getQueryString());
60+
}
61+
62+
public function testWithQueryString() {
63+
$server = new ServerInfo(self::getServerArray());
64+
$sut = $server->withQueryString("key3=value3");
65+
self::assertEquals("key1=value1&key2=value2", $server->getQueryString());
66+
self::assertEquals("key3=value3", $sut->getQueryString());
67+
}
68+
69+
public function testGetQueryParams() {
70+
$sut = new ServerInfo(self::getServerArray());
71+
$expected = [
72+
"key1" => "value1",
73+
"key2" => "value2",
74+
];
75+
self::assertEquals($expected, $sut->getQueryParams());
76+
}
77+
78+
public function testWithQueryParams() {
79+
$server = new ServerInfo(self::getServerArray());
80+
$origParams = $server->getQueryParams();
81+
$newParams = [
82+
"key3" => "value3",
83+
"key4" => "value4",
84+
];
85+
$sut = $server->withQueryParams($newParams);
86+
self::assertEquals($origParams, $server->getQueryParams());
87+
self::assertEquals($newParams, $sut->getQueryParams());
88+
}
89+
90+
public function testIsHttps() {
91+
$sut = new ServerInfo(self::getServerArray());
92+
self::assertFalse($sut->isHttps());
93+
$sut = new ServerInfo(["HTTPS" => true]);
94+
self::assertTrue($sut->isHttps());
95+
}
96+
97+
public function testGetDocumentRoot() {
98+
$sut = new ServerInfo(self::getServerArray());
99+
self::assertEquals(__DIR__, $sut->getDocumentRoot());
100+
}
101+
102+
public function testGetRemoteAddress() {
103+
$sut = new ServerInfo(self::getServerArray());
104+
self::assertEquals("127.0.0.1", $sut->getRemoteAddress());
105+
}
106+
107+
public function testGetScriptFilename() {
108+
$sut = new ServerInfo(self::getServerArray());
109+
self::assertEquals(__FILE__, $sut->getScriptFilename());
110+
}
111+
112+
public function testGetScriptName() {
113+
$sut = new ServerInfo(self::getServerArray());
114+
self::assertEquals(__FILE__, $sut->getScriptName());
115+
}
116+
117+
public function testGetRequestUri() {
118+
$sut = new ServerInfo(self::getServerArray());
119+
self::assertEquals("/example?key1=value1&key2=value2", $sut->getRequestUri());
120+
}
121+
122+
public function testNullFields() {
123+
$sut = new ServerInfo([]);
124+
self::assertNull($sut->getPhpSelf());
125+
self::assertNull($sut->getGatewayInterface());
126+
self::assertNull($sut->getServerAddress());
127+
self::assertNull($sut->getServerName());
128+
self::assertNull($sut->getServerSoftware());
129+
self::assertNull($sut->getRemoteHost());
130+
self::assertNull($sut->getRemotePort());
131+
self::assertNull($sut->getRemoteUser());
132+
self::assertNull($sut->getRedirectRemoteUser());
133+
self::assertNull($sut->getServerAdmin());
134+
self::assertNull($sut->getServerPort());
135+
self::assertNull($sut->getServerSignature());
136+
self::assertNull($sut->getAuthDigest());
137+
self::assertNull($sut->getAuthUser());
138+
self::assertNull($sut->getAuthPassword());
139+
self::assertNull($sut->getAuthType());
140+
self::assertNull($sut->getRequestScheme());
141+
self::assertEmpty($sut->getParams());
142+
}
143+
144+
protected function getServerArray():array {
145+
return [
146+
"PHP_SELF" => __FILE__,
147+
"SERVER_ADDR" => "127.0.0.1",
148+
"REMOTE_ADDR" => "127.0.0.1",
149+
"SERVER_SOFTWARE" => "PHP.Gt",
150+
"SERVER_PROTOCOL" => "TEST/123",
151+
"REQUEST_METHOD" => "TEST",
152+
"REQUEST_TIME_FLOAT" => microtime(true),
153+
"QUERY_STRING" => "key1=value1&key2=value2",
154+
"DOCUMENT_ROOT" => __DIR__,
155+
"SCRIPT_FILENAME" => __FILE__,
156+
"SCRIPT_NAME" => __FILE__,
157+
"REQUEST_URI" => "/example?key1=value1&key2=value2",
158+
];
159+
}
160+
}

0 commit comments

Comments
 (0)