Support publishing to a hosted-url with a /path
diff --git a/lib/src/command/lish.dart b/lib/src/command/lish.dart
index 325d482..24bdea9 100644
--- a/lib/src/command/lish.dart
+++ b/lib/src/command/lish.dart
@@ -91,7 +91,7 @@
try {
await log.progress('Uploading', () async {
- var newUri = server.resolve('/api/packages/versions/new');
+ var newUri = server.resolve('api/packages/versions/new');
var response = await client.get(newUri, headers: pubApiHeaders);
var parameters = parseJsonResponse(response);
diff --git a/test/lish/archives_and_uploads_a_package_test.dart b/test/lish/archives_and_uploads_a_package_test.dart
index 2efeb4a..e835281 100644
--- a/test/lish/archives_and_uploads_a_package_test.dart
+++ b/test/lish/archives_and_uploads_a_package_test.dart
@@ -39,6 +39,36 @@
await pub.shouldExit(exit_codes.SUCCESS);
});
+ test('publishes to hosted-url with path', () async {
+ await servePackages();
+ await d.tokensFile({
+ 'version': 1,
+ 'hosted': [
+ {'url': globalPackageServer.url + '/sub/folder', 'env': 'TOKEN'},
+ ]
+ }).create();
+ var pub = await startPublish(
+ globalPackageServer,
+ path: '/sub/folder',
+ authMethod: 'token',
+ environment: {'TOKEN': 'access token'},
+ );
+
+ await confirmPublish(pub);
+ handleUploadForm(globalPackageServer, path: '/sub/folder');
+ handleUpload(globalPackageServer);
+
+ globalPackageServer.expect('GET', '/create', (request) {
+ return shelf.Response.ok(jsonEncode({
+ 'success': {'message': 'Package test_pkg 1.0.0 uploaded!'}
+ }));
+ });
+
+ expect(pub.stdout, emits(startsWith('Uploading...')));
+ expect(pub.stdout, emits('Package test_pkg 1.0.0 uploaded!'));
+ await pub.shouldExit(exit_codes.SUCCESS);
+ });
+
// This is a regression test for #1679. We create a submodule that's not
// checked out to ensure that file listing doesn't choke on the empty
// directory.
diff --git a/test/lish/upload_form_fields_has_a_non_string_value_test.dart b/test/lish/upload_form_fields_has_a_non_string_value_test.dart
index 3ecb2fb..15f1cbb 100644
--- a/test/lish/upload_form_fields_has_a_non_string_value_test.dart
+++ b/test/lish/upload_form_fields_has_a_non_string_value_test.dart
@@ -26,7 +26,7 @@
'url': 'http://example.com/upload',
'fields': {'field': 12}
};
- handleUploadForm(globalPackageServer, body);
+ handleUploadForm(globalPackageServer, body: body);
expect(pub.stderr, emits('Invalid server response:'));
expect(pub.stderr, emits(jsonEncode(body)));
await pub.shouldExit(1);
diff --git a/test/lish/upload_form_fields_is_not_a_map_test.dart b/test/lish/upload_form_fields_is_not_a_map_test.dart
index fed0f38..aea6454 100644
--- a/test/lish/upload_form_fields_is_not_a_map_test.dart
+++ b/test/lish/upload_form_fields_is_not_a_map_test.dart
@@ -23,7 +23,7 @@
await confirmPublish(pub);
var body = {'url': 'http://example.com/upload', 'fields': 12};
- handleUploadForm(globalPackageServer, body);
+ handleUploadForm(globalPackageServer, body: body);
expect(pub.stderr, emits('Invalid server response:'));
expect(pub.stderr, emits(jsonEncode(body)));
await pub.shouldExit(1);
diff --git a/test/lish/upload_form_is_missing_fields_test.dart b/test/lish/upload_form_is_missing_fields_test.dart
index a49b0d6..3a36672 100644
--- a/test/lish/upload_form_is_missing_fields_test.dart
+++ b/test/lish/upload_form_is_missing_fields_test.dart
@@ -23,7 +23,7 @@
await confirmPublish(pub);
var body = {'url': 'http://example.com/upload'};
- handleUploadForm(globalPackageServer, body);
+ handleUploadForm(globalPackageServer, body: body);
expect(pub.stderr, emits('Invalid server response:'));
expect(pub.stderr, emits(jsonEncode(body)));
await pub.shouldExit(1);
diff --git a/test/lish/upload_form_is_missing_url_test.dart b/test/lish/upload_form_is_missing_url_test.dart
index 50f5fa5..96224e4 100644
--- a/test/lish/upload_form_is_missing_url_test.dart
+++ b/test/lish/upload_form_is_missing_url_test.dart
@@ -26,7 +26,7 @@
'fields': {'field1': 'value1', 'field2': 'value2'}
};
- handleUploadForm(globalPackageServer, body);
+ handleUploadForm(globalPackageServer, body: body);
expect(pub.stderr, emits('Invalid server response:'));
expect(pub.stderr, emits(jsonEncode(body)));
await pub.shouldExit(1);
diff --git a/test/lish/upload_form_url_is_not_a_string_test.dart b/test/lish/upload_form_url_is_not_a_string_test.dart
index 99909a4..ba7559a 100644
--- a/test/lish/upload_form_url_is_not_a_string_test.dart
+++ b/test/lish/upload_form_url_is_not_a_string_test.dart
@@ -27,7 +27,7 @@
'fields': {'field1': 'value1', 'field2': 'value2'}
};
- handleUploadForm(globalPackageServer, body);
+ handleUploadForm(globalPackageServer, body: body);
expect(pub.stderr, emits('Invalid server response:'));
expect(pub.stderr, emits(jsonEncode(body)));
await pub.shouldExit(1);
diff --git a/test/lish/utils.dart b/test/lish/utils.dart
index 5f18444..ae0960e 100644
--- a/test/lish/utils.dart
+++ b/test/lish/utils.dart
@@ -11,8 +11,8 @@
import '../test_pub.dart';
-void handleUploadForm(PackageServer server, [Map body]) {
- server.expect('GET', '/api/packages/versions/new', (request) {
+void handleUploadForm(PackageServer server, {Map body, String path = ''}) {
+ server.expect('GET', '$path/api/packages/versions/new', (request) {
expect(
request.headers, containsPair('authorization', 'Bearer access token'));
diff --git a/test/test_pub.dart b/test/test_pub.dart
index 2d68233..0f77615 100644
--- a/test/test_pub.dart
+++ b/test/test_pub.dart
@@ -378,11 +378,12 @@
List<String> args,
String authMethod = 'oauth2',
Map<String, String> environment,
+ String path = '',
}) async {
var tokenEndpoint = Uri.parse(server.url).resolve('/token').toString();
args = ['lish', ...?args];
return await startPub(args: args, tokenEndpoint: tokenEndpoint, environment: {
- 'PUB_HOSTED_URL': server.url,
+ 'PUB_HOSTED_URL': server.url + path,
'_PUB_TEST_AUTH_METHOD': authMethod,
if (environment != null) ...environment,
});