public void TestUpdate_WhenProjectsHaveBeenAdded_RaisesContentViewModelChanged()
        {
            var numContentViewModelChanged = 0;
            var pullRequestListViewModel   = new PullRequestListViewModel();
            var singleProjectViewModel     = new SingleProjectViewModel(pullRequestListViewModel, pullRequestListViewModel);

            singleProjectViewModel.Model = null;
            var noProjectsViewModel = Substitute.For <INoProjectsViewModel>();
            var tfProject           = Substitute.For <ITfProject>();

            tfProject.Approved.Returns(new ConcurrentDictionary <int, IPullRequest>());
            tfProject.Unapproved.Returns(new ConcurrentDictionary <int, IPullRequest>());
            _monitor.Projects.Returns(new[] { tfProject });
            _monitor.Status.Returns(MonitorStatus.UpdateSuccessful);
            var systemUnderTest = new MonitorWindowViewModel(_monitor, noProjectsViewModel, singleProjectViewModel,
                                                             new FirstUpdateViewModel(), _couldNotReachServerViewModel, new UnrecognisedErrorViewModel());

            systemUnderTest.PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == nameof(MonitorWindowViewModel.ContentViewModel))
                {
                    numContentViewModelChanged++;
                }
            };

            systemUnderTest.Update();

            Assert.That(numContentViewModelChanged, Is.EqualTo(1));
        }
        public void TestPullRequests_WhenModelHasTwo_HasTwo()
        {
            var model = new ConcurrentDictionary <int, IPullRequest>();

            model.AddOrUpdate(0, Substitute.For <IPullRequest>(), (i, request) => request);
            model.AddOrUpdate(1, Substitute.For <IPullRequest>(), (i, request) => request);
            var systemUnderTest = new PullRequestListViewModel();

            systemUnderTest.Model = model;
            systemUnderTest.Update();

            Assert.That(systemUnderTest.PullRequests.Count, Is.EqualTo(2));
        }
        public void SelectingAuthorShouldTriggerFilter()
        {
            var repositoryHost = CreateRepositoryHost();
            var repository     = Substitute.For <ILocalRepositoryModel>();
            var settings       = CreateSettings();
            var prViewModel    = new PullRequestListViewModel(repositoryHost, repository, settings);

            prViewModel.Initialize(null);
            prViewModel.PullRequests.Received(1).Filter = AnyFilter;

            prViewModel.SelectedAuthor = prViewModel.PullRequests[0].Author;
            prViewModel.PullRequests.Received(2).Filter = AnyFilter;
        }
Esempio n. 4
0
        public void SelectingAssigneeShouldTriggerFilter()
        {
            var repositoryHost = CreateRepositoryHost();
            var repository     = Substitute.For <ILocalRepositoryModel>();
            var settings       = CreateSettings();
            var browser        = Substitute.For <IVisualStudioBrowser>();
            var prViewModel    = new PullRequestListViewModel(repositoryHost, repository, settings, browser);

            prViewModel.Initialize(null);
            prViewModel.PullRequests.Received(1).Filter = AnyFilter;

            prViewModel.SelectedAssignee = prViewModel.PullRequests[0].Assignee;
            prViewModel.PullRequests.Received(2).Filter = AnyFilter;
        }
Esempio n. 5
0
        public void OpenPullRequestOnGitHubShouldOpenBrowser(string cloneUrl, int pullNumber, string expectUrl)
        {
            var repositoryHost = CreateRepositoryHost();
            var repository     = Substitute.For <ILocalRepositoryModel>();
            var settings       = CreateSettings();
            var browser        = Substitute.For <IVisualStudioBrowser>();
            var prViewModel    = new PullRequestListViewModel(repositoryHost, repository, settings, browser);

            prViewModel.SelectedRepository = Substitute.For <IRemoteRepositoryModel>();
            prViewModel.SelectedRepository.CloneUrl.Returns(new UriString(cloneUrl));

            prViewModel.OpenPullRequestOnGitHub.Execute(pullNumber);

            browser.ReceivedWithAnyArgs(1).OpenUrl(new Uri(expectUrl));
        }
Esempio n. 6
0
        public void SelectingAuthorShouldTriggerFilter()
        {
            var connection  = Substitute.For <IConnection>();
            var factory     = CreateModelServiceFactory();
            var repository  = Substitute.For <ILocalRepositoryModel>();
            var settings    = CreateSettings();
            var browser     = Substitute.For <IVisualStudioBrowser>();
            var prViewModel = new PullRequestListViewModel(factory, settings, browser);

            prViewModel.InitializeAsync(repository, connection).Wait();
            prViewModel.PullRequests.Received(1).Filter = AnyFilter;

            prViewModel.SelectedAuthor = prViewModel.PullRequests[0].Author;
            prViewModel.PullRequests.Received(2).Filter = AnyFilter;
        }
