Merge "Use successbox/errorbox instead of bolded text on revision delete form"
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiErrorFormatterTest.php
1 <?php
2
3 /**
4 * @group API
5 */
6 class ApiErrorFormatterTest extends MediaWikiTestCase {
7
8 /**
9 * @covers ApiErrorFormatter
10 * @dataProvider provideErrorFormatter
11 */
12 public function testErrorFormatter( $format, $lang, $useDB,
13 $expect1, $expect2, $expect3
14 ) {
15 $result = new ApiResult( 8388608 );
16 $formatter = new ApiErrorFormatter( $result, Language::factory( $lang ), $format, $useDB );
17
18 // Add default type
19 $expect1[ApiResult::META_TYPE] = 'assoc';
20 $expect2[ApiResult::META_TYPE] = 'assoc';
21 $expect3[ApiResult::META_TYPE] = 'assoc';
22
23 $formatter->addWarning( 'string', 'mainpage' );
24 $formatter->addError( 'err', 'mainpage' );
25 $this->assertSame( $expect1, $result->getResultData(), 'Simple test' );
26
27 $result->reset();
28 $formatter->addWarning( 'foo', 'mainpage' );
29 $formatter->addWarning( 'foo', 'mainpage' );
30 $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
31 $msg1 = wfMessage( 'mainpage' );
32 $formatter->addWarning( 'message', $msg1 );
33 $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
34 $formatter->addWarning( 'messageWithData', $msg2 );
35 $formatter->addError( 'errWithData', $msg2 );
36 $this->assertSame( $expect2, $result->getResultData(), 'Complex test' );
37
38 $result->reset();
39 $status = Status::newGood();
40 $status->warning( 'mainpage' );
41 $status->warning( 'parentheses', 'foobar' );
42 $status->warning( $msg1 );
43 $status->warning( $msg2 );
44 $status->error( 'mainpage' );
45 $status->error( 'parentheses', 'foobar' );
46 $formatter->addMessagesFromStatus( 'status', $status );
47 $this->assertSame( $expect3, $result->getResultData(), 'Status test' );
48
49 $this->assertSame(
50 $expect3['errors']['status'],
51 $formatter->arrayFromStatus( $status, 'error' ),
52 'arrayFromStatus test for error'
53 );
54 $this->assertSame(
55 $expect3['warnings']['status'],
56 $formatter->arrayFromStatus( $status, 'warning' ),
57 'arrayFromStatus test for warning'
58 );
59 }
60
61 public static function provideErrorFormatter() {
62 $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain();
63 $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain();
64 $mainpageText = wfMessage( 'mainpage' )->inLanguage( 'de' )->text();
65 $parensText = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'de' )->text();
66 $C = ApiResult::META_CONTENT;
67 $I = ApiResult::META_INDEXED_TAG_NAME;
68
69 return array(
70 array( 'wikitext', 'de', true,
71 array(
72 'errors' => array(
73 'err' => array(
74 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
75 $I => 'error',
76 ),
77 ),
78 'warnings' => array(
79 'string' => array(
80 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
81 $I => 'warning',
82 ),
83 ),
84 ),
85 array(
86 'errors' => array(
87 'errWithData' => array(
88 array( 'code' => 'overriddenCode', 'text' => $mainpageText,
89 'overriddenData' => true, $C => 'text' ),
90 $I => 'error',
91 ),
92 ),
93 'warnings' => array(
94 'messageWithData' => array(
95 array( 'code' => 'overriddenCode', 'text' => $mainpageText,
96 'overriddenData' => true, $C => 'text' ),
97 $I => 'warning',
98 ),
99 'message' => array(
100 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
101 $I => 'warning',
102 ),
103 'foo' => array(
104 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
105 array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
106 $I => 'warning',
107 ),
108 ),
109 ),
110 array(
111 'errors' => array(
112 'status' => array(
113 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
114 array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
115 $I => 'error',
116 ),
117 ),
118 'warnings' => array(
119 'status' => array(
120 array( 'code' => 'mainpage', 'text' => $mainpageText, $C => 'text' ),
121 array( 'code' => 'parentheses', 'text' => $parensText, $C => 'text' ),
122 array( 'code' => 'overriddenCode', 'text' => $mainpageText,
123 'overriddenData' => true, $C => 'text' ),
124 $I => 'warning',
125 ),
126 ),
127 ),
128 ),
129 array( 'raw', 'fr', true,
130 array(
131 'errors' => array(
132 'err' => array(
133 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
134 $I => 'error',
135 ),
136 ),
137 'warnings' => array(
138 'string' => array(
139 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
140 $I => 'warning',
141 ),
142 ),
143 ),
144 array(
145 'errors' => array(
146 'errWithData' => array(
147 array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
148 'overriddenData' => true ),
149 $I => 'error',
150 ),
151 ),
152 'warnings' => array(
153 'messageWithData' => array(
154 array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
155 'overriddenData' => true ),
156 $I => 'warning',
157 ),
158 'message' => array(
159 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
160 $I => 'warning',
161 ),
162 'foo' => array(
163 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
164 array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
165 $I => 'warning',
166 ),
167 ),
168 ),
169 array(
170 'errors' => array(
171 'status' => array(
172 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
173 array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
174 $I => 'error',
175 ),
176 ),
177 'warnings' => array(
178 'status' => array(
179 array( 'code' => 'mainpage', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
180 array( 'code' => 'parentheses', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
181 array( 'code' => 'overriddenCode', 'message' => 'mainpage', 'params' => array( $I => 'param' ),
182 'overriddenData' => true ),
183 $I => 'warning',
184 ),
185 ),
186 ),
187 ),
188 array( 'none', 'fr', true,
189 array(
190 'errors' => array(
191 'err' => array(
192 array( 'code' => 'mainpage' ),
193 $I => 'error',
194 ),
195 ),
196 'warnings' => array(
197 'string' => array(
198 array( 'code' => 'mainpage' ),
199 $I => 'warning',
200 ),
201 ),
202 ),
203 array(
204 'errors' => array(
205 'errWithData' => array(
206 array( 'code' => 'overriddenCode', 'overriddenData' => true ),
207 $I => 'error',
208 ),
209 ),
210 'warnings' => array(
211 'messageWithData' => array(
212 array( 'code' => 'overriddenCode', 'overriddenData' => true ),
213 $I => 'warning',
214 ),
215 'message' => array(
216 array( 'code' => 'mainpage' ),
217 $I => 'warning',
218 ),
219 'foo' => array(
220 array( 'code' => 'mainpage' ),
221 array( 'code' => 'parentheses' ),
222 $I => 'warning',
223 ),
224 ),
225 ),
226 array(
227 'errors' => array(
228 'status' => array(
229 array( 'code' => 'mainpage' ),
230 array( 'code' => 'parentheses' ),
231 $I => 'error',
232 ),
233 ),
234 'warnings' => array(
235 'status' => array(
236 array( 'code' => 'mainpage' ),
237 array( 'code' => 'parentheses' ),
238 array( 'code' => 'overriddenCode', 'overriddenData' => true ),
239 $I => 'warning',
240 ),
241 ),
242 ),
243 ),
244 );
245 }
246
247 /**
248 * @covers ApiErrorFormatter_BackCompat
249 */
250 public function testErrorFormatterBC() {
251 $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain();
252 $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain();
253
254 $result = new ApiResult( 8388608 );
255 $formatter = new ApiErrorFormatter_BackCompat( $result );
256
257 $formatter->addWarning( 'string', 'mainpage' );
258 $formatter->addError( 'err', 'mainpage' );
259 $this->assertSame( array(
260 'error' => array(
261 'code' => 'mainpage',
262 'info' => $mainpagePlain,
263 ),
264 'warnings' => array(
265 'string' => array(
266 'warnings' => $mainpagePlain,
267 ApiResult::META_CONTENT => 'warnings',
268 ),
269 ),
270 ApiResult::META_TYPE => 'assoc',
271 ), $result->getResultData(), 'Simple test' );
272
273 $result->reset();
274 $formatter->addWarning( 'foo', 'mainpage' );
275 $formatter->addWarning( 'foo', 'mainpage' );
276 $formatter->addWarning( 'foo', array( 'parentheses', 'foobar' ) );
277 $msg1 = wfMessage( 'mainpage' );
278 $formatter->addWarning( 'message', $msg1 );
279 $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', array( 'overriddenData' => true ) );
280 $formatter->addWarning( 'messageWithData', $msg2 );
281 $formatter->addError( 'errWithData', $msg2 );
282 $this->assertSame( array(
283 'error' => array(
284 'code' => 'overriddenCode',
285 'info' => $mainpagePlain,
286 'overriddenData' => true,
287 ),
288 'warnings' => array(
289 'messageWithData' => array(
290 'warnings' => $mainpagePlain,
291 ApiResult::META_CONTENT => 'warnings',
292 ),
293 'message' => array(
294 'warnings' => $mainpagePlain,
295 ApiResult::META_CONTENT => 'warnings',
296 ),
297 'foo' => array(
298 'warnings' => "$mainpagePlain\n$parensPlain",
299 ApiResult::META_CONTENT => 'warnings',
300 ),
301 ),
302 ApiResult::META_TYPE => 'assoc',
303 ), $result->getResultData(), 'Complex test' );
304
305 $result->reset();
306 $status = Status::newGood();
307 $status->warning( 'mainpage' );
308 $status->warning( 'parentheses', 'foobar' );
309 $status->warning( $msg1 );
310 $status->warning( $msg2 );
311 $status->error( 'mainpage' );
312 $status->error( 'parentheses', 'foobar' );
313 $formatter->addMessagesFromStatus( 'status', $status );
314 $this->assertSame( array(
315 'error' => array(
316 'code' => 'parentheses',
317 'info' => $parensPlain,
318 ),
319 'warnings' => array(
320 'status' => array(
321 'warnings' => "$mainpagePlain\n$parensPlain",
322 ApiResult::META_CONTENT => 'warnings',
323 ),
324 ),
325 ApiResult::META_TYPE => 'assoc',
326 ), $result->getResultData(), 'Status test' );
327
328 $I = ApiResult::META_INDEXED_TAG_NAME;
329 $this->assertSame(
330 array(
331 array( 'type' => 'error', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
332 array( 'type' => 'error', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
333 $I => 'error',
334 ),
335 $formatter->arrayFromStatus( $status, 'error' ),
336 'arrayFromStatus test for error'
337 );
338 $this->assertSame(
339 array(
340 array( 'type' => 'warning', 'message' => 'mainpage', 'params' => array( $I => 'param' ) ),
341 array( 'type' => 'warning', 'message' => 'parentheses', 'params' => array( 'foobar', $I => 'param' ) ),
342 array( 'message' => 'mainpage', 'params' => array( $I => 'param' ), 'type' => 'warning' ),
343 array( 'message' => 'mainpage', 'params' => array( $I => 'param' ), 'type' => 'warning' ),
344 $I => 'warning',
345 ),
346 $formatter->arrayFromStatus( $status, 'warning' ),
347 'arrayFromStatus test for warning'
348 );
349 }
350
351 }