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; }
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; }
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)); }
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; }
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; }
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; } }