From 991e13889db0f5fe44d1481763d9bc8a5b090a84 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Fri, 24 Jun 2022 14:39:13 -0500 Subject: [PATCH] refactor(git_cli): stub process.run in unit tests (#441) --- test/src/cli/git_cli_test.dart | 68 +++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/test/src/cli/git_cli_test.dart b/test/src/cli/git_cli_test.dart index 9c134bd2..d1c14c28 100644 --- a/test/src/cli/git_cli_test.dart +++ b/test/src/cli/git_cli_test.dart @@ -1,33 +1,75 @@ +import 'package:mason/mason.dart'; +import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; +import 'package:universal_io/io.dart'; import 'package:very_good_cli/src/cli/cli.dart'; +class _TestProcess { + Future run( + String command, + List args, { + bool runInShell = false, + String? workingDirectory, + }) { + throw UnimplementedError(); + } +} + +class _MockProcess extends Mock implements _TestProcess {} + +class _MockProcessResult extends Mock implements ProcessResult {} + void main() { group('Git', () { + late ProcessResult processResult; + late _TestProcess process; + + setUp(() { + processResult = _MockProcessResult(); + process = _MockProcess(); + when(() => processResult.exitCode).thenReturn(ExitCode.success.code); + when( + () => process.run( + any(), + any(), + runInShell: any(named: 'runInShell'), + workingDirectory: any(named: 'workingDirectory'), + ), + ).thenAnswer((_) async => processResult); + }); + group('reachable', () { test('completes for a reachable remote', () async { - await expectLater( - Git.reachable( - Uri.parse('https://github.com/verygoodopensource/very_good_cli'), - ), - completes, + await ProcessOverrides.runZoned( + () async { + await expectLater( + Git.reachable(Uri.parse('https://github.com/org/repo')), + completes, + ); + }, + runProcess: process.run, ); }); - test('throws UnreachableGitDependency for an unreachable remote', + test( + 'throws UnreachableGitDependency ' + 'for an unreachable remote', () async { + when(() => processResult.exitCode).thenReturn(ExitCode.software.code); + await ProcessOverrides.runZoned( () async { - await expectLater( - Git.reachable( - Uri.parse('https://github.com/verygoodopensource/_very_good_cli'), - ), - throwsA(isA()), + await expectLater( + Git.reachable(Uri.parse('https://github.com/org/repo')), + throwsA(isA()), + ); + }, + runProcess: process.run, ); }); }); group('UnreachableGitDependency', () { test('has correct toString override', () { - final remote = - Uri.parse('https://github.com/verygoodopensource/_very_good_cli'); + final remote = Uri.parse('https://github.com/org/repo'); final exception = UnreachableGitDependency(remote: remote); expect( exception.toString(),