public async Task ExtractAsync(ExtractCommandType commandType, string fullPath)
        {
            if (!CheckIfNodeIsArchive(fullPath))
            {
                return;
            }

            switch (commandType)
            {
            case ExtractCommandType.CurrentDirectory:
                await _archiveService.ExtractAsync(fullPath);

                break;

            case ExtractCommandType.NewDirectory:
                await _archiveService.ExtractToNewDirectoryAsync(fullPath);

                break;

            case ExtractCommandType.SelectDirectory:
                var directory = await _systemDialogService.GetDirectoryAsync();

                if (!string.IsNullOrWhiteSpace(directory))
                {
                    await _archiveService.ExtractAsync(fullPath, directory);
                }

                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(commandType), commandType, null);
            }
        }
        public async Task TestExtractCommand(bool isArchive, ExtractCommandType command,
                                             int extractCallsCount, int extractToNewDirCount, int extractWithDirCallsCount, string directory)
        {
            _autoMocker
            .Setup <IArchiveService, bool>(m => m.CheckIfNodeIsArchive(FullPath))
            .Returns(isArchive);
            _autoMocker
            .Setup <IArchiveService>(m => m.ExtractAsync(FullPath, null))
            .Verifiable();
            _autoMocker
            .Setup <IArchiveService>(m => m.ExtractAsync(FullPath, directory))
            .Verifiable();
            _autoMocker
            .Setup <IArchiveService>(m => m.ExtractToNewDirectoryAsync(FullPath))
            .Verifiable();
            _autoMocker
            .Setup <ISystemDialogService, Task <string> >(m => m.GetDirectoryAsync(null))
            .Returns(Task.FromResult(directory));

            var facade = _autoMocker.CreateInstance <FileSystemNodeFacade>();

            await facade.ExtractAsync(command, FullPath);

            _autoMocker
            .Verify <IArchiveService>(m => m.ExtractAsync(FullPath, null),
                                      Times.Exactly(extractCallsCount));
            _autoMocker
            .Verify <IArchiveService>(m => m.ExtractAsync(FullPath, directory),
                                      Times.Exactly(extractWithDirCallsCount));
            _autoMocker
            .Verify <IArchiveService>(m => m.ExtractToNewDirectoryAsync(FullPath),
                                      Times.Exactly(extractToNewDirCount));
        }
        public async Task TestExtractCommandThrows()
        {
            _autoMocker
            .Setup <IArchiveService, bool>(m => m.CheckIfNodeIsArchive(FullPath))
            .Returns(true);

            var facade = _autoMocker.CreateInstance <FileSystemNodeFacade>();

            const ExtractCommandType command = (ExtractCommandType)42;

            Task ExtractAsync() => facade.ExtractAsync(command, FullPath);

            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(ExtractAsync);
        }
        public void TestExtractCommandThrows()
        {
            _autoMocker
            .Setup <IArchiveService, bool>(m => m.CheckIfNodeIsArchive(FullPath))
            .Returns(true);

            var viewModel = _autoMocker.CreateInstance <NodeViewModel>();

            viewModel.FullPath = FullPath;

            const ExtractCommandType command = (ExtractCommandType)42;

            void ExecuteCommand() => viewModel.ExtractCommand.Execute(command);

            Assert.Throws <UnhandledErrorException>(ExecuteCommand);
        }
        public void TestExtractCommand(ExtractCommandType command)
        {
            _autoMocker
            .Setup <IFileSystemNodeFacade>(m => m.ExtractAsync(command, FullPath))
            .Verifiable();

            var viewModel = _autoMocker.CreateInstance <NodeViewModel>();

            viewModel.FullPath = FullPath;

            Assert.True(viewModel.ExtractCommand.CanExecute(command));

            viewModel.ExtractCommand.Execute(command);

            _autoMocker
            .Verify <IFileSystemNodeFacade>(m => m.ExtractAsync(command, FullPath),
                                            Times.Once);
        }
        public void TestExtractCommand(bool isArchive, ExtractCommandType command,
                                       int extractCallsCount, int extractToNewDirCount, int extractWithDirCallsCount, string directory)
        {
            _autoMocker
            .Setup <IArchiveService, bool>(m => m.CheckIfNodeIsArchive(FullPath))
            .Returns(isArchive);
            _autoMocker
            .Setup <IArchiveService>(m => m.ExtractAsync(FullPath, null))
            .Verifiable();
            _autoMocker
            .Setup <IArchiveService>(m => m.ExtractAsync(FullPath, directory))
            .Verifiable();
            _autoMocker
            .Setup <IArchiveService>(m => m.ExtractToNewDirectoryAsync(FullPath))
            .Verifiable();
            _autoMocker
            .Setup <ISystemDialogService, Task <string> >(m => m.GetDirectoryAsync(null))
            .Returns(Task.FromResult(directory));

            var viewModel = _autoMocker.CreateInstance <NodeViewModel>();

            viewModel.FullPath = FullPath;

            Assert.True(viewModel.ExtractCommand.CanExecute(command));

            viewModel.ExtractCommand.Execute(command);

            _autoMocker
            .Verify <IArchiveService>(m => m.ExtractAsync(FullPath, null),
                                      Times.Exactly(extractCallsCount));
            _autoMocker
            .Verify <IArchiveService>(m => m.ExtractAsync(FullPath, directory),
                                      Times.Exactly(extractWithDirCallsCount));
            _autoMocker
            .Verify <IArchiveService>(m => m.ExtractToNewDirectoryAsync(FullPath),
                                      Times.Exactly(extractToNewDirCount));
        }
 private Task ExtractAsync(ExtractCommandType commandType) => _fileSystemNodeFacade.ExtractAsync(commandType, FullPath);