Esempio n. 7
0
        public void OpenPullRequestOnGitHubShouldOpenBrowser(string cloneUrl, int pullNumber, string expectUrl)
        {
            var connection  = Substitute.For <IConnection>();
            var factory     = CreateModelServiceFactory();
            var repository  = Substitute.For <ILocalRepositoryModel>();
            var settings    = CreateSettings();
            var browser     = Substitute.For <IVisualStudioBrowser>();
            var prViewModel = new PullRequestListViewModel(factory, settings, browser);

            prViewModel.InitializeAsync(repository, connection).Wait();
            prViewModel.SelectedRepository = Substitute.For <IRemoteRepositoryModel>();
            prViewModel.SelectedRepository.CloneUrl.Returns(new UriString(cloneUrl));

            prViewModel.OpenPullRequestOnGitHub.Execute(pullNumber);

            browser.ReceivedWithAnyArgs(1).OpenUrl(new Uri(expectUrl));
        }
        public void ResettingAuthorToNoneShouldNotTriggerFilter()
        {
            var repositoryHost = CreateRepositoryHost();
            var repository     = Substitute.For <ILocalRepositoryModel>();
            var settings       = CreateSettings();
            var prViewModel    = new PullRequestListViewModel(repositoryHost, repository, settings);

            prViewModel.Initialize(null);
            prViewModel.PullRequests.Received(1).Filter = AnyFilter;

            prViewModel.SelectedAuthor = prViewModel.PullRequests[0].Author;
            prViewModel.PullRequests.Received(2).Filter = AnyFilter;

            // Setting the Author filter to [None] should not trigger a filter:
            // doing this will remove the [None] entry from Authors, which will cause
            // the selection in the view to be set to null which will reset the filter.
            prViewModel.SelectedAuthor = prViewModel.EmptyUser;
            prViewModel.PullRequests.Received(2).Filter = AnyFilter;
        }
Esempio n. 9
0
        public void ResettingAuthorToNoneShouldNotTriggerFilter()
        {
            var connection  = Substitute.For <IConnection>();
            var factory     = CreateModelServiceFactory();
            var repository  = Substitute.For <ILocalRepositoryModel>();
            var settings    = CreateSettings();
            var browser     = Substitute.For <IVisualStudioBrowser>();
            var prViewModel = new PullRequestListViewModel(factory, settings, browser);

            prViewModel.InitializeAsync(repository, connection).Wait();
            prViewModel.PullRequests.Received(1).Filter = AnyFilter;

            prViewModel.SelectedAuthor = prViewModel.PullRequests[0].Author;
            prViewModel.PullRequests.Received(2).Filter = AnyFilter;

            // Setting the Author filter to [None] should not trigger a filter:
            // doing this will remove the [None] entry from Authors, which will cause
            // the selection in the view to be set to null which will reset the filter.
            prViewModel.SelectedAuthor = prViewModel.EmptyUser;
            prViewModel.PullRequests.Received(2).Filter = AnyFilter;
        }
        public void TestPullRequests_ReturnsPullRequestsOrderedByIdAscending()
        {
            var model  = new ConcurrentDictionary <int, IPullRequest>();
            var pr1495 = Substitute.For <IPullRequest>();

            pr1495.Id.Returns(1495);
            var pr66 = Substitute.For <IPullRequest>();

            pr66.Id.Returns(66);
            var pr3 = Substitute.For <IPullRequest>();

            pr3.Id.Returns(3);
            var pr237840 = Substitute.For <IPullRequest>();

            pr237840.Id.Returns(237840);
            var prs = new List <IPullRequest> {
                pr1495, pr66, pr3, pr237840
            };

            foreach (var pr in prs)
            {
                model.AddOrUpdate(pr.Id, pr, (i, req) => req);
            }
            var systemUnderTest = new PullRequestListViewModel {
                Model = model
            };

            systemUnderTest.Update();

            var previousId = 0;

            foreach (var prViewModel in systemUnderTest.PullRequests)
            {
                Assert.That(prViewModel.Id, Is.GreaterThan(previousId));
                previousId = prViewModel.Id;
            }
        }