| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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_uploader_test; | 5 library pub_uploader_test; |
| 6 | 6 |
| 7 import 'dart:convert'; | 7 import 'dart:convert'; |
| 8 import 'dart:io'; | 8 import 'dart:io'; |
| 9 | 9 |
| 10 import 'package:scheduled_test/scheduled_process.dart'; | 10 import 'package:scheduled_test/scheduled_process.dart'; |
| 11 import 'package:scheduled_test/scheduled_server.dart'; | 11 import 'package:scheduled_test/scheduled_server.dart'; |
| 12 import 'package:scheduled_test/scheduled_test.dart'; | 12 import 'package:scheduled_test/scheduled_test.dart'; |
| 13 import 'package:shelf/shelf.dart' as shelf; |
| 13 | 14 |
| 14 import '../lib/src/exit_codes.dart' as exit_codes; | 15 import '../lib/src/exit_codes.dart' as exit_codes; |
| 15 import '../lib/src/io.dart'; | 16 import '../lib/src/io.dart'; |
| 16 import '../lib/src/utils.dart'; | 17 import '../lib/src/utils.dart'; |
| 17 import 'descriptor.dart' as d; | 18 import 'descriptor.dart' as d; |
| 18 import 'test_pub.dart'; | 19 import 'test_pub.dart'; |
| 19 | 20 |
| 20 final USAGE_STRING = ''' | 21 final USAGE_STRING = ''' |
| 21 Manage uploaders for a package on pub.dartlang.org. | 22 Manage uploaders for a package on pub.dartlang.org. |
| 22 | 23 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 output: USAGE_STRING, exitCode: exit_codes.USAGE); | 55 output: USAGE_STRING, exitCode: exit_codes.USAGE); |
| 55 }); | 56 }); |
| 56 }); | 57 }); |
| 57 | 58 |
| 58 integration('adds an uploader', () { | 59 integration('adds an uploader', () { |
| 59 var server = new ScheduledServer(); | 60 var server = new ScheduledServer(); |
| 60 d.credentialsFile(server, 'access token').create(); | 61 d.credentialsFile(server, 'access token').create(); |
| 61 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); | 62 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); |
| 62 | 63 |
| 63 server.handle('POST', '/api/packages/pkg/uploaders', (request) { | 64 server.handle('POST', '/api/packages/pkg/uploaders', (request) { |
| 64 expect(new ByteStream(request).toBytes().then((bodyBytes) { | 65 return request.readAsString().then((body) { |
| 65 expect(new String.fromCharCodes(bodyBytes), equals('email=email')); | 66 expect(body, equals('email=email')); |
| 66 | 67 |
| 67 request.response.headers.contentType = | 68 return new shelf.Response.ok(JSON.encode({ |
| 68 new ContentType("application", "json"); | |
| 69 request.response.write(JSON.encode({ | |
| 70 'success': {'message': 'Good job!'} | 69 'success': {'message': 'Good job!'} |
| 71 })); | 70 }), headers: {'content-type': 'application/json'}); |
| 72 request.response.close(); | 71 }); |
| 73 }), completes); | |
| 74 }); | 72 }); |
| 75 | 73 |
| 76 pub.stdout.expect('Good job!'); | 74 pub.stdout.expect('Good job!'); |
| 77 pub.shouldExit(exit_codes.SUCCESS); | 75 pub.shouldExit(exit_codes.SUCCESS); |
| 78 }); | 76 }); |
| 79 | 77 |
| 80 integration('removes an uploader', () { | 78 integration('removes an uploader', () { |
| 81 var server = new ScheduledServer(); | 79 var server = new ScheduledServer(); |
| 82 d.credentialsFile(server, 'access token').create(); | 80 d.credentialsFile(server, 'access token').create(); |
| 83 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); | 81 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); |
| 84 | 82 |
| 85 server.handle('DELETE', '/api/packages/pkg/uploaders/email', (request) { | 83 server.handle('DELETE', '/api/packages/pkg/uploaders/email', (request) { |
| 86 request.response.headers.contentType = | 84 return new shelf.Response.ok(JSON.encode({ |
| 87 new ContentType("application", "json"); | |
| 88 request.response.write(JSON.encode({ | |
| 89 'success': {'message': 'Good job!'} | 85 'success': {'message': 'Good job!'} |
| 90 })); | 86 }), headers: {'content-type': 'application/json'}); |
| 91 request.response.close(); | |
| 92 }); | 87 }); |
| 93 | 88 |
| 94 pub.stdout.expect('Good job!'); | 89 pub.stdout.expect('Good job!'); |
| 95 pub.shouldExit(exit_codes.SUCCESS); | 90 pub.shouldExit(exit_codes.SUCCESS); |
| 96 }); | 91 }); |
| 97 | 92 |
| 98 integration('defaults to the current package', () { | 93 integration('defaults to the current package', () { |
| 99 d.validPackage.create(); | 94 d.validPackage.create(); |
| 100 | 95 |
| 101 var server = new ScheduledServer(); | 96 var server = new ScheduledServer(); |
| 102 d.credentialsFile(server, 'access token').create(); | 97 d.credentialsFile(server, 'access token').create(); |
| 103 var pub = startPubUploader(server, ['add', 'email']); | 98 var pub = startPubUploader(server, ['add', 'email']); |
| 104 | 99 |
| 105 server.handle('POST', '/api/packages/test_pkg/uploaders', (request) { | 100 server.handle('POST', '/api/packages/test_pkg/uploaders', (request) { |
| 106 request.response.headers.contentType = | 101 return new shelf.Response.ok(JSON.encode({ |
| 107 new ContentType("application", "json"); | |
| 108 request.response.write(JSON.encode({ | |
| 109 'success': {'message': 'Good job!'} | 102 'success': {'message': 'Good job!'} |
| 110 })); | 103 }), headers: {'content-type': 'application/json'}); |
| 111 request.response.close(); | 104 request.response.close(); |
| 112 }); | 105 }); |
| 113 | 106 |
| 114 pub.stdout.expect('Good job!'); | 107 pub.stdout.expect('Good job!'); |
| 115 pub.shouldExit(exit_codes.SUCCESS); | 108 pub.shouldExit(exit_codes.SUCCESS); |
| 116 }); | 109 }); |
| 117 | 110 |
| 118 integration('add provides an error', () { | 111 integration('add provides an error', () { |
| 119 var server = new ScheduledServer(); | 112 var server = new ScheduledServer(); |
| 120 d.credentialsFile(server, 'access token').create(); | 113 d.credentialsFile(server, 'access token').create(); |
| 121 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); | 114 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); |
| 122 | 115 |
| 123 server.handle('POST', '/api/packages/pkg/uploaders', (request) { | 116 server.handle('POST', '/api/packages/pkg/uploaders', (request) { |
| 124 request.response.statusCode = 400; | 117 return new shelf.Response(400, |
| 125 request.response.headers.contentType = | 118 body: JSON.encode({'error': {'message': 'Bad job!'}}), |
| 126 new ContentType("application", "json"); | 119 headers: {'content-type': 'application/json'}); |
| 127 request.response.write(JSON.encode({ | |
| 128 'error': {'message': 'Bad job!'} | |
| 129 })); | |
| 130 request.response.close(); | |
| 131 }); | 120 }); |
| 132 | 121 |
| 133 pub.stderr.expect('Bad job!'); | 122 pub.stderr.expect('Bad job!'); |
| 134 pub.shouldExit(1); | 123 pub.shouldExit(1); |
| 135 }); | 124 }); |
| 136 | 125 |
| 137 integration('remove provides an error', () { | 126 integration('remove provides an error', () { |
| 138 var server = new ScheduledServer(); | 127 var server = new ScheduledServer(); |
| 139 d.credentialsFile(server, 'access token').create(); | 128 d.credentialsFile(server, 'access token').create(); |
| 140 var pub = startPubUploader(server, | 129 var pub = startPubUploader(server, |
| 141 ['--package', 'pkg', 'remove', 'e/mail']); | 130 ['--package', 'pkg', 'remove', 'e/mail']); |
| 142 | 131 |
| 143 server.handle('DELETE', '/api/packages/pkg/uploaders/e%2Fmail', (request) { | 132 server.handle('DELETE', '/api/packages/pkg/uploaders/e%2Fmail', (request) { |
| 144 request.response.statusCode = 400; | 133 return new shelf.Response(400, |
| 145 request.response.headers.contentType = | 134 body: JSON.encode({'error': {'message': 'Bad job!'}}), |
| 146 new ContentType("application", "json"); | 135 headers: {'content-type': 'application/json'}); |
| 147 request.response.write(JSON.encode({ | |
| 148 'error': {'message': 'Bad job!'} | |
| 149 })); | |
| 150 request.response.close(); | |
| 151 }); | 136 }); |
| 152 | 137 |
| 153 pub.stderr.expect('Bad job!'); | 138 pub.stderr.expect('Bad job!'); |
| 154 pub.shouldExit(1); | 139 pub.shouldExit(1); |
| 155 }); | 140 }); |
| 156 | 141 |
| 157 integration('add provides invalid JSON', () { | 142 integration('add provides invalid JSON', () { |
| 158 var server = new ScheduledServer(); | 143 var server = new ScheduledServer(); |
| 159 d.credentialsFile(server, 'access token').create(); | 144 d.credentialsFile(server, 'access token').create(); |
| 160 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); | 145 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); |
| 161 | 146 |
| 162 server.handle('POST', '/api/packages/pkg/uploaders', (request) { | 147 server.handle('POST', '/api/packages/pkg/uploaders', |
| 163 request.response.write("{not json"); | 148 (request) => new shelf.Response.ok("{not json")); |
| 164 request.response.close(); | |
| 165 }); | |
| 166 | 149 |
| 167 pub.stderr.expect(emitsLines( | 150 pub.stderr.expect(emitsLines( |
| 168 'Invalid server response:\n' | 151 'Invalid server response:\n' |
| 169 '{not json')); | 152 '{not json')); |
| 170 pub.shouldExit(1); | 153 pub.shouldExit(1); |
| 171 }); | 154 }); |
| 172 | 155 |
| 173 integration('remove provides invalid JSON', () { | 156 integration('remove provides invalid JSON', () { |
| 174 var server = new ScheduledServer(); | 157 var server = new ScheduledServer(); |
| 175 d.credentialsFile(server, 'access token').create(); | 158 d.credentialsFile(server, 'access token').create(); |
| 176 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); | 159 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); |
| 177 | 160 |
| 178 server.handle('DELETE', '/api/packages/pkg/uploaders/email', (request) { | 161 server.handle('DELETE', '/api/packages/pkg/uploaders/email', |
| 179 request.response.write("{not json"); | 162 (request) => new shelf.Response.ok("{not json")); |
| 180 request.response.close(); | |
| 181 }); | |
| 182 | 163 |
| 183 pub.stderr.expect(emitsLines( | 164 pub.stderr.expect(emitsLines( |
| 184 'Invalid server response:\n' | 165 'Invalid server response:\n' |
| 185 '{not json')); | 166 '{not json')); |
| 186 pub.shouldExit(1); | 167 pub.shouldExit(1); |
| 187 }); | 168 }); |
| 188 } | 169 } |
| OLD | NEW |