1
+ // ignore_for_file: no_adjacent_strings_in_list
2
+
1
3
import 'dart:io' ;
2
4
5
+ import 'package:args/args.dart' ;
3
6
import 'package:dart_frog_cli/src/command_runner.dart' ;
4
7
import 'package:dart_frog_cli/src/commands/update/update.dart' ;
5
8
import 'package:dart_frog_cli/src/version.dart' ;
@@ -8,11 +11,28 @@ import 'package:mocktail/mocktail.dart';
8
11
import 'package:pub_updater/pub_updater.dart' ;
9
12
import 'package:test/test.dart' ;
10
13
11
- class MockLogger extends Mock implements Logger {}
14
+ import '../../../helpers/helpers.dart' ;
15
+
16
+ class _MockLogger extends Mock implements Logger {}
17
+
18
+ class _MockPubUpdater extends Mock implements PubUpdater {}
19
+
20
+ class _MockProgress extends Mock implements Progress {}
12
21
13
- class MockPubUpdater extends Mock implements PubUpdater {}
22
+ class _MockArgResults extends Mock implements ArgResults {}
14
23
15
- class MockProgress extends Mock implements Progress {}
24
+ class _MockProcessSignal extends Mock implements ProcessSignal {}
25
+
26
+ const expectedUsage = [
27
+ 'Update the Dart Frog CLI.\n '
28
+ '\n '
29
+ 'Usage: dart_frog update\n '
30
+ '-h, --help Print this usage information.\n '
31
+ ' --verify-only Check if an update is available, without '
32
+ 'committing to update.\n '
33
+ '\n '
34
+ 'Run "dart_frog help" to see global options.'
35
+ ];
16
36
17
37
void main () {
18
38
const latestVersion = '0.0.0' ;
@@ -24,12 +44,15 @@ void main() {
24
44
late Logger logger;
25
45
late PubUpdater pubUpdater;
26
46
late UpdateCommand command;
47
+ late ArgResults argResults;
48
+ late DartFrogCommandRunner commandRunner;
27
49
28
50
setUp (() {
29
- logger = MockLogger ();
30
- pubUpdater = MockPubUpdater ();
51
+ logger = _MockLogger ();
52
+ pubUpdater = _MockPubUpdater ();
53
+ argResults = _MockArgResults ();
31
54
32
- when (() => logger.progress (any ())).thenReturn (MockProgress ());
55
+ when (() => logger.progress (any ())).thenReturn (_MockProgress ());
33
56
when (
34
57
() => pubUpdater.getLatestVersion (any ()),
35
58
).thenAnswer ((_) async => packageVersion);
@@ -40,9 +63,32 @@ void main() {
40
63
),
41
64
).thenAnswer ((_) => Future .value (processResult));
42
65
43
- command = UpdateCommand (logger: logger, pubUpdater: pubUpdater);
66
+ when (() => argResults['verify-only' ]).thenReturn (false );
67
+
68
+ command = UpdateCommand (logger: logger, pubUpdater: pubUpdater)
69
+ ..testArgResults = argResults;
70
+
71
+ final sigint = _MockProcessSignal ();
72
+ when (sigint.watch).thenAnswer ((_) => const Stream .empty ());
73
+
74
+ commandRunner = DartFrogCommandRunner (
75
+ logger: logger,
76
+ pubUpdater: _MockPubUpdater (),
77
+ exit: (_) {},
78
+ sigint: sigint,
79
+ );
44
80
});
45
81
82
+ test (
83
+ 'usage shows help text' ,
84
+ overridePrint ((printLogs) async {
85
+ final result = await commandRunner.run (['update' , '--help' ]);
86
+
87
+ expect (result, equals (ExitCode .success.code));
88
+ expect (printLogs, equals (expectedUsage));
89
+ }),
90
+ );
91
+
46
92
test ('handles pub latest version query errors' , () async {
47
93
when (
48
94
() => pubUpdater.getLatestVersion (any ()),
@@ -59,6 +105,56 @@ void main() {
59
105
);
60
106
});
61
107
108
+ group ('--verify-only' , () {
109
+ test (
110
+ 'logs latest available version' ,
111
+ () async {
112
+ when (
113
+ () => pubUpdater.getLatestVersion (any ()),
114
+ ).thenAnswer ((_) async => latestVersion);
115
+ when (() => argResults['verify-only' ]).thenReturn (true );
116
+
117
+ final result = await command.run ();
118
+
119
+ expect (result, equals (ExitCode .success.code));
120
+ verify (
121
+ () => logger.info ('A new version of $packageName is available.\n ' ),
122
+ ).called (1 );
123
+ verify (
124
+ () => logger.info (
125
+ styleBold.wrap ('The latest version: $latestVersion ' ),
126
+ ),
127
+ ).called (1 );
128
+ verify (
129
+ () => logger.info ('Your current version: $packageVersion \n ' ),
130
+ ).called (1 );
131
+ verify (
132
+ () => logger.info ('To update now, run "$executableName update".' ),
133
+ ).called (1 );
134
+ },
135
+ );
136
+
137
+ test (
138
+ 'does not update' ,
139
+ () async {
140
+ when (
141
+ () => pubUpdater.getLatestVersion (any ()),
142
+ ).thenAnswer ((_) async => latestVersion);
143
+ when (() => argResults['verify-only' ]).thenReturn (true );
144
+
145
+ final result = await command.run ();
146
+
147
+ expect (result, equals (ExitCode .success.code));
148
+ verifyNever (
149
+ () => pubUpdater.update (
150
+ packageName: any (named: 'packageName' ),
151
+ versionConstraint: any (named: 'versionConstraint' ),
152
+ ),
153
+ );
154
+ },
155
+ );
156
+ });
157
+
62
158
test ('handles pub update errors' , () async {
63
159
when (
64
160
() => pubUpdater.getLatestVersion (any ()),
@@ -119,7 +215,7 @@ void main() {
119
215
),
120
216
).thenAnswer ((_) => Future .value (processResult));
121
217
122
- when (() => logger.progress (any ())).thenReturn (MockProgress ());
218
+ when (() => logger.progress (any ())).thenReturn (_MockProgress ());
123
219
final result = await command.run ();
124
220
expect (result, equals (ExitCode .success.code));
125
221
verify (() => logger.progress ('Checking for updates' )).called (1 );
@@ -136,7 +232,7 @@ void main() {
136
232
when (
137
233
() => pubUpdater.getLatestVersion (any ()),
138
234
).thenAnswer ((_) async => packageVersion);
139
- when (() => logger.progress (any ())).thenReturn (MockProgress ());
235
+ when (() => logger.progress (any ())).thenReturn (_MockProgress ());
140
236
final result = await command.run ();
141
237
expect (result, equals (ExitCode .success.code));
142
238
verify (
0 commit comments