follow-up r61355
[lhc/web/wiklou.git] / maintenance / tests / UploadFromChunksTest.php
1 <?php
2
3 require_once("ApiSetup.php");
4
5 class UploadFromChunksTest extends ApiSetup {
6
7 function setUp() {
8 global $wgEnableUploads;
9
10 $wgEnableUploads=true;
11 ini_set('file_loads', true);
12 parent::setup();
13
14 }
15
16 function makeChunk() {
17 $file = tempnam( wfTempDir(), "" );
18 $fh = fopen($file, "w");
19 if($fh == false) {
20 $this->markTestIncomplete("Couldn't open $file!\n");
21 return;
22 }
23 fwrite($fh, "123");
24 fclose($fh);
25
26 $_FILES['chunk']['tmp_name'] = $file;
27 $_FILES['chunk']['size'] = 3;
28 $_FILES['chunk']['error'] = null;
29 $_FILES['chunk']['name'] = "test.txt";
30 }
31
32 function cleanChunk() {
33 if(file_exists($_FILES['chunk']['tmp_name']))
34 unlink($_FILES['chunk']['tmp_name']);
35 }
36
37 function doApiRequest($params) {
38 $session = isset( $_SESSION ) ? $_SESSION : array();
39 $req = new FauxRequest($params, true, $session);
40 $module = new ApiMain($req, true);
41 $module->execute();
42
43 return $module->getResultData();
44 }
45
46 function testGetTitle() {
47 $filename = tempnam( wfTempDir(), "" );
48 $c = new UploadFromChunks();
49 $c->initialize(false, "temp.txt", null, $filename, 0, null);
50 $this->assertEquals(null, $c->getTitle());
51
52 $c = new UploadFromChunks();
53 $c->initialize(false, "temp.png", null, $filename, 0, null);
54 $this->assertEquals(Title::makeTitleSafe(NS_FILE, "Temp.png"), $c->getTitle());
55 }
56
57 function testLogin() {
58 $data = $this->doApiRequest(array('action' => 'login',
59 "lgname" => self::$userName,
60 "lgpassword" => self::$passWord ) );
61 $this->assertArrayHasKey("login", $data);
62 $this->assertArrayHasKey("result", $data['login']);
63 $this->assertEquals("Success", $data['login']['result']);
64
65 return $data;
66 }
67
68
69 /**
70 * @depends testLogin
71 */
72 function testGetEditToken($data) {
73 global $wgUser;
74 $wgUser = User::newFromName(self::$userName);
75 $wgUser->load();
76
77 $data = $this->doApiRequest(array('action' => 'query',
78 'prop' => 'info',
79 'intoken' => 'edit'));
80 }
81
82 function testSetupChunkSession() {
83 }
84
85
86 /**
87 * @expectedException UsageException
88 */
89 function testPerformUploadInitError() {
90 global $wgUser;
91 $wgUser = User::newFromId(1);
92
93 $req = new FauxRequest(
94 array('action' => 'upload',
95 'enablechunks' => '1',
96 'filename' => 'test.png',
97 ));
98 $module = new ApiMain($req, true);
99 $module->execute();
100 }
101
102 /**
103 * @depends testLogin
104 */
105 function testPerformUploadInitSuccess($login) {
106 global $wgUser;
107
108 $wgUser = User::newFromName(self::$userName);
109 $token = $wgUser->editToken();
110
111 $data = $this->doApiRequest(
112 array('action' => 'upload',
113 'enablechunks' => '1',
114 'filename' => 'test.png',
115 'token' => $token,
116 ));
117
118 $this->assertArrayHasKey("uploadUrl", $data);
119
120 return array('data' => $data, 'session' => $_SESSION, 'token' => $token);
121 }
122
123 /**
124 * @depends testPerformUploadInitSuccess
125 */
126 function testAppendChunk($combo) {
127 global $wgUser;
128 $data = $combo['data'];
129 $_SESSION = $combo['session'];
130 $wgUser = User::newFromName(self::$userName);
131 $token = $wgUser->editToken();
132
133 $url = $data['uploadUrl'];
134 $params = wfCgiToArray(substr($url, strpos($url, "?")));
135
136 for($i=0;$i<10;$i++) {
137 $this->makeChunk();
138 $data = $this->doApiRequest($params);
139 $this->cleanChunk();
140 }
141
142 return array('data' => $data, 'session' => $_SESSION, 'token' => $token, 'params' => $params);
143 }
144
145 /**
146 * @depends testAppendChunk
147 */
148 function testUploadChunkDone($combo) {
149 global $wgUser;
150 $data = $combo['data'];
151 $params = $combo['params'];
152 $_SESSION = $combo['session'];
153 $wgUser = User::newFromName(self::$userName);
154 $token = $wgUser->editToken();
155
156 $params['done'] = 1;
157
158 $this->makeChunk();
159 $data = $this->doApiRequest($params);
160 $this->cleanChunk();
161 }
162 }