@@ -2,27 +2,48 @@ import 'package:io/io.dart';
22import 'package:mason/mason.dart' ;
33import 'package:mockito/mockito.dart' ;
44import 'package:test/test.dart' ;
5+ import 'package:very_good_cli/src/command_runner.dart' ;
56import 'package:very_good_cli/src/commands/create.dart' ;
67
78class MockLogger extends Mock implements Logger {}
89
910void main () {
1011 group ('Create' , () {
1112 Logger logger;
12- CreateCommand command ;
13+ VeryGoodCommandRunner commandRunner ;
1314
1415 setUp (() {
1516 logger = MockLogger ();
16- command = CreateCommand (logger: logger);
17+ commandRunner = VeryGoodCommandRunner (logger: logger);
1718 });
1819
1920 test ('can be instantiated without an explicit Logger instance' , () {
2021 final command = CreateCommand ();
2122 expect (command, isNotNull);
2223 });
2324
25+ test ('throws UsageException when --project-name is missing' , () async {
26+ const expectedErrorMessage = 'Required: --project-name.\n\n '
27+ 'e.g: very_good create --project-name my_app' ;
28+ final result = await commandRunner.run (['create' ]);
29+ expect (result, equals (ExitCode .usage.code));
30+ verify (logger.err (expectedErrorMessage)).called (1 );
31+ });
32+
33+ test ('throws UsageException when --project-name is invalid' , () async {
34+ const expectedErrorMessage = '"My App" is not a valid package name.\n\n '
35+ 'See https://dart.dev/tools/pub/pubspec#name for more information.' ;
36+ final result = await commandRunner.run (
37+ ['create' , '--project-name' , 'My App' ],
38+ );
39+ expect (result, equals (ExitCode .usage.code));
40+ verify (logger.err (expectedErrorMessage)).called (1 );
41+ });
42+
2443 test ('completes successfully with correct output' , () async {
25- final result = await command.run ();
44+ final result = await commandRunner.run (
45+ ['create' , '--project-name' , 'my_app' ],
46+ );
2647 expect (result, equals (ExitCode .success.code));
2748 verify (logger.alert ('Created a Very Good App! 🦄' )).called (1 );
2849 });
0 commit comments