Skip to content

Commit 4ecfc8a

Browse files
authored
feat: improve new update prompt (#206)
1 parent 52d7243 commit 4ecfc8a

File tree

3 files changed

+19
-30
lines changed

3 files changed

+19
-30
lines changed

lib/src/command_runner.dart

+5-8
Original file line numberDiff line numberDiff line change
@@ -111,20 +111,17 @@ class VeryGoodCommandRunner extends CommandRunner<int> {
111111

112112
Future<void> _checkForUpdates() async {
113113
try {
114-
final isUpToDate = await _pubUpdater.isUpToDate(
115-
packageName: packageName,
116-
currentVersion: packageVersion,
117-
);
118-
114+
final latestVersion = await _pubUpdater.getLatestVersion(packageName);
115+
final isUpToDate = packageVersion == latestVersion;
119116
if (!isUpToDate) {
120117
_logger.info(
121-
lightYellow.wrap('A new release of $packageName is available.'),
118+
'''${lightYellow.wrap('A new version of $packageName is available:')} ${lightCyan.wrap(packageVersion)} -> ${lightCyan.wrap(latestVersion)}''',
122119
);
123120
final response = _logger.prompt('Would you like to update? (y/n) ');
124121
if (response.isYes()) {
125-
final done = _logger.progress('Updating');
122+
final done = _logger.progress('Updating to $latestVersion');
126123
await _pubUpdater.update(packageName: packageName);
127-
done('Updated!');
124+
done('Updated to $latestVersion');
128125
}
129126
}
130127
} catch (_) {}

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ dependencies:
1212
mason: ^0.0.1-dev.51
1313
meta: ^1.3.0
1414
path: ^1.8.0
15-
pub_updater: ^0.1.0
15+
pub_updater: ^0.2.0
1616
universal_io: ^2.0.4
1717
usage: ^4.0.2
1818
very_good_analysis: ^2.3.0

test/src/command_runner_test.dart

+13-21
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ const expectedUsage = [
4545
const responseBody =
4646
'{"name": "very_good_cli", "versions": ["0.4.0", "0.3.3"]}';
4747

48+
const latestVersion = '9999.0.0';
49+
4850
void main() {
4951
group('VeryGoodCommandRunner', () {
5052
late List<String> printLogs;
@@ -70,14 +72,9 @@ void main() {
7072

7173
when(() => analytics.firstRun).thenReturn(false);
7274
when(() => analytics.enabled).thenReturn(false);
73-
7475
when(
75-
() => pubUpdater.isUpToDate(
76-
packageName: any(named: 'packageName'),
77-
currentVersion: any(named: 'currentVersion'),
78-
),
79-
).thenAnswer((_) => Future.value(true));
80-
76+
() => pubUpdater.getLatestVersion(any()),
77+
).thenAnswer((_) async => packageVersion);
8178
when(
8279
() => pubUpdater.update(
8380
packageName: any(named: 'packageName'),
@@ -101,18 +98,17 @@ void main() {
10198

10299
group('run', () {
103100
test('prompts for update when newer version exists', () async {
104-
when(() => pubUpdater.isUpToDate(
105-
packageName: any(named: 'packageName'),
106-
currentVersion: any(named: 'currentVersion'),
107-
)).thenAnswer((_) => Future.value(false));
101+
when(
102+
() => pubUpdater.getLatestVersion(any()),
103+
).thenAnswer((_) async => latestVersion);
108104

109105
when(() => logger.prompt(any())).thenReturn('n');
110106

111107
final result = await commandRunner.run(['--version']);
112108
expect(result, equals(ExitCode.success.code));
113109
verify(
114110
() => logger.info(
115-
lightYellow.wrap('A new release of $packageName is available.'),
111+
'''${lightYellow.wrap('A new version of $packageName is available:')} ${lightCyan.wrap(packageVersion)} -> ${lightCyan.wrap(latestVersion)}''',
116112
),
117113
).called(1);
118114
verify(
@@ -122,10 +118,7 @@ void main() {
122118

123119
test('handles pub update errors gracefully', () async {
124120
when(
125-
() => pubUpdater.isUpToDate(
126-
packageName: any(named: 'packageName'),
127-
currentVersion: any(named: 'currentVersion'),
128-
),
121+
() => pubUpdater.getLatestVersion(any()),
129122
).thenThrow(Exception('oops'));
130123

131124
final result = await commandRunner.run(['--version']);
@@ -138,17 +131,16 @@ void main() {
138131
});
139132

140133
test('updates on "y" response when newer version exists', () async {
141-
when(() => pubUpdater.isUpToDate(
142-
packageName: any(named: 'packageName'),
143-
currentVersion: any(named: 'currentVersion'),
144-
)).thenAnswer((_) => Future.value(false));
134+
when(
135+
() => pubUpdater.getLatestVersion(any()),
136+
).thenAnswer((_) async => latestVersion);
145137

146138
when(() => logger.prompt(any())).thenReturn('y');
147139
when(() => logger.progress(any())).thenReturn(([String? message]) {});
148140

149141
final result = await commandRunner.run(['--version']);
150142
expect(result, equals(ExitCode.success.code));
151-
verify(() => logger.progress('Updating')).called(1);
143+
verify(() => logger.progress('Updating to $latestVersion')).called(1);
152144
});
153145

154146
test('prompts for analytics collection on first run (y)', () async {

0 commit comments

Comments
 (0)