Use "target" instead "title" as the param name in SpecialPageData
[lhc/web/wiklou.git] / tests / phpunit / includes / specials / SpecialPageDataTest.php
1 <?php
2
3 /**
4 * @covers SpecialPageData
5 *
6 * @group Database
7 *
8 * @group SpecialPage
9 *
10 * @license GPL-2.0+
11 * @author Daniel Kinzler
12 */
13 class SpecialPageDataTest extends SpecialPageTestBase {
14
15 protected function newSpecialPage() {
16 $page = new SpecialPageData();
17
18 // why is this needed?
19 $page->getContext()->setOutput( new OutputPage( $page->getContext() ) );
20
21 $page->setRequestHandler( new PageDataRequestHandler() );
22
23 return $page;
24 }
25
26 public function provideExecute() {
27 $cases = [];
28
29 $cases['Empty request'] = [ '', [], [], '!!', 200 ];
30
31 $cases['Only title specified'] = [
32 '',
33 [ 'target' => 'Helsinki' ],
34 [],
35 '!!',
36 303,
37 [ 'Location' => '!.+!' ]
38 ];
39
40 $subpageCases = [];
41 foreach ( $cases as $c ) {
42 $case = $c;
43 $case[0] = '';
44
45 if ( isset( $case[1]['title'] ) ) {
46 $case[0] .= $case[1]['title'];
47 unset( $case[1]['title'] );
48 }
49
50 $subpageCases[] = $case;
51 }
52
53 $cases = array_merge( $cases, $subpageCases );
54
55 $cases['Accept only HTML'] = [
56 '',
57 [ 'target' => 'Helsinki' ],
58 [ 'Accept' => 'text/HTML' ],
59 '!!',
60 303,
61 [ 'Location' => '!Helsinki$!' ]
62 ];
63
64 $cases['Accept only HTML with revid'] = [
65 '',
66 [
67 'target' => 'Helsinki',
68 'revision' => '4242',
69 ],
70 [ 'Accept' => 'text/HTML' ],
71 '!!',
72 303,
73 [ 'Location' => '!Helsinki(\?|&)oldid=4242!' ]
74 ];
75
76 $cases['Nothing specified'] = [
77 'Helsinki',
78 [],
79 [],
80 '!!',
81 303,
82 [ 'Location' => '!Helsinki&action=raw!' ]
83 ];
84
85 $cases['Invalid Accept header'] = [
86 'Helsinki',
87 [],
88 [ 'Accept' => 'text/foobar' ],
89 '!!',
90 406,
91 [],
92 ];
93
94 return $cases;
95 }
96
97 /**
98 * @dataProvider provideExecute
99 *
100 * @param string $subpage The subpage to request (or '')
101 * @param array $params Request parameters
102 * @param array $headers Request headers
103 * @param string $expRegExp Regex to match the output against.
104 * @param int $expCode Expected HTTP status code
105 * @param array $expHeaders Expected HTTP response headers
106 */
107 public function testExecute(
108 $subpage,
109 array $params,
110 array $headers,
111 $expRegExp,
112 $expCode = 200,
113 array $expHeaders = []
114 ) {
115 $request = new FauxRequest( $params );
116 $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
117
118 foreach ( $headers as $name => $value ) {
119 $request->setHeader( strtoupper( $name ), $value );
120 }
121
122 try {
123 /* @var FauxResponse $response */
124 list( $output, $response ) = $this->executeSpecialPage( $subpage, $request );
125
126 $this->assertEquals( $expCode, $response->getStatusCode(), "status code" );
127 $this->assertRegExp( $expRegExp, $output, "output" );
128
129 foreach ( $expHeaders as $name => $exp ) {
130 $value = $response->getHeader( $name );
131 $this->assertNotNull( $value, "header: $name" );
132 $this->assertInternalType( 'string', $value, "header: $name" );
133 $this->assertRegExp( $exp, $value, "header: $name" );
134 }
135 } catch ( HttpError $e ) {
136 $this->assertEquals( $expCode, $e->getStatusCode(), "status code" );
137 $this->assertRegExp( $expRegExp, $e->getHTML(), "error output" );
138 }
139 }
140
141 public function testSpecialPageWithoutParameters() {
142 $this->setContentLang( Language::factory( 'en' ) );
143 $request = new FauxRequest();
144 $request->response()->header( 'Status: 200 OK', true, 200 ); // init/reset
145
146 list( $output, ) = $this->executeSpecialPage( '', $request );
147
148 $this->assertContains(
149 "Content negotiation applies based on you client's Accept header.",
150 $output,
151 "output"
152 );
153 }
154
155 }