diff --git a/lib/src/pub_updater.dart b/lib/src/pub_updater.dart index 89889bd..f89116a 100644 --- a/lib/src/pub_updater.dart +++ b/lib/src/pub_updater.dart @@ -13,7 +13,10 @@ class PackageInfoRequestFailure implements Exception {} class PackageInfoNotFoundFailure implements Exception {} /// The pub.dev base url for querying package versions -const _defaultBaseUrl = 'https://pub.dev/api/packages/'; +const _defaultBaseUrl = 'https://pub.dev'; + +/// The pub.dev api query path for querying packages +const _pubPackagesPath = '/api/packages/'; /// {@template pub_update} /// A Dart package which enables checking whether a package is up to date. @@ -69,12 +72,18 @@ class PubUpdater { 'activate', packageName, if (versionConstraint != null) versionConstraint, + if (_baseUrl != _defaultBaseUrl) ...[ + '--hosted-url', + _baseUrl, + '--source', + 'hosted' + ] ], ); } Future _getPackageInfo(String packageName) async { - final uri = Uri.parse('$_baseUrl$packageName'); + final uri = Uri.parse('$_baseUrl$_pubPackagesPath$packageName'); final response = await _get(uri); if (response.statusCode != HttpStatus.ok) throw PackageInfoRequestFailure(); diff --git a/test/pub_update_test.dart b/test/pub_update_test.dart index 8250aef..3b9b097 100644 --- a/test/pub_update_test.dart +++ b/test/pub_update_test.dart @@ -24,6 +24,17 @@ const command = [ 'activate', 'very_good_cli', ]; +const commandWithCustomBaseUrl = [ + 'dart', + 'pub', + 'global', + 'activate', + 'very_good_cli', + '--hosted-url', + customBaseUrl, + '--source', + 'hosted', +]; const commandWithConstraint = [ 'dart', 'pub', @@ -32,8 +43,20 @@ const commandWithConstraint = [ 'very_good_cli', '>=0.4.0', ]; +const commandWithConstraintAndCustomBaseUrl = [ + 'dart', + 'pub', + 'global', + 'activate', + 'very_good_cli', + '>=0.4.0', + '--hosted-url', + customBaseUrl, + '--source', + 'hosted', +]; -const customBaseUrl = 'https://custom-domain.com/api/packages/'; +const customBaseUrl = 'https://custom-domain.com'; void main() { group('PubUpdater', () { @@ -102,7 +125,7 @@ void main() { verify( () => client.get( - Uri.parse('${customBaseUrl}very_good_cli'), + Uri.parse('$customBaseUrl/api/packages/very_good_cli'), ), ).called(1); }); @@ -229,7 +252,7 @@ void main() { verify( () => client.get( - Uri.parse('${customBaseUrl}very_good_cli'), + Uri.parse('$customBaseUrl/api/packages/very_good_cli'), ), ).called(1); }); @@ -268,6 +291,14 @@ void main() { ); verify(() => processManager.run(command)).called(1); }); + test('makes correct call to process.run with customBaseUrl', () async { + pubUpdater = PubUpdater(client, customBaseUrl); + await pubUpdater.update( + packageName: 'very_good_cli', + processManager: processManager, + ); + verify(() => processManager.run(commandWithCustomBaseUrl)).called(1); + }); test('makes correct call to process.run with version constraint', () async { @@ -278,6 +309,18 @@ void main() { ); verify(() => processManager.run(commandWithConstraint)).called(1); }); + + test('makes correct call to process.run with version constraint', + () async { + pubUpdater = PubUpdater(client, customBaseUrl); + await pubUpdater.update( + packageName: 'very_good_cli', + processManager: processManager, + versionConstraint: '>=0.4.0', + ); + verify(() => processManager.run(commandWithConstraintAndCustomBaseUrl)) + .called(1); + }); }); }); }