public void IncludeChanges_IncludesExcludedFile() { var fileStatusEntries = new List <FileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified), new FileStatusEntry(@"C:\path\to\class.cls", FileStatus.Unaltered), new FileStatusEntry(@"C:\path\to\added.bas", FileStatus.Added | FileStatus.Modified), new FileStatusEntry(@"C:\path\to\addedUnmodified.bas", FileStatus.Added), new FileStatusEntry(@"C:\path\to\untracked.frx", FileStatus.Untracked) }; _provider.Setup(git => git.Status()).Returns(fileStatusEntries); var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitAction = CommitAction.CommitAndSync }; vm.ExcludeChangesToolbarButtonCommand.Execute(fileStatusEntries.First()); Assert.AreEqual(1, vm.ExcludedChanges.Count); vm.IncludeChangesToolbarButtonCommand.Execute(fileStatusEntries.First()); Assert.AreEqual(3, vm.IncludedChanges.Count); Assert.AreEqual(0, vm.ExcludedChanges.Count); }
public void IncludeChanges_AddsUntrackedFile() { //arrange var fileStatusEntries = new List <FileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified), new FileStatusEntry(@"C:\path\to\class.cls", FileStatus.Unaltered), new FileStatusEntry(@"C:\path\to\added.bas", FileStatus.Added | FileStatus.Modified), new FileStatusEntry(@"C:\path\to\addedUnmodified.bas", FileStatus.Added), new FileStatusEntry(@"C:\path\to\untracked.frx", FileStatus.Untracked) }; _provider.Setup(git => git.Status()).Returns(fileStatusEntries); var vm = new ChangesViewViewModel { Provider = _provider.Object }; //act vm.IncludeChangesToolbarButtonCommand.Execute(fileStatusEntries.Last()); //Assert _provider.Verify(git => git.AddFile(fileStatusEntries.Last().FilePath)); }
public void Undo_UndoesChanges() { var fileStatusEntries = new List <FileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified), new FileStatusEntry(@"C:\path\to\class.cls", FileStatus.Unaltered), new FileStatusEntry(@"C:\path\to\added.bas", FileStatus.Added | FileStatus.Modified), new FileStatusEntry(@"C:\path\to\addedUnmodified.bas", FileStatus.Added), new FileStatusEntry(@"C:\path\to\untracked.frx", FileStatus.Untracked) }; var vm = new ChangesViewViewModel { Provider = _provider.Object }; var localLocation = @"C:\users\desktop\git\"; _provider.Setup(git => git.Status()).Returns(fileStatusEntries); _provider.SetupGet(git => git.CurrentRepository).Returns(new Repository { LocalLocation = localLocation }); vm.UndoChangesToolbarButtonCommand.Execute(fileStatusEntries[0]); _provider.Verify(git => git.Undo(@"C:\users\desktop\git\module.bas")); }
public void ChangesPresenter_WhenCommitFails_ActionFailedEventIsRaised() { var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitMessage = "Test Message", CommitAction = CommitAction.Commit, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Untracked) } }; _provider.Setup(p => p.Commit(It.IsAny <string>())) .Throws( new SourceControlException("A source control exception was thrown.", new LibGit2Sharp.LibGit2SharpException("With an inner libgit2sharp exception")) ); var wasRaised = false; vm.ErrorThrown += (e, sender) => wasRaised = true; vm.CommitCommand.Execute(null); Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised."); }
public void RefreshDisplaysChangedFiles() { //arrange var fileStatusEntries = new List <FileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified), new FileStatusEntry(@"C:\path\to\class.cls", FileStatus.Unaltered), new FileStatusEntry(@"C:\path\to\added.bas", FileStatus.Added | FileStatus.Modified), new FileStatusEntry(@"C:\path\to\addedUnmodified.bas", FileStatus.Added), new FileStatusEntry(@"C:\path\to\untracked.frx", FileStatus.Untracked) }; var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitAction = CommitAction.CommitAndSync }; _provider.Setup(git => git.Status()).Returns(fileStatusEntries); //act vm.RefreshView(); //Assert Assert.AreEqual(3, vm.IncludedChanges.Count, "Incorrect Included Changes"); Assert.AreEqual(@"C:\path\to\untracked.frx", vm.UntrackedFiles[0].FilePath); }
public void InitializeMocks() { _window = Mocks.MockFactory.CreateWindowMock(); _windows = new MockWindowsCollection(new List <Window> { _window.Object }); _vbe = Mocks.MockFactory.CreateVbeMock(_windows); var mockHost = new Mock <IHostApplication>(); mockHost.SetupAllProperties(); _configService = new Mock <IConfigProvider <SourceControlSettings> >(); _configService.Setup(c => c.Create()).Returns(GetDummyConfig()); _folderBrowser = new Mock <IFolderBrowser>(); _folderBrowserFactory = new Mock <IFolderBrowserFactory>(); _folderBrowserFactory.Setup(f => f.CreateFolderBrowser(It.IsAny <string>())).Returns(_folderBrowser.Object); _folderBrowserFactory.Setup(f => f.CreateFolderBrowser(It.IsAny <string>(), false)).Returns(_folderBrowser.Object); var masterRemote = new Mock <LibGit2Sharp.Branch>(); masterRemote.SetupGet(git => git.Tip).Returns(new Mock <LibGit2Sharp.Commit>().Object); masterRemote.SetupGet(git => git.FriendlyName).Returns("master"); var initialBranch = new Branch("master", "refs/Heads/master", false, true, masterRemote.Object); _provider = new Mock <ISourceControlProvider>(); _provider.SetupGet(git => git.CurrentBranch).Returns(initialBranch); _provider.SetupGet(git => git.UnsyncedLocalCommits).Returns(new List <ICommit>()); _provider.SetupGet(git => git.UnsyncedRemoteCommits).Returns(new List <ICommit>()); _provider.Setup(git => git.InitVBAProject(It.IsAny <string>())).Returns(GetDummyRepo()); _provider.Setup(git => git.Clone(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <SecureCredentials>())).Returns(GetDummyRepo()); _provider.Setup(git => git.CurrentRepository).Returns(GetDummyRepo()); _providerFactory = new Mock <ISourceControlProviderFactory>(); _providerFactory.Setup(f => f.CreateProvider(It.IsAny <VBProject>())) .Returns(_provider.Object); _providerFactory.Setup(f => f.CreateProvider(It.IsAny <VBProject>(), It.IsAny <IRepository>(), It.IsAny <ICodePaneWrapperFactory>())) .Returns(_provider.Object); _providerFactory.Setup(f => f.CreateProvider(It.IsAny <VBProject>(), It.IsAny <IRepository>(), It.IsAny <SecureCredentials>(), It.IsAny <ICodePaneWrapperFactory>())) .Returns(_provider.Object); _changesVM = new ChangesViewViewModel(); _branchesVM = new BranchesViewViewModel(); _unsyncedVM = new UnsyncedCommitsViewViewModel(); _settingsVM = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, new Rubberduck.UI.OpenFileDialog()); }
public void InitializeMocks() { _vbe = new MockVbeBuilder() .ProjectBuilder("TestProject1", ProjectProtection.Unprotected) .AddComponent("Module1", ComponentType.StandardModule, string.Empty) .MockVbeBuilder() .Build(); _configService = new Mock <IConfigProvider <SourceControlSettings> >(); _configService.Setup(c => c.Create()).Returns(GetDummyConfig()); _folderBrowser = new Mock <IFolderBrowser>(); _folderBrowserFactory = new Mock <IFolderBrowserFactory>(); _folderBrowserFactory.Setup(f => f.CreateFolderBrowser(It.IsAny <string>())).Returns(_folderBrowser.Object); _folderBrowserFactory.Setup(f => f.CreateFolderBrowser(It.IsAny <string>(), It.IsAny <bool>())).Returns(_folderBrowser.Object); _folderBrowserFactory.Setup(f => f.CreateFolderBrowser(It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <string>())).Returns(_folderBrowser.Object); var masterRemote = new Mock <LibGit2Sharp.Branch>(); masterRemote.SetupGet(git => git.Tip).Returns(new Mock <LibGit2Sharp.Commit>().Object); masterRemote.SetupGet(git => git.FriendlyName).Returns("master"); var initialBranch = new Branch("master", "refs/Heads/master", false, true, masterRemote.Object); _provider = new Mock <ISourceControlProvider>(); _provider.SetupGet(git => git.CurrentBranch).Returns(initialBranch); _provider.SetupGet(git => git.UnsyncedLocalCommits).Returns(new List <ICommit>()); _provider.SetupGet(git => git.UnsyncedRemoteCommits).Returns(new List <ICommit>()); _provider.Setup(git => git.InitVBAProject(It.IsAny <string>())).Returns(GetDummyRepo()); _provider.Setup(git => git.Clone(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <SecureCredentials>())).Returns(GetDummyRepo()); _provider.Setup(git => git.CurrentRepository).Returns(GetDummyRepo()); _providerFactory = new Mock <ISourceControlProviderFactory>(); _providerFactory.Setup(f => f.CreateProvider(It.IsAny <IVBProject>())) .Returns(_provider.Object); _providerFactory.Setup(f => f.CreateProvider(It.IsAny <IVBProject>(), It.IsAny <IRepository>())) .Returns(_provider.Object); _providerFactory.Setup(f => f.CreateProvider(It.IsAny <IVBProject>(), It.IsAny <IRepository>(), It.IsAny <SecureCredentials>())) .Returns(_provider.Object); _changesVM = new ChangesViewViewModel(); _branchesVM = new BranchesViewViewModel(); _unsyncedVM = new UnsyncedCommitsViewViewModel(); _settingsVM = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, new Rubberduck.UI.OpenFileDialog()); }
public void ProviderCommitIsCalledOnCommit() { var vm = new ChangesViewViewModel { Provider = _provider.Object, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; vm.CommitCommand.Execute(null); _provider.Verify(git => git.Commit(It.IsAny <string>())); }
public void CommitEnabledAfterActionSelectedAndMessageEntered() { var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitMessage = "Test Message", CommitAction = CommitAction.Commit, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; Assert.IsTrue(vm.CommitCommand.CanExecute(null)); }
public void ExcludedIsNotClearedAfterRefresh() { var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitMessage = "Test Message", CommitAction = CommitAction.Commit, ExcludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; Assert.IsTrue(vm.ExcludedChanges.Any()); vm.RefreshView(); Assert.IsTrue(vm.ExcludedChanges.Any()); }
public void ProviderStagesBeforeCommit() { //arrange var vm = new ChangesViewViewModel { Provider = _provider.Object, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; //act vm.CommitCommand.Execute(null); //assert _provider.Verify(git => git.Stage(It.IsAny <IEnumerable <string> >())); _provider.Verify(git => git.Commit(It.IsAny <string>())); }
public void RefreshChangesAfterCommit() { var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitMessage = "Test Message", CommitAction = CommitAction.Commit, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; Assert.IsTrue(vm.IncludedChanges.Any()); vm.CommitCommand.Execute(null); _provider.Setup(git => git.Status()).Returns(new List <FileStatusEntry>()); Assert.IsFalse(vm.IncludedChanges.Any()); }
public void ClearCommitMessageAfterSuccessfulCommit() { //arrange var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitMessage = "Test Message", CommitAction = CommitAction.Commit, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; //act vm.CommitCommand.Execute(null); //assert Assert.AreEqual(string.Empty, vm.CommitMessage); }
public void ProviderCommits_NotificationOnSuccess() { //arrange var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitAction = CommitAction.Commit, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; var errorThrown = bool.FalseString; // need a reference type vm.ErrorThrown += (sender, e) => { lock (errorThrown) { MultiAssert.Aggregate( () => Assert.AreEqual(e.Message, Rubberduck.UI.RubberduckUI.SourceControl_CommitStatus), () => Assert.AreEqual(e.InnerMessage, Rubberduck.UI.RubberduckUI.SourceControl_CommitStatus_CommitSuccess), () => Assert.AreEqual(e.NotificationType, NotificationType.Info)); errorThrown = bool.TrueString; } }; //act vm.CommitCommand.Execute(null); //assert lock (errorThrown) { Assert.IsTrue(bool.Parse(errorThrown)); } }
public void UndoFails_ActionFailedEventIsRaised() { //arrange var wasRaised = false; var fileStatusEntries = new List <FileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified), new FileStatusEntry(@"C:\path\to\class.cls", FileStatus.Unaltered), new FileStatusEntry(@"C:\path\to\added.bas", FileStatus.Added | FileStatus.Modified), new FileStatusEntry(@"C:\path\to\addedUnmodified.bas", FileStatus.Added), new FileStatusEntry(@"C:\path\to\untracked.frx", FileStatus.Untracked) }; var vm = new ChangesViewViewModel { Provider = _provider.Object }; var localLocation = "C:\\users\\desktop\\git\\"; _provider.Setup(git => git.Status()).Returns(fileStatusEntries); _provider.SetupGet(git => git.CurrentRepository).Returns(new Repository { LocalLocation = localLocation }); _provider.Setup(p => p.Undo(It.IsAny <string>())) .Throws( new SourceControlException("A source control exception was thrown.", new LibGit2Sharp.LibGit2SharpException("With an inner libgit2sharp exception")) ); vm.ErrorThrown += (sender, error) => wasRaised = true; //act vm.UndoChangesToolbarButtonCommand.Execute(fileStatusEntries[0]); //assert Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised."); }
public void ProviderCommitsAndSyncs() { //arrange var vm = new ChangesViewViewModel { Provider = _provider.Object, CommitAction = CommitAction.CommitAndSync, IncludedChanges = new ObservableCollection <IFileStatusEntry> { new FileStatusEntry(@"C:\path\to\module.bas", FileStatus.Modified) } }; //act vm.CommitCommand.Execute(null); //assert _provider.Verify(git => git.Commit(It.IsAny <string>())); _provider.Verify(git => git.Pull()); _provider.Verify(git => git.Push()); }