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); }
static RepositoryCloneViewModel GetVM(IRepositoryHost repositoryHost, IRepositoryCloneService cloneService, IOperatingSystem os, INotificationService notificationService, IUsageTracker usageTracker) { var vm = new RepositoryCloneViewModel( repositoryHost, cloneService, os, notificationService, usageTracker); vm.Initialize(null); return vm; }
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 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 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 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."); }
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)); }
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 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); }
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 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 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(); Received.InOrder(async () => await usageTracker.IncrementCloneCount()); }
public void IsTrueInitially() { var repoSubject = new Subject<IRemoteRepositoryModel>(); var col = TrackingCollection.Create(repoSubject); var repositoryHost = Substitute.For<IRepositoryHost>(); repositoryHost.ModelService.GetRepositories(Arg.Any<ITrackingCollection<IRemoteRepositoryModel>>()).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); }