@@ -12,7 +12,7 @@ class MockLogger extends Mock implements Logger {}
1212
1313class MockPubUpdater extends Mock implements PubUpdater {}
1414
15- class FakeProcessResult extends Fake implements ProcessResult {}
15+ class MockProcessResult extends Mock implements ProcessResult {}
1616
1717class MockProgress extends Mock implements Progress {}
1818
@@ -23,18 +23,23 @@ void main() {
2323 late Logger logger;
2424 late PubUpdater pubUpdater;
2525 late UpdateCommand command;
26+ late ProcessResult processResult;
2627
2728 setUp (() {
2829 logger = MockLogger ();
2930 pubUpdater = MockPubUpdater ();
31+ processResult = MockProcessResult ();
3032
3133 when (() => logger.progress (any ())).thenReturn (MockProgress ());
3234 when (
3335 () => pubUpdater.getLatestVersion (any ()),
3436 ).thenAnswer ((_) async => packageVersion);
3537 when (
36- () => pubUpdater.update (packageName: packageName),
37- ).thenAnswer ((_) => Future .value (FakeProcessResult ()));
38+ () => pubUpdater.update (
39+ packageName: packageName,
40+ versionConstraint: any (named: 'versionConstraint' ),
41+ ),
42+ ).thenAnswer ((_) => Future .value (processResult));
3843
3944 command = UpdateCommand (logger: logger, pubUpdater: pubUpdater);
4045 });
@@ -48,7 +53,10 @@ void main() {
4853 verify (() => logger.progress ('Checking for updates' )).called (1 );
4954 verify (() => logger.err ('Exception: oops' ));
5055 verifyNever (
51- () => pubUpdater.update (packageName: any (named: 'packageName' )),
56+ () => pubUpdater.update (
57+ packageName: any (named: 'packageName' ),
58+ versionConstraint: any (named: 'versionConstraint' ),
59+ ),
5260 );
5361 });
5462
@@ -57,27 +65,71 @@ void main() {
5765 () => pubUpdater.getLatestVersion (any ()),
5866 ).thenAnswer ((_) async => latestVersion);
5967 when (
60- () => pubUpdater.update (packageName: any (named: 'packageName' )),
68+ () => pubUpdater.update (
69+ packageName: any (named: 'packageName' ),
70+ versionConstraint: any (named: 'versionConstraint' ),
71+ ),
6172 ).thenThrow (Exception ('oops' ));
6273 final result = await command.run ();
6374 expect (result, equals (ExitCode .software.code));
6475 verify (() => logger.progress ('Checking for updates' )).called (1 );
6576 verify (() => logger.err ('Exception: oops' ));
6677 verify (
67- () => pubUpdater.update (packageName: any (named: 'packageName' )),
78+ () => pubUpdater.update (
79+ packageName: any (named: 'packageName' ),
80+ versionConstraint: any (named: 'versionConstraint' ),
81+ ),
82+ ).called (1 );
83+ });
84+
85+ test ('handles pub update process errors' , () async {
86+ const error = 'Oh no! Installing this is not possible right now!' ;
87+ when (() => processResult.exitCode).thenReturn (1 );
88+ when < dynamic > (() => processResult.stderr).thenReturn (error);
89+ when (
90+ () => pubUpdater.getLatestVersion (any ()),
91+ ).thenAnswer ((_) async => latestVersion);
92+ when (
93+ () => pubUpdater.update (
94+ packageName: any (named: 'packageName' ),
95+ versionConstraint: any (named: 'versionConstraint' ),
96+ ),
97+ ).thenAnswer ((_) => Future .value (processResult));
98+
99+ final result = await command.run ();
100+ expect (result, equals (ExitCode .software.code));
101+ verify (() => logger.progress ('Checking for updates' )).called (1 );
102+ verify (() => logger.err ('Error updating Dart Frog CLI: $error ' ));
103+ verify (
104+ () => pubUpdater.update (
105+ packageName: any (named: 'packageName' ),
106+ versionConstraint: any (named: 'versionConstraint' ),
107+ ),
68108 ).called (1 );
69109 });
70110
71111 test ('updates when newer version exists' , () async {
72112 when (
73113 () => pubUpdater.getLatestVersion (any ()),
74114 ).thenAnswer ((_) async => latestVersion);
115+ when (
116+ () => pubUpdater.update (
117+ packageName: any (named: 'packageName' ),
118+ versionConstraint: any (named: 'versionConstraint' ),
119+ ),
120+ ).thenAnswer ((_) => Future .value (processResult));
121+ when (() => processResult.exitCode).thenReturn (0 );
75122 when (() => logger.progress (any ())).thenReturn (MockProgress ());
76123 final result = await command.run ();
77124 expect (result, equals (ExitCode .success.code));
78125 verify (() => logger.progress ('Checking for updates' )).called (1 );
79126 verify (() => logger.progress ('Updating to $latestVersion ' )).called (1 );
80- verify (() => pubUpdater.update (packageName: packageName)).called (1 );
127+ verify (
128+ () => pubUpdater.update (
129+ packageName: packageName,
130+ versionConstraint: latestVersion,
131+ ),
132+ ).called (1 );
81133 });
82134
83135 test ('does not update when already on latest version' , () async {
@@ -91,7 +143,12 @@ void main() {
91143 () => logger.info ('$packageName is already at the latest version.' ),
92144 ).called (1 );
93145 verifyNever (() => logger.progress ('Updating to $latestVersion ' ));
94- verifyNever (() => pubUpdater.update (packageName: packageName));
146+ verifyNever (
147+ () => pubUpdater.update (
148+ packageName: any (named: 'packageName' ),
149+ versionConstraint: any (named: 'versionConstraint' ),
150+ ),
151+ );
95152 });
96153 });
97154}
0 commit comments