| 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:io'; | 7 import 'dart:io'; |
| 8 import 'dart:json' as json; | 8 import 'dart:json' as json; |
| 9 | 9 |
| 10 import '../../../pkg/scheduled_test/lib/scheduled_process.dart'; |
| 11 import '../../../pkg/scheduled_test/lib/scheduled_server.dart'; |
| 12 import '../../../pkg/scheduled_test/lib/scheduled_test.dart'; |
| 13 |
| 14 import '../../pub/io.dart'; |
| 15 import '../../pub/utils.dart'; |
| 16 import 'descriptor.dart' as d; |
| 10 import 'test_pub.dart'; | 17 import 'test_pub.dart'; |
| 11 import '../../../pkg/unittest/lib/unittest.dart'; | |
| 12 import '../../pub/utils.dart'; | |
| 13 import '../../pub/io.dart'; | |
| 14 | 18 |
| 15 final USAGE_STRING = ''' | 19 final USAGE_STRING = ''' |
| 16 Manage uploaders for a package on pub.dartlang.org. | 20 Manage uploaders for a package on pub.dartlang.org. |
| 17 | 21 |
| 18 Usage: pub uploader [options] {add/remove} <email> | 22 Usage: pub uploader [options] {add/remove} <email> |
| 19 --server The package server on which the package is hosted | 23 --server The package server on which the package is hosted |
| 20 (defaults to "https://pub.dartlang.org") | 24 (defaults to "https://pub.dartlang.org") |
| 21 | 25 |
| 22 --package The package whose uploaders will be modified | 26 --package The package whose uploaders will be modified |
| 23 (defaults to the current package) | 27 (defaults to the current package) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 43 }); | 47 }); |
| 44 | 48 |
| 45 integration('when run with an invalid command', () { | 49 integration('when run with an invalid command', () { |
| 46 schedulePub(args: ['uploader', 'foo', 'email'], | 50 schedulePub(args: ['uploader', 'foo', 'email'], |
| 47 output: USAGE_STRING, exitCode: 64); | 51 output: USAGE_STRING, exitCode: 64); |
| 48 }); | 52 }); |
| 49 }); | 53 }); |
| 50 | 54 |
| 51 integration('adds an uploader', () { | 55 integration('adds an uploader', () { |
| 52 var server = new ScheduledServer(); | 56 var server = new ScheduledServer(); |
| 53 credentialsFile(server, 'access token').scheduleCreate(); | 57 d.credentialsFile(server, 'access token').create(); |
| 54 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); | 58 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); |
| 55 | 59 |
| 56 server.handle('POST', '/packages/pkg/uploaders.json', (request, response) { | 60 server.handle('POST', '/packages/pkg/uploaders.json', (request) { |
| 57 expect(new ByteStream(request).toBytes().then((bodyBytes) { | 61 expect(new ByteStream(request).toBytes().then((bodyBytes) { |
| 58 expect(new String.fromCharCodes(bodyBytes), equals('email=email')); | 62 expect(new String.fromCharCodes(bodyBytes), equals('email=email')); |
| 59 | 63 |
| 60 response.headers.contentType = new ContentType("application", "json"); | 64 request.response.headers.contentType = |
| 61 response.write(json.stringify({ | 65 new ContentType("application", "json"); |
| 66 request.response.write(json.stringify({ |
| 62 'success': {'message': 'Good job!'} | 67 'success': {'message': 'Good job!'} |
| 63 })); | 68 })); |
| 64 response.close(); | 69 request.response.close(); |
| 65 }), completes); | 70 }), completes); |
| 66 }); | 71 }); |
| 67 | 72 |
| 68 expectLater(pub.nextLine(), equals('Good job!')); | 73 expect(pub.nextLine(), completion(equals('Good job!'))); |
| 69 pub.shouldExit(0); | 74 pub.shouldExit(0); |
| 70 }); | 75 }); |
| 71 | 76 |
| 72 integration('removes an uploader', () { | 77 integration('removes an uploader', () { |
| 73 var server = new ScheduledServer(); | 78 var server = new ScheduledServer(); |
| 74 credentialsFile(server, 'access token').scheduleCreate(); | 79 d.credentialsFile(server, 'access token').create(); |
| 75 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); | 80 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); |
| 76 | 81 |
| 77 server.handle('DELETE', '/packages/pkg/uploaders/email.json', | 82 server.handle('DELETE', '/packages/pkg/uploaders/email.json', (request) { |
| 78 (request, response) { | 83 request.response.headers.contentType = |
| 79 response.headers.contentType = new ContentType("application", "json"); | 84 new ContentType("application", "json"); |
| 80 response.write(json.stringify({ | 85 request.response.write(json.stringify({ |
| 81 'success': {'message': 'Good job!'} | 86 'success': {'message': 'Good job!'} |
| 82 })); | 87 })); |
| 83 response.close(); | 88 request.response.close(); |
| 84 }); | 89 }); |
| 85 | 90 |
| 86 expectLater(pub.nextLine(), equals('Good job!')); | 91 expect(pub.nextLine(), completion(equals('Good job!'))); |
| 87 pub.shouldExit(0); | 92 pub.shouldExit(0); |
| 88 }); | 93 }); |
| 89 | 94 |
| 90 integration('defaults to the current package', () { | 95 integration('defaults to the current package', () { |
| 91 normalPackage.scheduleCreate(); | 96 d.validPackage.create(); |
| 92 | 97 |
| 93 var server = new ScheduledServer(); | 98 var server = new ScheduledServer(); |
| 94 credentialsFile(server, 'access token').scheduleCreate(); | 99 d.credentialsFile(server, 'access token').create(); |
| 95 var pub = startPubUploader(server, ['add', 'email']); | 100 var pub = startPubUploader(server, ['add', 'email']); |
| 96 | 101 |
| 97 server.handle('POST', '/packages/test_pkg/uploaders.json', | 102 server.handle('POST', '/packages/test_pkg/uploaders.json', (request) { |
| 98 (request, response) { | 103 request.response.headers.contentType = |
| 99 response.headers.contentType = new ContentType("application", "json"); | 104 new ContentType("application", "json"); |
| 100 response.write(json.stringify({ | 105 request.response.write(json.stringify({ |
| 101 'success': {'message': 'Good job!'} | 106 'success': {'message': 'Good job!'} |
| 102 })); | 107 })); |
| 103 response.close(); | 108 request.response.close(); |
| 104 }); | 109 }); |
| 105 | 110 |
| 106 expectLater(pub.nextLine(), equals('Good job!')); | 111 expect(pub.nextLine(), completion(equals('Good job!'))); |
| 107 pub.shouldExit(0); | 112 pub.shouldExit(0); |
| 108 }); | 113 }); |
| 109 | 114 |
| 110 integration('add provides an error', () { | 115 integration('add provides an error', () { |
| 111 var server = new ScheduledServer(); | 116 var server = new ScheduledServer(); |
| 112 credentialsFile(server, 'access token').scheduleCreate(); | 117 d.credentialsFile(server, 'access token').create(); |
| 113 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); | 118 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); |
| 114 | 119 |
| 115 server.handle('POST', '/packages/pkg/uploaders.json', (request, response) { | 120 server.handle('POST', '/packages/pkg/uploaders.json', (request) { |
| 116 response.statusCode = 400; | 121 request.response.statusCode = 400; |
| 117 response.headers.contentType = new ContentType("application", "json"); | 122 request.response.headers.contentType = |
| 118 response.write(json.stringify({ | 123 new ContentType("application", "json"); |
| 124 request.response.write(json.stringify({ |
| 119 'error': {'message': 'Bad job!'} | 125 'error': {'message': 'Bad job!'} |
| 120 })); | 126 })); |
| 121 response.close(); | 127 request.response.close(); |
| 122 }); | 128 }); |
| 123 | 129 |
| 124 expectLater(pub.nextErrLine(), equals('Bad job!')); | 130 expect(pub.nextErrLine(), completion(equals('Bad job!'))); |
| 125 pub.shouldExit(1); | 131 pub.shouldExit(1); |
| 126 }); | 132 }); |
| 127 | 133 |
| 128 integration('remove provides an error', () { | 134 integration('remove provides an error', () { |
| 129 var server = new ScheduledServer(); | 135 var server = new ScheduledServer(); |
| 130 credentialsFile(server, 'access token').scheduleCreate(); | 136 d.credentialsFile(server, 'access token').create(); |
| 131 var pub = startPubUploader(server, | 137 var pub = startPubUploader(server, |
| 132 ['--package', 'pkg', 'remove', 'e/mail']); | 138 ['--package', 'pkg', 'remove', 'e/mail']); |
| 133 | 139 |
| 134 server.handle('DELETE', '/packages/pkg/uploaders/e%2Fmail.json', | 140 server.handle('DELETE', '/packages/pkg/uploaders/e%2Fmail.json', (request) { |
| 135 (request, response) { | 141 request.response.statusCode = 400; |
| 136 response.statusCode = 400; | 142 request.response.headers.contentType = |
| 137 response.headers.contentType = new ContentType("application", "json"); | 143 new ContentType("application", "json"); |
| 138 response.write(json.stringify({ | 144 request.response.write(json.stringify({ |
| 139 'error': {'message': 'Bad job!'} | 145 'error': {'message': 'Bad job!'} |
| 140 })); | 146 })); |
| 141 response.close(); | 147 request.response.close(); |
| 142 }); | 148 }); |
| 143 | 149 |
| 144 expectLater(pub.nextErrLine(), equals('Bad job!')); | 150 expect(pub.nextErrLine(), completion(equals('Bad job!'))); |
| 145 pub.shouldExit(1); | 151 pub.shouldExit(1); |
| 146 }); | 152 }); |
| 147 | 153 |
| 148 integration('add provides invalid JSON', () { | 154 integration('add provides invalid JSON', () { |
| 149 var server = new ScheduledServer(); | 155 var server = new ScheduledServer(); |
| 150 credentialsFile(server, 'access token').scheduleCreate(); | 156 d.credentialsFile(server, 'access token').create(); |
| 151 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); | 157 var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']); |
| 152 | 158 |
| 153 server.handle('POST', '/packages/pkg/uploaders.json', (request, response) { | 159 server.handle('POST', '/packages/pkg/uploaders.json', (request) { |
| 154 response.write("{not json"); | 160 request.response.write("{not json"); |
| 155 response.close(); | 161 request.response.close(); |
| 156 }); | 162 }); |
| 157 | 163 |
| 158 expectLater(pub.nextErrLine(), equals('Invalid server response:')); | 164 expect(pub.nextErrLine(), completion(equals('Invalid server response:'))); |
| 159 expectLater(pub.nextErrLine(), equals('{not json')); | 165 expect(pub.nextErrLine(), completion(equals('{not json'))); |
| 160 pub.shouldExit(1); | 166 pub.shouldExit(1); |
| 161 }); | 167 }); |
| 162 | 168 |
| 163 integration('remove provides invalid JSON', () { | 169 integration('remove provides invalid JSON', () { |
| 164 var server = new ScheduledServer(); | 170 var server = new ScheduledServer(); |
| 165 credentialsFile(server, 'access token').scheduleCreate(); | 171 d.credentialsFile(server, 'access token').create(); |
| 166 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); | 172 var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']); |
| 167 | 173 |
| 168 server.handle('DELETE', '/packages/pkg/uploaders/email.json', | 174 server.handle('DELETE', '/packages/pkg/uploaders/email.json', (request) { |
| 169 (request, response) { | 175 request.response.write("{not json"); |
| 170 response.write("{not json"); | 176 request.response.close(); |
| 171 response.close(); | |
| 172 }); | 177 }); |
| 173 | 178 |
| 174 expectLater(pub.nextErrLine(), equals('Invalid server response:')); | 179 expect(pub.nextErrLine(), completion(equals('Invalid server response:'))); |
| 175 expectLater(pub.nextErrLine(), equals('{not json')); | 180 expect(pub.nextErrLine(), completion(equals('{not json'))); |
| 176 pub.shouldExit(1); | 181 pub.shouldExit(1); |
| 177 }); | 182 }); |
| 178 } | 183 } |
| OLD | NEW |