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.");
        }
Пример #5
0
    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));
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }