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 ChangesPanelViewModel { 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 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 ChangesPanelViewModel { 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 ChangesPanelViewModel { 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 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 ChangesPanelViewModel(); _branchesVM = new BranchesPanelViewModel(); _unsyncedVM = new UnsyncedCommitsPanelViewModel(); _settingsVM = new SettingsPanelViewModel(_configService.Object, _folderBrowserFactory.Object, new Rubberduck.UI.OpenFileDialog()); }
public void ProviderCommitIsCalledOnCommit() { var vm = new ChangesPanelViewModel { 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 ChangesPanelViewModel { 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 ChangesPanelViewModel { 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 RefreshChangesAfterCommit() { var vm = new ChangesPanelViewModel { 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 IncludeChanges_AddsUntrackedFile() { 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 ChangesPanelViewModel { Provider = _provider.Object }; vm.IncludeChangesToolbarButtonCommand.Execute(fileStatusEntries.Last()); _provider.Verify(git => git.AddFile(fileStatusEntries.Last().FilePath)); }
public void ProviderCommits_NotificationOnSuccess() { var vm = new ChangesPanelViewModel { 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 (_locker) { MultiAssert.Aggregate( () => Assert.AreEqual(e.Title, Rubberduck.UI.RubberduckUI.SourceControl_CommitStatus), () => Assert.AreEqual(e.InnerMessage, Rubberduck.UI.RubberduckUI.SourceControl_CommitStatus_CommitSuccess), () => Assert.AreEqual(e.NotificationType, NotificationType.Info)); errorThrown = bool.TrueString; } }; vm.CommitCommand.Execute(null); lock (_locker) { Assert.IsTrue(bool.Parse(errorThrown)); } }
public void UndoFails_ActionFailedEventIsRaised() { 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 ChangesPanelViewModel { 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; vm.UndoChangesToolbarButtonCommand.Execute(fileStatusEntries[0]); Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised."); }
public void RefreshDisplaysChangedFiles() { 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 ChangesPanelViewModel { Provider = _provider.Object, CommitAction = CommitAction.CommitAndSync }; _provider.Setup(git => git.Status()).Returns(fileStatusEntries); vm.RefreshView(); Assert.AreEqual(3, vm.IncludedChanges.Count, "Incorrect Included Changes"); Assert.AreEqual(@"C:\path\to\untracked.frx", vm.UntrackedFiles[0].FilePath); }