From 97045bb9f0b2722cba588102c9aeb99c15ec584a Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Tue, 15 Mar 2022 14:48:38 -0500 Subject: [PATCH] feat: improve update prompt (#312) --- lib/src/command_runner.dart | 23 +++---------------- test/src/command_runner_test.dart | 38 ++++--------------------------- 2 files changed, 7 insertions(+), 54 deletions(-) diff --git a/lib/src/command_runner.dart b/lib/src/command_runner.dart index 5af6521d..f14a7263 100644 --- a/lib/src/command_runner.dart +++ b/lib/src/command_runner.dart @@ -121,28 +121,11 @@ class VeryGoodCommandRunner extends CommandRunner { ..info('') ..info( ''' -+-------------------------------------------------------------------------------------+ -| | -| ${lightYellow.wrap('Update available!')} ${lightCyan.wrap(packageVersion)} \u2192 ${lightCyan.wrap(latestVersion)} | -| ${lightYellow.wrap('Changelog:')} ${lightCyan.wrap('https://github.com/verygoodopensource/very_good_cli/releases/tag/v$latestVersion')} | -| | -+-------------------------------------------------------------------------------------+ -''', +${lightYellow.wrap('Update available!')} ${lightCyan.wrap(packageVersion)} \u2192 ${lightCyan.wrap(latestVersion)} +${lightYellow.wrap('Changelog:')} ${lightCyan.wrap('https://github.com/verygoodopensource/very_good_cli/releases/tag/v$latestVersion')} +Run ${lightCyan.wrap('dart pub global activate very_good_cli')} to update''', ); - final response = _logger.prompt('Would you like to update? (y/n) '); - if (response.isYes()) { - final done = _logger.progress('Updating to $latestVersion'); - await _pubUpdater.update(packageName: packageName); - done('Updated to $latestVersion'); - } } } catch (_) {} } } - -extension on String { - bool isYes() { - final normalized = toLowerCase().trim(); - return normalized == 'y' || normalized == 'yes'; - } -} diff --git a/test/src/command_runner_test.dart b/test/src/command_runner_test.dart index 941abae0..c1e85bbe 100644 --- a/test/src/command_runner_test.dart +++ b/test/src/command_runner_test.dart @@ -6,7 +6,6 @@ import 'package:mason/mason.dart' hide packageVersion; import 'package:mocktail/mocktail.dart'; import 'package:pub_updater/pub_updater.dart'; import 'package:test/test.dart'; -import 'package:universal_io/io.dart'; import 'package:usage/usage_io.dart'; import 'package:very_good_cli/src/command_runner.dart'; import 'package:very_good_cli/src/version.dart'; @@ -17,8 +16,6 @@ class MockLogger extends Mock implements Logger {} class MockPubUpdater extends Mock implements PubUpdater {} -class FakeProcessResult extends Fake implements ProcessResult {} - const expectedUsage = [ '🦄 A Very Good Command Line Interface\n' '\n' @@ -47,13 +44,9 @@ const responseBody = const latestVersion = '0.0.0'; final updatePrompt = ''' -+-------------------------------------------------------------------------------------+ -| | -| ${lightYellow.wrap('Update available!')} ${lightCyan.wrap(packageVersion)} \u2192 ${lightCyan.wrap(latestVersion)} | -| ${lightYellow.wrap('Changelog:')} ${lightCyan.wrap('https://github.com/verygoodopensource/very_good_cli/releases/tag/v$latestVersion')} | -| | -+-------------------------------------------------------------------------------------+ -'''; +${lightYellow.wrap('Update available!')} ${lightCyan.wrap(packageVersion)} \u2192 ${lightCyan.wrap(latestVersion)} +${lightYellow.wrap('Changelog:')} ${lightCyan.wrap('https://github.com/verygoodopensource/very_good_cli/releases/tag/v$latestVersion')} +Run ${lightCyan.wrap('dart pub global activate very_good_cli')} to update'''; void main() { group('VeryGoodCommandRunner', () { @@ -85,11 +78,6 @@ void main() { when( () => pubUpdater.getLatestVersion(any()), ).thenAnswer((_) async => packageVersion); - when( - () => pubUpdater.update( - packageName: any(named: 'packageName'), - ), - ).thenAnswer((_) => Future.value(FakeProcessResult())); logger = MockLogger(); @@ -107,19 +95,14 @@ void main() { }); group('run', () { - test('prompts for update when newer version exists', () async { + test('shows update message when newer version exists', () async { when( () => pubUpdater.getLatestVersion(any()), ).thenAnswer((_) async => latestVersion); - when(() => logger.prompt(any())).thenReturn('n'); - final result = await commandRunner.run(['--version']); expect(result, equals(ExitCode.success.code)); verify(() => logger.info(updatePrompt)).called(1); - verify( - () => logger.prompt('Would you like to update? (y/n) '), - ).called(1); }); test('handles pub update errors gracefully', () async { @@ -132,19 +115,6 @@ void main() { verifyNever(() => logger.info(updatePrompt)); }); - test('updates on "y" response when newer version exists', () async { - when( - () => pubUpdater.getLatestVersion(any()), - ).thenAnswer((_) async => latestVersion); - - when(() => logger.prompt(any())).thenReturn('y'); - when(() => logger.progress(any())).thenReturn(([String? message]) {}); - - final result = await commandRunner.run(['--version']); - expect(result, equals(ExitCode.success.code)); - verify(() => logger.progress('Updating to $latestVersion')).called(1); - }); - test('prompts for analytics collection on first run (y)', () async { when(() => analytics.firstRun).thenReturn(true); when(() => logger.prompt(any())).thenReturn('y');