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 |