Add tests for ExtensionJsonValidator
[lhc/web/wiklou.git] / tests / phpunit / includes / FauxRequestTest.php
1 <?php
2
3 use MediaWiki\Session\SessionManager;
4
5 class FauxRequestTest extends PHPUnit_Framework_TestCase {
6
7 use MediaWikiCoversValidator;
8
9 /**
10 * @covers FauxRequest::__construct
11 */
12 public function testConstructInvalidData() {
13 $this->setExpectedException( MWException::class, 'bogus data' );
14 $req = new FauxRequest( 'x' );
15 }
16
17 /**
18 * @covers FauxRequest::__construct
19 */
20 public function testConstructInvalidSession() {
21 $this->setExpectedException( MWException::class, 'bogus session' );
22 $req = new FauxRequest( [], false, 'x' );
23 }
24
25 /**
26 * @covers FauxRequest::__construct
27 */
28 public function testConstructWithSession() {
29 $session = SessionManager::singleton()->getEmptySession( new FauxRequest( [] ) );
30 $this->assertInstanceOf(
31 FauxRequest::class,
32 new FauxRequest( [], false, $session )
33 );
34 }
35
36 /**
37 * @covers FauxRequest::getText
38 */
39 public function testGetText() {
40 $req = new FauxRequest( [ 'x' => 'Value' ] );
41 $this->assertEquals( 'Value', $req->getText( 'x' ) );
42 $this->assertEquals( '', $req->getText( 'z' ) );
43 }
44
45 /**
46 * Integration test for parent method
47 * @covers FauxRequest::getVal
48 */
49 public function testGetVal() {
50 $req = new FauxRequest( [ 'crlf' => "A\r\nb" ] );
51 $this->assertSame( "A\r\nb", $req->getVal( 'crlf' ), 'CRLF' );
52 }
53
54 /**
55 * Integration test for parent method
56 * @covers FauxRequest::getRawVal
57 */
58 public function testGetRawVal() {
59 $req = new FauxRequest( [
60 'x' => 'Value',
61 'y' => [ 'a' ],
62 'crlf' => "A\r\nb"
63 ] );
64 $this->assertSame( 'Value', $req->getRawVal( 'x' ) );
65 $this->assertSame( null, $req->getRawVal( 'z' ), 'Not found' );
66 $this->assertSame( null, $req->getRawVal( 'y' ), 'Array is ignored' );
67 $this->assertSame( "A\r\nb", $req->getRawVal( 'crlf' ), 'CRLF' );
68 }
69
70 /**
71 * @covers FauxRequest::getValues
72 */
73 public function testGetValues() {
74 $values = [ 'x' => 'Value', 'y' => '' ];
75 $req = new FauxRequest( $values );
76 $this->assertEquals( $values, $req->getValues() );
77 }
78
79 /**
80 * @covers FauxRequest::getQueryValues
81 */
82 public function testGetQueryValues() {
83 $values = [ 'x' => 'Value', 'y' => '' ];
84
85 $req = new FauxRequest( $values );
86 $this->assertEquals( $values, $req->getQueryValues() );
87 $req = new FauxRequest( $values, /*wasPosted*/ true );
88 $this->assertEquals( [], $req->getQueryValues() );
89 }
90
91 /**
92 * @covers FauxRequest::getMethod
93 */
94 public function testGetMethod() {
95 $req = new FauxRequest( [] );
96 $this->assertEquals( 'GET', $req->getMethod() );
97 $req = new FauxRequest( [], /*wasPosted*/ true );
98 $this->assertEquals( 'POST', $req->getMethod() );
99 }
100
101 /**
102 * @covers FauxRequest::wasPosted
103 */
104 public function testWasPosted() {
105 $req = new FauxRequest( [] );
106 $this->assertFalse( $req->wasPosted() );
107 $req = new FauxRequest( [], /*wasPosted*/ true );
108 $this->assertTrue( $req->wasPosted() );
109 }
110
111 /**
112 * @covers FauxRequest::getCookie
113 * @covers FauxRequest::setCookie
114 * @covers FauxRequest::setCookies
115 */
116 public function testCookies() {
117 $req = new FauxRequest();
118 $this->assertSame( null, $req->getCookie( 'z', '' ) );
119
120 $req->setCookie( 'x', 'Value', '' );
121 $this->assertEquals( 'Value', $req->getCookie( 'x', '' ) );
122
123 $req->setCookies( [ 'x' => 'One', 'y' => 'Two' ], '' );
124 $this->assertEquals( 'One', $req->getCookie( 'x', '' ) );
125 $this->assertEquals( 'Two', $req->getCookie( 'y', '' ) );
126 }
127
128 /**
129 * @covers FauxRequest::getCookie
130 * @covers FauxRequest::setCookie
131 * @covers FauxRequest::setCookies
132 */
133 public function testCookiesDefaultPrefix() {
134 global $wgCookiePrefix;
135 $oldPrefix = $wgCookiePrefix;
136 $wgCookiePrefix = '_';
137
138 $req = new FauxRequest();
139 $this->assertSame( null, $req->getCookie( 'z' ) );
140
141 $req->setCookie( 'x', 'Value' );
142 $this->assertEquals( 'Value', $req->getCookie( 'x' ) );
143
144 $wgCookiePrefix = $oldPrefix;
145 }
146
147 /**
148 * @covers FauxRequest::getRequestURL
149 */
150 public function testGetRequestURL() {
151 $req = new FauxRequest();
152 $this->setExpectedException( MWException::class );
153 $req->getRequestURL();
154 }
155
156 /**
157 * @covers FauxRequest::setRequestURL
158 * @covers FauxRequest::getRequestURL
159 */
160 public function testSetRequestURL() {
161 $req = new FauxRequest();
162 $req->setRequestURL( 'https://example.org' );
163 $this->assertEquals( 'https://example.org', $req->getRequestURL() );
164 }
165
166 /**
167 * @covers FauxRequest::__construct
168 * @covers FauxRequest::getProtocol
169 */
170 public function testProtocol() {
171 $req = new FauxRequest();
172 $this->assertEquals( 'http', $req->getProtocol() );
173 $req = new FauxRequest( [], false, null, 'http' );
174 $this->assertEquals( 'http', $req->getProtocol() );
175 $req = new FauxRequest( [], false, null, 'https' );
176 $this->assertEquals( 'https', $req->getProtocol() );
177 }
178
179 /**
180 * @covers FauxRequest::setHeader
181 * @covers FauxRequest::setHeaders
182 * @covers FauxRequest::getHeader
183 */
184 public function testGetSetHeader() {
185 $value = 'text/plain, text/html';
186
187 $request = new FauxRequest();
188 $request->setHeader( 'Accept', $value );
189
190 $this->assertEquals( $request->getHeader( 'Nonexistent' ), false );
191 $this->assertEquals( $request->getHeader( 'Accept' ), $value );
192 $this->assertEquals( $request->getHeader( 'ACCEPT' ), $value );
193 $this->assertEquals( $request->getHeader( 'accept' ), $value );
194 $this->assertEquals(
195 $request->getHeader( 'Accept', WebRequest::GETHEADER_LIST ),
196 [ 'text/plain', 'text/html' ]
197 );
198 }
199
200 /**
201 * @covers FauxRequest::initHeaders
202 */
203 public function testGetAllHeaders() {
204 $_SERVER['HTTP_TEST'] = 'Example';
205
206 $request = new FauxRequest();
207
208 $this->assertEquals(
209 [],
210 $request->getAllHeaders()
211 );
212
213 $this->assertEquals(
214 false,
215 $request->getHeader( 'test' )
216 );
217 }
218
219 /**
220 * @covers FauxRequest::__construct
221 * @covers FauxRequest::getSessionArray
222 */
223 public function testSessionData() {
224 $values = [ 'x' => 'Value', 'y' => '' ];
225
226 $req = new FauxRequest( [], false, /*session*/ $values );
227 $this->assertEquals( $values, $req->getSessionArray() );
228
229 $req = new FauxRequest();
230 $this->assertSame( null, $req->getSessionArray() );
231 }
232
233 /**
234 * @covers FauxRequest::getRawQueryString
235 * @covers FauxRequest::getRawPostString
236 * @covers FauxRequest::getRawInput
237 */
238 public function testDummies() {
239 $req = new FauxRequest();
240 $this->assertEquals( '', $req->getRawQueryString() );
241 $this->assertEquals( '', $req->getRawPostString() );
242 $this->assertEquals( '', $req->getRawInput() );
243 }
244 }