Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: utils/tests/pub/pub_lish_test.dart

Issue 11557008: Make pub publish more user friendly: (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Merge in path changes. Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « utils/tests/pub/path/path_windows_test.dart ('k') | utils/tests/pub/test_pub.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library pub_lish_test; 5 library pub_lish_test;
6 6
7 import 'dart:io'; 7 import 'dart:io';
8 import 'dart:json'; 8 import 'dart:json';
9 9
10 import 'test_pub.dart'; 10 import 'test_pub.dart';
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 }); 46 });
47 } 47 }
48 48
49 main() { 49 main() {
50 setUp(() => normalPackage.scheduleCreate()); 50 setUp(() => normalPackage.scheduleCreate());
51 51
52 test('archives and uploads a package', () { 52 test('archives and uploads a package', () {
53 var server = new ScheduledServer(); 53 var server = new ScheduledServer();
54 credentialsFile(server, 'access token').scheduleCreate(); 54 credentialsFile(server, 'access token').scheduleCreate();
55 var pub = startPubLish(server); 55 var pub = startPubLish(server);
56
57 confirmPublish(pub);
56 handleUploadForm(server); 58 handleUploadForm(server);
57 handleUpload(server); 59 handleUpload(server);
58 60
59 server.handle('GET', '/create', (request, response) { 61 server.handle('GET', '/create', (request, response) {
60 response.outputStream.writeString(JSON.stringify({ 62 response.outputStream.writeString(JSON.stringify({
61 'success': {'message': 'Package test_pkg 1.0.0 uploaded!'} 63 'success': {'message': 'Package test_pkg 1.0.0 uploaded!'}
62 })); 64 }));
63 response.outputStream.close(); 65 response.outputStream.close();
64 }); 66 });
65 67
66 expectLater(pub.nextLine(), equals('Package test_pkg 1.0.0 uploaded!')); 68 // TODO(rnystrom): The confirm line is run together with this one because
69 // in normal usage, the user will have entered a newline on stdin which
70 // gets echoed to the terminal. Do something better here?
71 expectLater(pub.nextLine(), equals(
72 'Looks great! Are you ready to upload your package (y/n)?'
73 ' Package test_pkg 1.0.0 uploaded!'));
67 pub.shouldExit(0); 74 pub.shouldExit(0);
68 75
69 run(); 76 run();
70 }); 77 });
71 78
72 // TODO(nweiz): Once a multipart/form-data parser in Dart exists, we should 79 // TODO(nweiz): Once a multipart/form-data parser in Dart exists, we should
73 // test that "pub lish" chooses the correct files to publish. 80 // test that "pub lish" chooses the correct files to publish.
74 81
75 test('credentials are invalid', () { 82 test('credentials are invalid', () {
76 var server = new ScheduledServer(); 83 var server = new ScheduledServer();
77 credentialsFile(server, 'access token').scheduleCreate(); 84 credentialsFile(server, 'access token').scheduleCreate();
78 var pub = startPubLish(server); 85 var pub = startPubLish(server);
79 86
87 confirmPublish(pub);
88
80 server.handle('GET', '/packages/versions/new.json', (request, response) { 89 server.handle('GET', '/packages/versions/new.json', (request, response) {
81 response.statusCode = 401; 90 response.statusCode = 401;
82 response.headers.set('www-authenticate', 'Bearer error="invalid_token",' 91 response.headers.set('www-authenticate', 'Bearer error="invalid_token",'
83 ' error_description="your token sucks"'); 92 ' error_description="your token sucks"');
84 response.outputStream.writeString(JSON.stringify({ 93 response.outputStream.writeString(JSON.stringify({
85 'error': {'message': 'your token sucks'} 94 'error': {'message': 'your token sucks'}
86 })); 95 }));
87 response.outputStream.close(); 96 response.outputStream.close();
88 }); 97 });
89 98
90 expectLater(pub.nextErrLine(), equals('OAuth2 authorization failed (your ' 99 expectLater(pub.nextErrLine(), equals('OAuth2 authorization failed (your '
91 'token sucks).')); 100 'token sucks).'));
92 expectLater(pub.nextLine(), equals('Pub needs your authorization to upload ' 101 // TODO(rnystrom): The confirm line is run together with this one because
93 'packages on your behalf.')); 102 // in normal usage, the user will have entered a newline on stdin which
103 // gets echoed to the terminal. Do something better here?
104 expectLater(pub.nextLine(), equals(
105 'Looks great! Are you ready to upload your package (y/n)? '
106 'Pub needs your authorization to upload packages on your behalf.'));
94 pub.kill(); 107 pub.kill();
95
96 run(); 108 run();
97 }); 109 });
98 110
99 test('package validation has an error', () { 111 test('package validation has an error', () {
100 var package = package("test_pkg", "1.0.0"); 112 var package = package("test_pkg", "1.0.0");
101 package.remove("homepage"); 113 package.remove("homepage");
102 dir(appPath, [pubspec(package)]).scheduleCreate(); 114 dir(appPath, [pubspec(package)]).scheduleCreate();
103 115
104 var server = new ScheduledServer(); 116 var server = new ScheduledServer();
105 credentialsFile(server, 'access token').scheduleCreate();
106 var pub = startPubLish(server); 117 var pub = startPubLish(server);
107 server.ignore('GET', '/packages/versions/new.json');
108 118
109 pub.shouldExit(1); 119 pub.shouldExit(1);
110 expectLater(pub.remainingStderr(), contains("Package validation failed.")); 120 expectLater(pub.remainingStderr(),
121 contains("Sorry, your package is missing a requirement and can't be "
122 "published yet."));
111 123
112 run(); 124 run();
113 }); 125 });
114 126
115 test('package validation has a warning and is canceled', () { 127 test('package validation has a warning and is canceled', () {
116 var package = package("test_pkg", "1.0.0"); 128 var package = package("test_pkg", "1.0.0");
117 package["author"] = "Nathan Weizenbaum"; 129 package["author"] = "Nathan Weizenbaum";
118 dir(appPath, [pubspec(package)]).scheduleCreate(); 130 dir(appPath, [pubspec(package)]).scheduleCreate();
119 131
120 var server = new ScheduledServer(); 132 var server = new ScheduledServer();
121 credentialsFile(server, 'access token').scheduleCreate();
122 var pub = startPubLish(server); 133 var pub = startPubLish(server);
123 server.ignore('GET', '/packages/versions/new.json');
124 134
125 pub.writeLine("n"); 135 pub.writeLine("n");
126 pub.shouldExit(1); 136 pub.shouldExit(1);
127 expectLater(pub.remainingStderr(), contains("Package upload canceled.")); 137 expectLater(pub.remainingStderr(), contains("Package upload canceled."));
128 138
129 run(); 139 run();
130 }); 140 });
131 141
132 test('package validation has a warning and continues', () { 142 test('package validation has a warning and continues', () {
133 var package = package("test_pkg", "1.0.0"); 143 var package = package("test_pkg", "1.0.0");
(...skipping 19 matching lines...) Expand all
153 contains('Package test_pkg 1.0.0 uploaded!')); 163 contains('Package test_pkg 1.0.0 uploaded!'));
154 164
155 run(); 165 run();
156 }); 166 });
157 167
158 test('upload form provides an error', () { 168 test('upload form provides an error', () {
159 var server = new ScheduledServer(); 169 var server = new ScheduledServer();
160 credentialsFile(server, 'access token').scheduleCreate(); 170 credentialsFile(server, 'access token').scheduleCreate();
161 var pub = startPubLish(server); 171 var pub = startPubLish(server);
162 172
173 confirmPublish(pub);
174
163 server.handle('GET', '/packages/versions/new.json', (request, response) { 175 server.handle('GET', '/packages/versions/new.json', (request, response) {
164 response.statusCode = 400; 176 response.statusCode = 400;
165 response.outputStream.writeString(JSON.stringify({ 177 response.outputStream.writeString(JSON.stringify({
166 'error': {'message': 'your request sucked'} 178 'error': {'message': 'your request sucked'}
167 })); 179 }));
168 response.outputStream.close(); 180 response.outputStream.close();
169 }); 181 });
170 182
171 expectLater(pub.nextErrLine(), equals('your request sucked')); 183 expectLater(pub.nextErrLine(), equals('your request sucked'));
172 pub.shouldExit(1); 184 pub.shouldExit(1);
173 185
174 run(); 186 run();
175 }); 187 });
176 188
177 test('upload form provides invalid JSON', () { 189 test('upload form provides invalid JSON', () {
178 var server = new ScheduledServer(); 190 var server = new ScheduledServer();
179 credentialsFile(server, 'access token').scheduleCreate(); 191 credentialsFile(server, 'access token').scheduleCreate();
180 var pub = startPubLish(server); 192 var pub = startPubLish(server);
181 193
194 confirmPublish(pub);
195
182 server.handle('GET', '/packages/versions/new.json', (request, response) { 196 server.handle('GET', '/packages/versions/new.json', (request, response) {
183 response.outputStream.writeString('{not json'); 197 response.outputStream.writeString('{not json');
184 response.outputStream.close(); 198 response.outputStream.close();
185 }); 199 });
186 200
187 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 201 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
188 expectLater(pub.nextErrLine(), equals('{not json')); 202 expectLater(pub.nextErrLine(), equals('{not json'));
189 pub.shouldExit(1); 203 pub.shouldExit(1);
190 204
191 run(); 205 run();
192 }); 206 });
193 207
194 test('upload form is missing url', () { 208 test('upload form is missing url', () {
195 var server = new ScheduledServer(); 209 var server = new ScheduledServer();
196 credentialsFile(server, 'access token').scheduleCreate(); 210 credentialsFile(server, 'access token').scheduleCreate();
197 var pub = startPubLish(server); 211 var pub = startPubLish(server);
198 212
213 confirmPublish(pub);
214
199 var body = { 215 var body = {
200 'fields': { 216 'fields': {
201 'field1': 'value1', 217 'field1': 'value1',
202 'field2': 'value2' 218 'field2': 'value2'
203 } 219 }
204 }; 220 };
205 221
206 handleUploadForm(server, body); 222 handleUploadForm(server, body);
207 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 223 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
208 expectLater(pub.nextErrLine(), equals(JSON.stringify(body))); 224 expectLater(pub.nextErrLine(), equals(JSON.stringify(body)));
209 pub.shouldExit(1); 225 pub.shouldExit(1);
210 226
211 run(); 227 run();
212 }); 228 });
213 229
214 test('upload form url is not a string', () { 230 test('upload form url is not a string', () {
215 var server = new ScheduledServer(); 231 var server = new ScheduledServer();
216 credentialsFile(server, 'access token').scheduleCreate(); 232 credentialsFile(server, 'access token').scheduleCreate();
217 var pub = startPubLish(server); 233 var pub = startPubLish(server);
218 234
235 confirmPublish(pub);
236
219 var body = { 237 var body = {
220 'url': 12, 238 'url': 12,
221 'fields': { 239 'fields': {
222 'field1': 'value1', 240 'field1': 'value1',
223 'field2': 'value2' 241 'field2': 'value2'
224 } 242 }
225 }; 243 };
226 244
227 handleUploadForm(server, body); 245 handleUploadForm(server, body);
228 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 246 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
229 expectLater(pub.nextErrLine(), equals(JSON.stringify(body))); 247 expectLater(pub.nextErrLine(), equals(JSON.stringify(body)));
230 pub.shouldExit(1); 248 pub.shouldExit(1);
231 249
232 run(); 250 run();
233 }); 251 });
234 252
235 test('upload form is missing fields', () { 253 test('upload form is missing fields', () {
236 var server = new ScheduledServer(); 254 var server = new ScheduledServer();
237 credentialsFile(server, 'access token').scheduleCreate(); 255 credentialsFile(server, 'access token').scheduleCreate();
238 var pub = startPubLish(server); 256 var pub = startPubLish(server);
239 257
258 confirmPublish(pub);
259
240 var body = {'url': 'http://example.com/upload'}; 260 var body = {'url': 'http://example.com/upload'};
241 handleUploadForm(server, body); 261 handleUploadForm(server, body);
242 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 262 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
243 expectLater(pub.nextErrLine(), equals(JSON.stringify(body))); 263 expectLater(pub.nextErrLine(), equals(JSON.stringify(body)));
244 pub.shouldExit(1); 264 pub.shouldExit(1);
245 265
246 run(); 266 run();
247 }); 267 });
248 268
249 test('upload form fields is not a map', () { 269 test('upload form fields is not a map', () {
250 var server = new ScheduledServer(); 270 var server = new ScheduledServer();
251 credentialsFile(server, 'access token').scheduleCreate(); 271 credentialsFile(server, 'access token').scheduleCreate();
252 var pub = startPubLish(server); 272 var pub = startPubLish(server);
253 273
274 confirmPublish(pub);
275
254 var body = {'url': 'http://example.com/upload', 'fields': 12}; 276 var body = {'url': 'http://example.com/upload', 'fields': 12};
255 handleUploadForm(server, body); 277 handleUploadForm(server, body);
256 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 278 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
257 expectLater(pub.nextErrLine(), equals(JSON.stringify(body))); 279 expectLater(pub.nextErrLine(), equals(JSON.stringify(body)));
258 pub.shouldExit(1); 280 pub.shouldExit(1);
259 281
260 run(); 282 run();
261 }); 283 });
262 284
263 test('upload form fields has a non-string value', () { 285 test('upload form fields has a non-string value', () {
264 var server = new ScheduledServer(); 286 var server = new ScheduledServer();
265 credentialsFile(server, 'access token').scheduleCreate(); 287 credentialsFile(server, 'access token').scheduleCreate();
266 var pub = startPubLish(server); 288 var pub = startPubLish(server);
267 289
290 confirmPublish(pub);
291
268 var body = { 292 var body = {
269 'url': 'http://example.com/upload', 293 'url': 'http://example.com/upload',
270 'fields': {'field': 12} 294 'fields': {'field': 12}
271 }; 295 };
272 handleUploadForm(server, body); 296 handleUploadForm(server, body);
273 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 297 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
274 expectLater(pub.nextErrLine(), equals(JSON.stringify(body))); 298 expectLater(pub.nextErrLine(), equals(JSON.stringify(body)));
275 pub.shouldExit(1); 299 pub.shouldExit(1);
276 300
277 run(); 301 run();
278 }); 302 });
279 303
280 test('cloud storage upload provides an error', () { 304 test('cloud storage upload provides an error', () {
281 var server = new ScheduledServer(); 305 var server = new ScheduledServer();
282 credentialsFile(server, 'access token').scheduleCreate(); 306 credentialsFile(server, 'access token').scheduleCreate();
283 var pub = startPubLish(server); 307 var pub = startPubLish(server);
308
309 confirmPublish(pub);
284 handleUploadForm(server); 310 handleUploadForm(server);
285 311
286 server.handle('POST', '/upload', (request, response) { 312 server.handle('POST', '/upload', (request, response) {
287 response.statusCode = 400; 313 response.statusCode = 400;
288 response.headers.contentType = new ContentType('application', 'xml'); 314 response.headers.contentType = new ContentType('application', 'xml');
289 response.outputStream.writeString('<Error><Message>Your request sucked.' 315 response.outputStream.writeString('<Error><Message>Your request sucked.'
290 '</Message></Error>'); 316 '</Message></Error>');
291 response.outputStream.close(); 317 response.outputStream.close();
292 }); 318 });
293 319
294 // TODO(nweiz): This should use the server's error message once the client 320 // TODO(nweiz): This should use the server's error message once the client
295 // can parse the XML. 321 // can parse the XML.
296 expectLater(pub.nextErrLine(), equals('Failed to upload the package.')); 322 expectLater(pub.nextErrLine(), equals('Failed to upload the package.'));
297 pub.shouldExit(1); 323 pub.shouldExit(1);
298 324
299 run(); 325 run();
300 }); 326 });
301 327
302 test("cloud storage upload doesn't redirect", () { 328 test("cloud storage upload doesn't redirect", () {
303 var server = new ScheduledServer(); 329 var server = new ScheduledServer();
304 credentialsFile(server, 'access token').scheduleCreate(); 330 credentialsFile(server, 'access token').scheduleCreate();
305 var pub = startPubLish(server); 331 var pub = startPubLish(server);
332
333 confirmPublish(pub);
306 handleUploadForm(server); 334 handleUploadForm(server);
307 335
308 server.handle('POST', '/upload', (request, response) { 336 server.handle('POST', '/upload', (request, response) {
309 // don't set the location header 337 // don't set the location header
310 response.outputStream.close(); 338 response.outputStream.close();
311 }); 339 });
312 340
313 expectLater(pub.nextErrLine(), equals('Failed to upload the package.')); 341 expectLater(pub.nextErrLine(), equals('Failed to upload the package.'));
314 pub.shouldExit(1); 342 pub.shouldExit(1);
315 343
316 run(); 344 run();
317 }); 345 });
318 346
319 test('package creation provides an error', () { 347 test('package creation provides an error', () {
320 var server = new ScheduledServer(); 348 var server = new ScheduledServer();
321 credentialsFile(server, 'access token').scheduleCreate(); 349 credentialsFile(server, 'access token').scheduleCreate();
322 var pub = startPubLish(server); 350 var pub = startPubLish(server);
351
352 confirmPublish(pub);
323 handleUploadForm(server); 353 handleUploadForm(server);
324 handleUpload(server); 354 handleUpload(server);
325 355
326 server.handle('GET', '/create', (request, response) { 356 server.handle('GET', '/create', (request, response) {
327 response.statusCode = 400; 357 response.statusCode = 400;
328 response.outputStream.writeString(JSON.stringify({ 358 response.outputStream.writeString(JSON.stringify({
329 'error': {'message': 'Your package was too boring.'} 359 'error': {'message': 'Your package was too boring.'}
330 })); 360 }));
331 response.outputStream.close(); 361 response.outputStream.close();
332 }); 362 });
333 363
334 expectLater(pub.nextErrLine(), equals('Your package was too boring.')); 364 expectLater(pub.nextErrLine(), equals('Your package was too boring.'));
335 pub.shouldExit(1); 365 pub.shouldExit(1);
336 366
337 run(); 367 run();
338 }); 368 });
339 369
340 test('package creation provides invalid JSON', () { 370 test('package creation provides invalid JSON', () {
341 var server = new ScheduledServer(); 371 var server = new ScheduledServer();
342 credentialsFile(server, 'access token').scheduleCreate(); 372 credentialsFile(server, 'access token').scheduleCreate();
343 var pub = startPubLish(server); 373 var pub = startPubLish(server);
374
375 confirmPublish(pub);
344 handleUploadForm(server); 376 handleUploadForm(server);
345 handleUpload(server); 377 handleUpload(server);
346 378
347 server.handle('GET', '/create', (request, response) { 379 server.handle('GET', '/create', (request, response) {
348 response.outputStream.writeString('{not json'); 380 response.outputStream.writeString('{not json');
349 response.outputStream.close(); 381 response.outputStream.close();
350 }); 382 });
351 383
352 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 384 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
353 expectLater(pub.nextErrLine(), equals('{not json')); 385 expectLater(pub.nextErrLine(), equals('{not json'));
354 pub.shouldExit(1); 386 pub.shouldExit(1);
355 387
356 run(); 388 run();
357 }); 389 });
358 390
359 test('package creation provides a malformed error', () { 391 test('package creation provides a malformed error', () {
360 var server = new ScheduledServer(); 392 var server = new ScheduledServer();
361 credentialsFile(server, 'access token').scheduleCreate(); 393 credentialsFile(server, 'access token').scheduleCreate();
362 var pub = startPubLish(server); 394 var pub = startPubLish(server);
395
396 confirmPublish(pub);
363 handleUploadForm(server); 397 handleUploadForm(server);
364 handleUpload(server); 398 handleUpload(server);
365 399
366 var body = {'error': 'Your package was too boring.'}; 400 var body = {'error': 'Your package was too boring.'};
367 server.handle('GET', '/create', (request, response) { 401 server.handle('GET', '/create', (request, response) {
368 response.statusCode = 400; 402 response.statusCode = 400;
369 response.outputStream.writeString(JSON.stringify(body)); 403 response.outputStream.writeString(JSON.stringify(body));
370 response.outputStream.close(); 404 response.outputStream.close();
371 }); 405 });
372 406
373 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 407 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
374 expectLater(pub.nextErrLine(), equals(JSON.stringify(body))); 408 expectLater(pub.nextErrLine(), equals(JSON.stringify(body)));
375 pub.shouldExit(1); 409 pub.shouldExit(1);
376 410
377 run(); 411 run();
378 }); 412 });
379 413
380 test('package creation provides a malformed success', () { 414 test('package creation provides a malformed success', () {
381 var server = new ScheduledServer(); 415 var server = new ScheduledServer();
382 credentialsFile(server, 'access token').scheduleCreate(); 416 credentialsFile(server, 'access token').scheduleCreate();
383 var pub = startPubLish(server); 417 var pub = startPubLish(server);
418
419 confirmPublish(pub);
384 handleUploadForm(server); 420 handleUploadForm(server);
385 handleUpload(server); 421 handleUpload(server);
386 422
387 var body = {'success': 'Your package was awesome.'}; 423 var body = {'success': 'Your package was awesome.'};
388 server.handle('GET', '/create', (request, response) { 424 server.handle('GET', '/create', (request, response) {
389 response.outputStream.writeString(JSON.stringify(body)); 425 response.outputStream.writeString(JSON.stringify(body));
390 response.outputStream.close(); 426 response.outputStream.close();
391 }); 427 });
392 428
393 expectLater(pub.nextErrLine(), equals('Invalid server response:')); 429 expectLater(pub.nextErrLine(), equals('Invalid server response:'));
394 expectLater(pub.nextErrLine(), equals(JSON.stringify(body))); 430 expectLater(pub.nextErrLine(), equals(JSON.stringify(body)));
395 pub.shouldExit(1); 431 pub.shouldExit(1);
396 432
397 run(); 433 run();
398 }); 434 });
399 } 435 }
OLDNEW
« no previous file with comments | « utils/tests/pub/path/path_windows_test.dart ('k') | utils/tests/pub/test_pub.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698