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