public void StartsTrueBecomesFalseWhenCompleted() { var repoSubject = new Subject <IRepositoryModel[]>(); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(repoSubject); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); Assert.False(vm.IsLoading); vm.LoadRepositoriesCommand.ExecuteAsync().Subscribe(); Assert.True(vm.IsLoading); repoSubject.OnNext(new[] { Substitute.For <IRepositoryModel>() }); repoSubject.OnNext(new[] { Substitute.For <IRepositoryModel>() }); Assert.True(vm.IsLoading); repoSubject.OnCompleted(); Assert.False(vm.IsLoading); }
public void IsTrueInitially() { var repoSubject = new Subject <IRemoteRepositoryModel>(); var connection = Substitute.For <IConnection>(); connection.HostAddress.Returns(HostAddress.GitHubDotComHostAddress); var modelService = Substitute.For <IModelService>(); modelService.GetRepositories(Arg.Any <ITrackingCollection <IRemoteRepositoryModel> >()) .Returns(x => SetupRepositories(x, repoSubject)); var modelServiceFactory = Substitute.For <IModelServiceFactory>(); modelServiceFactory.CreateBlocking(connection).Returns(modelService); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( connection, modelServiceFactory, cloneService, Substitute.For <IOperatingSystem>()); Assert.False(vm.LoadingFailed); Assert.True(vm.NoRepositoriesFound); }
public void IsInvalidWhenDestinationRepositoryExists() { var repo = Substitute.For <IRepositoryModel>(); repo.Name.Returns("bar"); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(Observable.Return(new[] { repo })); var cloneService = Substitute.For <IRepositoryCloneService>(); var os = Substitute.For <IOperatingSystem>(); var directories = Substitute.For <IDirectoryFacade>(); os.Directory.Returns(directories); directories.Exists(@"c:\foo\bar").Returns(true); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, os, Substitute.For <INotificationService>()); vm.BaseRepositoryPath = @"c:\foo"; vm.SelectedRepository = repo; Assert.Equal(ValidationStatus.Invalid, vm.BaseRepositoryPathValidator.ValidationResult.Status); }
public async Task DisplaysErrorMessageWhenExceptionOccurs() { var repositoryHost = Substitute.For <IRepositoryHost>(); var cloneService = Substitute.For <IRepositoryCloneService>(); cloneService.CloneRepository(Args.String, Args.String, Args.String) .Returns(Observable.Throw <Unit>(new InvalidOperationException("Oh my! That was bad."))); var vsServices = Substitute.For <IVSServices>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), vsServices); vm.BaseRepositoryPath = @"c:\fake"; var repository = Substitute.For <IRepositoryModel>(); repository.Name.Returns("octokit"); vm.SelectedRepository = repository; await vm.CloneCommand.ExecuteAsync(null); vsServices.Received().ShowError(@"Failed to clone the repository 'octokit' Email [email protected] if you continue to have problems."); }
static RepositoryCloneViewModel GetVM(IRepositoryHost repositoryHost, IRepositoryCloneService cloneService, IOperatingSystem os, INotificationService notificationService, IUsageTracker usageTracker) { var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, os); vm.Initialize(null); return(vm); }
public void IsTrueInitially() { var repoSubject = new Subject <IRepositoryModel[]>(); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(repoSubject); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); Assert.True(vm.NoRepositoriesFound); }
public void IsNotEnabledWhenPathIsNotValid() { var repositoryHost = Substitute.For <IRepositoryHost>(); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); vm.BaseRepositoryPath = @"c:|fake\path"; Assert.False(vm.CloneCommand.CanExecute(null)); vm.SelectedRepository = Substitute.For <IRepositoryModel>(); Assert.False(vm.CloneCommand.CanExecute(null)); }
static RepositoryCloneViewModel GetVM(IModelService modelService, IRepositoryCloneService cloneService, IOperatingSystem os) { var connection = Substitute.For <IConnection>(); connection.HostAddress.Returns(HostAddress.GitHubDotComHostAddress); var modelServiceFactory = Substitute.For <IModelServiceFactory>(); modelServiceFactory.CreateAsync(connection).Returns(modelService); var vm = new RepositoryCloneViewModel( modelServiceFactory, cloneService, os); vm.InitializeAsync(connection).Wait(); return(vm); }
public void IsEnabledWhenRepositorySelectedAndPathValid() { var repositoryHost = Substitute.For <IRepositoryHost>(); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <INotificationService>()); Assert.False(vm.CloneCommand.CanExecute(null)); vm.BaseRepositoryPath = @"c:\fake\path"; vm.SelectedRepository = Substitute.For <IRepositoryModel>(); Assert.True(vm.CloneCommand.CanExecute(null)); }
public void IsTrueInitially() { var repoSubject = new Subject <IRemoteRepositoryModel>(); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories(Arg.Any <ITrackingCollection <IRemoteRepositoryModel> >()) .Returns(x => SetupRepositories(x, repoSubject)); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>()); Assert.False(vm.LoadingFailed); Assert.True(vm.NoRepositoriesFound); }
public async Task UpdatesMetricsWhenRepositoryCloned() { var repositoryHost = Substitute.For <IRepositoryHost>(); var cloneService = Substitute.For <IRepositoryCloneService>(); var usageTracker = Substitute.For <IUsageTracker>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <INotificationService>(), usageTracker); vm.SelectedRepository = Substitute.For <IRemoteRepositoryModel>(); await vm.CloneCommand.ExecuteAsync(); usageTracker.Received().IncrementCloneCount(); }
public void IsFalseWhenLoadingReposFailsImmediately() { var repoSubject = Observable.Throw <IRepositoryModel[]>(new InvalidOperationException("Doh!")); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(repoSubject); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); vm.LoadRepositoriesCommand.ExecuteAsync().Subscribe(); Assert.True(vm.LoadingFailed); Assert.False(vm.IsLoading); }
public void IsTrueWhenLoadingCompleteNotFailedAndNoRepositories() { var repoSubject = new Subject <IRepositoryModel[]>(); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(repoSubject); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); vm.LoadRepositoriesCommand.ExecuteAsync().Subscribe(); repoSubject.OnCompleted(); Assert.True(vm.NoRepositoriesFound); }
public void IsFalseWhenFailed() { var repoSubject = new Subject <IRepositoryModel[]>(); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(repoSubject); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); vm.LoadRepositoriesCommand.ExecuteAsync().Subscribe(); repoSubject.OnError(new InvalidOperationException()); Assert.False(vm.NoRepositoriesFound); }
public void IsTrueInitially() { var repoSubject = new Subject <IRepositoryModel>(); var col = TrackingCollection.Create(repoSubject); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories(Arg.Any <ITrackingCollection <IRepositoryModel> >()).Returns(_ => col); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <INotificationService>(), Substitute.For <IUsageTracker>()); Assert.False(vm.LoadingFailed); Assert.True(vm.NoRepositoriesFound); }
public void IsTrueIfLoadingReposFails() { var repoSubject = new Subject <IRepositoryModel[]>(); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(repoSubject); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <INotificationService>()); vm.LoadRepositoriesCommand.ExecuteAsync().Subscribe(); Assert.False(vm.LoadingFailed); repoSubject.OnError(new InvalidOperationException("Doh!")); Assert.True(vm.LoadingFailed); Assert.False(vm.IsLoading); }
public async Task LoadsRepositories() { var repos = new IRepositoryModel[] { Substitute.For <IRepositoryModel>(), Substitute.For <IRepositoryModel>(), Substitute.For <IRepositoryModel>() }; var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(Observable.Return(repos)); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); await vm.LoadRepositoriesCommand.ExecuteAsync(); Assert.Equal(3, vm.FilteredRepositories.Count); }
public void IsFalseWhenLoadingAndCompletedWithRepository() { var repoSubject = new Subject <IRepositoryModel[]>(); var repositoryHost = Substitute.For <IRepositoryHost>(); repositoryHost.ModelService.GetRepositories().Returns(repoSubject); var cloneService = Substitute.For <IRepositoryCloneService>(); var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, Substitute.For <IOperatingSystem>(), Substitute.For <IVSServices>()); vm.LoadRepositoriesCommand.ExecuteAsync().Subscribe(); repoSubject.OnNext(new[] { Substitute.For <IRepositoryModel>() }); Assert.False(vm.NoRepositoriesFound); repoSubject.OnCompleted(); Assert.Equal(1, vm.FilteredRepositories.Count); Assert.False(vm.NoRepositoriesFound); }