| Index: utils/tests/pub/pub_uploader_test.dart
|
| diff --git a/utils/tests/pub/pub_uploader_test.dart b/utils/tests/pub/pub_uploader_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7fb7565f5bceb6bcf8e3a91a91e31dc6dd391329
|
| --- /dev/null
|
| +++ b/utils/tests/pub/pub_uploader_test.dart
|
| @@ -0,0 +1,186 @@
|
| +// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library pub_uploader_test;
|
| +
|
| +import 'dart:io';
|
| +import 'dart:json';
|
| +
|
| +import 'test_pub.dart';
|
| +import '../../../pkg/unittest/lib/unittest.dart';
|
| +import '../../pub/utils.dart';
|
| +import '../../pub/io.dart';
|
| +
|
| +final USAGE_STRING = '''
|
| + Manage uploaders for a package on pub.dartlang.org.
|
| +
|
| + Usage: pub uploader [options] {add/remove} <email>
|
| + --server The package server on which the package is hosted
|
| + (defaults to "https://pub.dartlang.org")
|
| +
|
| + --package The package whose uploaders will be modified
|
| + (defaults to the current package)
|
| + ''';
|
| +
|
| +ScheduledProcess startPubUploader(ScheduledServer server, List<String> args) {
|
| + var tokenEndpoint = server.url.transform((url) =>
|
| + url.resolve('/token').toString());
|
| + args = flatten(['uploader', '--server', tokenEndpoint, args]);
|
| + return startPub(args: args, tokenEndpoint: tokenEndpoint);
|
| +}
|
| +
|
| +main() {
|
| + group('displays usage', () {
|
| + test('when run with no arguments', () =>
|
| + runPub(args: ['uploader'], output: USAGE_STRING, exitCode: 64));
|
| +
|
| + test('when run with only a command', () =>
|
| + runPub(args: ['uploader', 'add'], output: USAGE_STRING, exitCode: 64));
|
| +
|
| + test('when run with an invalid command', () => runPub(
|
| + args: ['uploader', 'foo', 'email'],
|
| + output: USAGE_STRING, exitCode: 64));
|
| + });
|
| +
|
| + test('adds an uploader', () {
|
| + var server = new ScheduledServer();
|
| + credentialsFile(server, 'access token').scheduleCreate();
|
| + var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
|
| +
|
| + server.handle('POST', '/packages/pkg/uploaders.json', (request, response) {
|
| + expect(consumeInputStream(request.inputStream).transform((bodyBytes) {
|
| + expect(new String.fromCharCodes(bodyBytes), equals('email=email'));
|
| +
|
| + response.headers.contentType = new ContentType("application", "json");
|
| + response.outputStream.writeString(JSON.stringify({
|
| + 'success': {'message': 'Good job!'}
|
| + }));
|
| + response.outputStream.close();
|
| + }), completes);
|
| + });
|
| +
|
| + expectLater(pub.nextLine(), equals('Good job!'));
|
| + pub.shouldExit(0);
|
| +
|
| + run();
|
| + });
|
| +
|
| + test('removes an uploader', () {
|
| + var server = new ScheduledServer();
|
| + credentialsFile(server, 'access token').scheduleCreate();
|
| + var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
|
| +
|
| + server.handle('DELETE', '/packages/pkg/uploaders/email.json',
|
| + (request, response) {
|
| + response.headers.contentType = new ContentType("application", "json");
|
| + response.outputStream.writeString(JSON.stringify({
|
| + 'success': {'message': 'Good job!'}
|
| + }));
|
| + response.outputStream.close();
|
| + });
|
| +
|
| + expectLater(pub.nextLine(), equals('Good job!'));
|
| + pub.shouldExit(0);
|
| +
|
| + run();
|
| + });
|
| +
|
| + test('defaults to the current package', () {
|
| + normalPackage.scheduleCreate();
|
| +
|
| + var server = new ScheduledServer();
|
| + credentialsFile(server, 'access token').scheduleCreate();
|
| + var pub = startPubUploader(server, ['add', 'email']);
|
| +
|
| + server.handle('POST', '/packages/test_pkg/uploaders.json',
|
| + (request, response) {
|
| + response.headers.contentType = new ContentType("application", "json");
|
| + response.outputStream.writeString(JSON.stringify({
|
| + 'success': {'message': 'Good job!'}
|
| + }));
|
| + response.outputStream.close();
|
| + });
|
| +
|
| + expectLater(pub.nextLine(), equals('Good job!'));
|
| + pub.shouldExit(0);
|
| +
|
| + run();
|
| + });
|
| +
|
| + test('add provides an error', () {
|
| + var server = new ScheduledServer();
|
| + credentialsFile(server, 'access token').scheduleCreate();
|
| + var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
|
| +
|
| + server.handle('POST', '/packages/pkg/uploaders.json', (request, response) {
|
| + response.statusCode = 400;
|
| + response.headers.contentType = new ContentType("application", "json");
|
| + response.outputStream.writeString(JSON.stringify({
|
| + 'error': {'message': 'Bad job!'}
|
| + }));
|
| + response.outputStream.close();
|
| + });
|
| +
|
| + expectLater(pub.nextErrLine(), equals('Bad job!'));
|
| + pub.shouldExit(1);
|
| +
|
| + run();
|
| + });
|
| +
|
| + test('remove provides an error', () {
|
| + var server = new ScheduledServer();
|
| + credentialsFile(server, 'access token').scheduleCreate();
|
| + var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
|
| +
|
| + server.handle('DELETE', '/packages/pkg/uploaders/email.json',
|
| + (request, response) {
|
| + response.statusCode = 400;
|
| + response.headers.contentType = new ContentType("application", "json");
|
| + response.outputStream.writeString(JSON.stringify({
|
| + 'error': {'message': 'Bad job!'}
|
| + }));
|
| + response.outputStream.close();
|
| + });
|
| +
|
| + expectLater(pub.nextErrLine(), equals('Bad job!'));
|
| + pub.shouldExit(1);
|
| +
|
| + run();
|
| + });
|
| +
|
| + test('add provides invalid JSON', () {
|
| + var server = new ScheduledServer();
|
| + credentialsFile(server, 'access token').scheduleCreate();
|
| + var pub = startPubUploader(server, ['--package', 'pkg', 'add', 'email']);
|
| +
|
| + server.handle('POST', '/packages/pkg/uploaders.json', (request, response) {
|
| + response.outputStream.writeString("{not json");
|
| + response.outputStream.close();
|
| + });
|
| +
|
| + expectLater(pub.nextErrLine(), equals('Invalid server response:'));
|
| + expectLater(pub.nextErrLine(), equals('{not json'));
|
| + pub.shouldExit(1);
|
| +
|
| + run();
|
| + });
|
| +
|
| + test('remove provides invalid JSON', () {
|
| + var server = new ScheduledServer();
|
| + credentialsFile(server, 'access token').scheduleCreate();
|
| + var pub = startPubUploader(server, ['--package', 'pkg', 'remove', 'email']);
|
| +
|
| + server.handle('DELETE', '/packages/pkg/uploaders/email.json',
|
| + (request, response) {
|
| + response.outputStream.writeString("{not json");
|
| + response.outputStream.close();
|
| + });
|
| +
|
| + expectLater(pub.nextErrLine(), equals('Invalid server response:'));
|
| + expectLater(pub.nextErrLine(), equals('{not json'));
|
| + pub.shouldExit(1);
|
| +
|
| + run();
|
| + });
|
| +}
|
|
|