From f5564229866c35d319dd2eeb261c39c2ac00548c Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Tue, 11 Oct 2022 23:36:50 -0500 Subject: [PATCH] feat(mason_cli): add --- packages/mason_cli/lib/src/commands/add.dart | 8 ++- .../mason_cli/test/commands/add_test.dart | 54 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/packages/mason_cli/lib/src/commands/add.dart b/packages/mason_cli/lib/src/commands/add.dart index 9b9ab1a62..5911ea71c 100644 --- a/packages/mason_cli/lib/src/commands/add.dart +++ b/packages/mason_cli/lib/src/commands/add.dart @@ -54,7 +54,13 @@ class AddCommand extends MasonCommand with InstallBrickMixin { ), ); } else { - brick = Brick(name: name, location: const BrickLocation(version: 'any')); + if (results.rest.length > 2) { + usageException( + 'Too many arguments, expected arguments ', + ); + } + final version = results.rest.length == 2 ? results.rest.last : 'any'; + brick = Brick(name: name, location: BrickLocation(version: version)); } final cachedBrick = await addBrick(brick, global: isGlobal); diff --git a/packages/mason_cli/test/commands/add_test.dart b/packages/mason_cli/test/commands/add_test.dart index a384ee3d3..03dd3086c 100644 --- a/packages/mason_cli/test/commands/add_test.dart +++ b/packages/mason_cli/test/commands/add_test.dart @@ -255,6 +255,18 @@ void main() { ).called(1); }); + test('exits with code 64 when too many arguments provided', () async { + final result = await commandRunner.run( + ['add', 'nonexistent-brick', 'foo', 'bar'], + ); + expect(result, equals(ExitCode.usage.code)); + verify( + () => logger.err( + 'Too many arguments, expected arguments ', + ), + ).called(1); + }); + test('adds brick successfully when brick exists', () async { final result = await commandRunner.run(['add', 'greeting']); expect(result, equals(ExitCode.success.code)); @@ -276,6 +288,21 @@ void main() { ); expect(directoriesDeepEqual(actual, expected), isTrue); }); + + test('adds brick successfully when brick exists w/version', () async { + final addResult = await commandRunner.run( + ['add', 'greeting', '0.1.0+1'], + ); + expect(addResult, equals(ExitCode.success.code)); + + final listResult = await commandRunner.run(['ls']); + expect(listResult, equals(ExitCode.success.code)); + verify( + () => logger.info( + any(that: contains('greeting 0.1.0+1 -> registry.brickhub.dev')), + ), + ).called(1); + }); }); }); @@ -414,6 +441,18 @@ void main() { ).called(1); }); + test('exits with code 64 when too many arguments provided', () async { + final result = await commandRunner.run( + ['add', '-g', 'nonexistent-brick', 'foo', 'bar'], + ); + expect(result, equals(ExitCode.usage.code)); + verify( + () => logger.err( + 'Too many arguments, expected arguments ', + ), + ).called(1); + }); + test('adds brick successfully when brick exists', () async { final result = await commandRunner.run(['add', '-g', 'greeting']); expect(result, equals(ExitCode.success.code)); @@ -435,6 +474,21 @@ void main() { ); expect(directoriesDeepEqual(actual, expected), isTrue); }); + + test('adds brick successfully when brick exists w/version', () async { + final addResult = await commandRunner.run( + ['add', '-g', 'greeting', '0.1.0+1'], + ); + expect(addResult, equals(ExitCode.success.code)); + + final listResult = await commandRunner.run(['ls', '-g']); + expect(listResult, equals(ExitCode.success.code)); + verify( + () => logger.info( + any(that: contains('greeting 0.1.0+1 -> registry.brickhub.dev')), + ), + ).called(1); + }); }); }); });