Merge "Revert "selenium: add new message banner test to user spec""
[lhc/web/wiklou.git] / tests / phpunit / includes / api / format / ApiFormatRawTest.php
1 <?php
2
3 /**
4 * @group API
5 * @covers ApiFormatRaw
6 */
7 class ApiFormatRawTest extends ApiFormatTestBase {
8
9 protected $printerName = 'raw';
10
11 /**
12 * Test basic encoding and missing mime and text exceptions
13 * @return array datasets
14 */
15 public static function provideGeneralEncoding() {
16 $options = [
17 'class' => ApiFormatRaw::class,
18 'factory' => function ( ApiMain $main ) {
19 return new ApiFormatRaw( $main, new ApiFormatJson( $main, 'json' ) );
20 }
21 ];
22
23 return [
24 [
25 [ 'mime' => 'text/plain', 'text' => 'foo' ],
26 'foo',
27 [],
28 $options
29 ],
30 [
31 [ 'mime' => 'text/plain', 'text' => 'fóo' ],
32 'fóo',
33 [],
34 $options
35 ],
36 [
37 [ 'text' => 'some text' ],
38 new MWException( 'No MIME type set for raw formatter' ),
39 [],
40 $options
41 ],
42 [
43 [ 'mime' => 'text/plain' ],
44 new MWException( 'No text given for raw formatter' ),
45 [],
46 $options
47 ],
48 'test error fallback' => [
49 [ 'mime' => 'text/plain', 'text' => 'some text', 'error' => 'some error' ],
50 '{"mime":"text/plain","text":"some text","error":"some error"}',
51 [],
52 $options
53 ]
54 ];
55 }
56
57 /**
58 * Test specifying filename
59 */
60 public function testFilename() {
61 $printer = new ApiFormatRaw( new ApiMain );
62 $printer->getResult()->addValue( null, 'filename', 'whatever.raw' );
63 $this->assertSame( 'whatever.raw', $printer->getFilename() );
64 }
65
66 /**
67 * Test specifying filename with error fallback printer
68 */
69 public function testErrorFallbackFilename() {
70 $apiMain = new ApiMain;
71 $printer = new ApiFormatRaw( $apiMain, new ApiFormatJson( $apiMain, 'json' ) );
72 $printer->getResult()->addValue( null, 'error', 'some error' );
73 $printer->getResult()->addValue( null, 'filename', 'whatever.raw' );
74 $this->assertSame( 'api-result.json', $printer->getFilename() );
75 }
76
77 /**
78 * Test specifying mime
79 */
80 public function testMime() {
81 $printer = new ApiFormatRaw( new ApiMain );
82 $printer->getResult()->addValue( null, 'mime', 'text/plain' );
83 $this->assertSame( 'text/plain', $printer->getMimeType() );
84 }
85
86 /**
87 * Test specifying mime with error fallback printer
88 */
89 public function testErrorFallbackMime() {
90 $apiMain = new ApiMain;
91 $printer = new ApiFormatRaw( $apiMain, new ApiFormatJson( $apiMain, 'json' ) );
92 $printer->getResult()->addValue( null, 'error', 'some error' );
93 $printer->getResult()->addValue( null, 'mime', 'text/plain' );
94 $this->assertSame( 'application/json', $printer->getMimeType() );
95 }
96
97 /**
98 * Check that setting failWithHTTPError to true will result in 400 response status code
99 */
100 public function testFailWithHTTPError() {
101 $apiMain = null;
102
103 $this->testGeneralEncoding(
104 [ 'mime' => 'text/plain', 'text' => 'some text', 'error' => 'some error' ],
105 '{"mime":"text/plain","text":"some text","error":"some error"}',
106 [],
107 [
108 'class' => ApiFormatRaw::class,
109 'factory' => function ( ApiMain $main ) use ( &$apiMain ) {
110 $apiMain = $main;
111 $printer = new ApiFormatRaw( $main, new ApiFormatJson( $main, 'json' ) );
112 $printer->setFailWithHTTPError( true );
113 return $printer;
114 }
115 ]
116 );
117 $this->assertEquals( 400, $apiMain->getRequest()->response()->getStatusCode() );
118 }
119
120 }