public void ShouldSwitchSettingsChangedWhenCollectionIsUpdated()
        {
            var vm = new SettingsViewViewModel();

            vm.Launchers.Add(new LauncherViewModel());
            vm.Repositories.Add(new RepositoryViewModel());

            // Editing a repo should switch
            vm.SettingsChanged      = false;
            vm.Repositories[0].Path = "Leia, you were soooo pretty";
            Assert.That(vm.SettingsChanged, Is.True);

            // Adding a repo should switch
            vm.SettingsChanged = false;
            vm.Repositories.Add(new RepositoryViewModel());
            Assert.That(vm.SettingsChanged, Is.True);

            // Removing a repo should switch
            vm.SettingsChanged = false;
            vm.Repositories.RemoveAt(0);
            Assert.That(vm.SettingsChanged, Is.True);

            // Excluding a launcher should switch
            vm.SettingsChanged     = false;
            vm.Launchers[0].Active = !vm.Launchers[0].Active;
            Assert.That(vm.SettingsChanged, Is.True);
        }
        public void ConfigIsSavedOnSave()
        {
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, _openFileDialog.Object);

            //simulate Update button click
            vm.UpdateSettingsCommand.Execute(null);

            _configService.Verify(s => s.Save(_config));
        }
        public void ViewIsPopulatedOnRefresh()
        {
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, _openFileDialog.Object);

            vm.RefreshView();

            Assert.AreEqual(Name, vm.UserName, "Name");
            Assert.AreEqual(Email, vm.EmailAddress, "Email");
            Assert.AreEqual(RepoLocation, vm.DefaultRepositoryLocation, "Default Repo Location");
            Assert.AreEqual(CommandPromptLocation, vm.CommandPromptLocation, "Command Prompt Location");
        }
        public void ShouldInitializeRepositoriesWhenLoaded()
        {
            var context =
                new OneLaunchContextMock().WithUserSettings(new UserSettings()
            {
                Repositories =
                    new Dictionary <string, List <Repository> >()
                {
                    {
                        "REPO1", new List <Repository>()
                        {
                            new Repository()
                            {
                                Path = "Path1", Name = "Name1"
                            },
                            new Repository()
                            {
                                Path = "Path2", Name = "Name2"
                            }
                        }
                    },
                    {
                        "REPO2", new List <Repository>()
                        {
                            new Repository()
                            {
                                Path = "Path3", Name = "Name3"
                            },
                        }
                    }
                }
            });

            var vm = new SettingsViewViewModel()
            {
                Context = context
            };

            Assert.That(vm.Repositories, Has.Count.EqualTo(0));
            Assert.That(vm.SettingsChanged, Is.False);

            vm.LoadedCommand.Execute(null);

            WaitUtils.WaitFor(() => vm.Repositories.Count == 3, 10);

            // The repository dico should have been flatten
            Assert.That(vm.Repositories, Has.Count.EqualTo(3));
            AssertRepositoryViewModel(vm.Repositories[0], "REPO1", "Name1", "Path1");
            AssertRepositoryViewModel(vm.Repositories[1], "REPO1", "Name2", "Path2");
            AssertRepositoryViewModel(vm.Repositories[2], "REPO2", "Name3", "Path3");

            Assert.That(vm.SettingsChanged, Is.False);
        }
Exemple #5
0
        public void ConfigIsSavedOnSave()
        {
            //arrange
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object);

            //act
            //simulate Update button click
            vm.UpdateSettingsCommand.Execute(null);

            //assert
            _configService.Verify(s => s.SaveConfiguration(_config));
        }
        public void ViewIsPopulatedOnRefresh()
        {
            //arrange
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object);

            //act
            vm.RefreshView();

            //assert
            Assert.AreEqual(Name, vm.UserName, "Name");
            Assert.AreEqual(Email, vm.EmailAddress, "Email");
            Assert.AreEqual(RepoLocation, vm.DefaultRepositoryLocation, "Default Repo Location");
        }
        public void ShouldInitializeLaunchersWhenLoaded()
        {
            var context =
                new OneLaunchContextMock().WithUserSettings(new UserSettings()
            {
                ExcludedLauncherFilePaths = new List <string>()
                {
                    "Path1",
                    "OldPath"     // This one does not exist any more (it's not part of the discovered launchers)
                }
            });

            var loader = new Mock <IConfigurationLoader>(MockBehavior.Strict);

            loader.Setup(mock => mock.DiscoverFiles(Environment.CurrentDirectory))
            .Returns(new[]
            {
                new DiscoveredLauncher()
                {
                    FilePath = "Path1"
                },                                                   // Is in the exclusion list, so will be excluded
                new DiscoveredLauncher()
                {
                    FilePath = "Path2"
                }                                                   // Is not in the list, so will be active
            })
            .Verifiable();

            var vm = new SettingsViewViewModel()
            {
                Context = context,
                Loader  = loader.Object
            };

            Assert.That(vm.Repositories, Has.Count.EqualTo(0));
            Assert.That(vm.SettingsChanged, Is.False);

            vm.LoadedCommand.Execute(null);

            WaitUtils.WaitFor(() => vm.Launchers.Count == 2, 10);

            // This file was excluded, according to the settings
            Assert.That(vm.Launchers[0].Path, Is.EqualTo("Path1"));
            Assert.That(vm.Launchers[0].Active, Is.False);

            // It was not in the user settings, so we'll suppose it's active
            Assert.That(vm.Launchers[1].Path, Is.EqualTo("Path2"));
            Assert.That(vm.Launchers[1].Active, Is.True);

            loader.VerifyAll();
        }
        public void OnBrowseCommandPromptLocation_WhenUserConfirms_ViewMatchesSelectedPath()
        {
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, _openFileDialog.Object)
            {
                CommandPromptLocation = CommandPromptLocation
            };

            _openFileDialog.Setup(o => o.FileName).Returns(OtherCommandPromptLocation);
            _openFileDialog.Setup(o => o.ShowDialog()).Returns(DialogResult.OK);

            vm.ShowCommandPromptExePickerCommand.Execute(null);

            Assert.AreEqual(_openFileDialog.Object.FileName, vm.CommandPromptLocation);
        }
        public void OnBrowseCommandPromptLocation_WhenUserCancels_ViewRemainsUnchanged()
        {
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, _openFileDialog.Object)
            {
                CommandPromptLocation = CommandPromptLocation
            };

            _openFileDialog.Setup(o => o.FileName).Returns(OtherCommandPromptLocation);
            _openFileDialog.Setup(o => o.ShowDialog()).Returns(DialogResult.Cancel);

            vm.ShowDefaultRepoFolderPickerCommand.Execute(null);

            Assert.AreEqual(CommandPromptLocation, vm.CommandPromptLocation);
        }
        public void OnBrowseDefaultRepoLocation_WhenUserCancels_ViewRemainsUnchanged()
        {
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, _openFileDialog.Object)
            {
                DefaultRepositoryLocation = RepoLocation
            };

            _folderBrowser.Object.SelectedPath = OtherRepoLocation;
            _folderBrowser.Setup(f => f.ShowDialog()).Returns(DialogResult.Cancel);

            vm.ShowDefaultRepoFolderPickerCommand.Execute(null);

            Assert.AreEqual(RepoLocation, vm.DefaultRepositoryLocation);
        }
        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());
        }
Exemple #12
0
        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 ShouldExtractLauncherPathsWhenSavingSettings()
        {
            var settings = new UserSettings()
            {
                Repositories = null
            };

            var context = new Mock <IOneLauncherContext>(MockBehavior.Strict);

            context.SetupGet(mock => mock.UserSettings)
            .Returns(settings)
            .Verifiable();
            context.Setup(mock => mock.SaveUserSettings())
            .Verifiable();

            var vm = new SettingsViewViewModel
            {
                Context   = context.Object,
                Launchers = new TrulyObservableCollection <LauncherViewModel>()
                {
                    new LauncherViewModel()
                    {
                        Active = true, // It's active, so we will not persist it in the settings
                        InnerDiscoveredLauncher = new DiscoveredLauncher()
                        {
                            FilePath = "Path1"
                        }
                    },
                    new LauncherViewModel()
                    {
                        Active = false, // The user specified that it should be excluded, so we will store it in the settings
                        InnerDiscoveredLauncher = new DiscoveredLauncher()
                        {
                            FilePath = "Path2"
                        }
                    }
                }
            };

            vm.SaveSettingsCommand.Execute(null);

            var actual = settings.ExcludedLauncherFilePaths;

            Assert.That(actual, Is.Not.Null);
            Assert.That(actual, Is.EquivalentTo(new[] { "Path2" }));

            context.VerifyAll();
        }
Exemple #14
0
        public void OnBrowseDefaultRepoLocation_WhenUserConfirms_ViewMatchesSelectedPath()
        {
            //arrange
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, _openFileDialog.Object)
            {
                DefaultRepositoryLocation = RepoLocation
            };
            _folderBrowser.Object.SelectedPath = OtherRepoLocation;
            _folderBrowser.Setup(f => f.ShowDialog()).Returns(DialogResult.OK);
            
            //act
            vm.ShowDefaultRepoFolderPickerCommand.Execute(null);

            //assert
            Assert.AreEqual(_folderBrowser.Object.SelectedPath, vm.DefaultRepositoryLocation);
        }
        public void ConfigIsPopulatedFromViewOnSave()
        {
            //arrange
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object);

            //simulate user input
            vm.UserName     = OtherName;
            vm.EmailAddress = OtherEmail;
            vm.DefaultRepositoryLocation = OtherRepoLocation;

            //simulate Update button click
            vm.UpdateSettingsCommand.Execute(null);

            //assert
            Assert.AreEqual(OtherName, _config.UserName, "Name");
            Assert.AreEqual(OtherEmail, _config.EmailAddress, "Email");
            Assert.AreEqual(OtherRepoLocation, _config.DefaultRepositoryLocation, "Default Repo Location");
        }
        public void ChangesToViewAreRevertedOnCancel()
        {
            var vm = new SettingsViewViewModel(_configService.Object, _folderBrowserFactory.Object, _openFileDialog.Object);

            //simulate user input
            vm.UserName     = OtherName;
            vm.EmailAddress = OtherEmail;
            vm.DefaultRepositoryLocation = OtherRepoLocation;
            vm.DefaultRepositoryLocation = OtherCommandPromptLocation;

            //simulate Cancel button click
            vm.CancelSettingsChangesCommand.Execute(null);

            Assert.AreEqual(Name, vm.UserName, "Name");
            Assert.AreEqual(Email, vm.EmailAddress, "Email");
            Assert.AreEqual(RepoLocation, vm.DefaultRepositoryLocation, "Default Repo Location");
            Assert.AreEqual(CommandPromptLocation, vm.CommandPromptLocation, "Command Prompt Location");
        }
        public void ShouldBuildProperDictionaryWhenSavingSettings()
        {
            var settings = new UserSettings()
            {
                Repositories = null
            };

            var context = new Mock <IOneLauncherContext>(MockBehavior.Strict);

            context.SetupGet(mock => mock.UserSettings)
            .Returns(settings)
            .Verifiable();
            context.Setup(mock => mock.SaveUserSettings())
            .Verifiable();

            var vm = new SettingsViewViewModel
            {
                Context      = context.Object,
                Repositories = new TrulyObservableCollection <RepositoryViewModel>()
                {
                    new RepositoryViewModel()
                    {
                        Type = "REPO1", Name = "Name1", Path = "Path1"
                    },
                    new RepositoryViewModel()
                    {
                        Type = "REPO2", Name = "Name2", Path = "Path2"
                    },                                                                          // New repo, should be on its own in the dico
                    new RepositoryViewModel()
                    {
                        Type = "REPO1", Name = "Name3", Path = "Path3"
                    }                                                                          // Should be grouped with first row
                }
            };

            vm.SaveSettingsCommand.Execute(null);

            var actual = settings.Repositories;

            Assert.That(actual, Is.Not.Null);
            Assert.That(actual, Has.Count.EqualTo(2));
            Assert.That(actual.ContainsKey("REPO1"), Is.True);

            var repo1 = actual["REPO1"];

            Assert.That(repo1, Is.Not.Null);
            Assert.That(repo1, Has.Count.EqualTo(2));
            Assert.That(repo1[0].Name, Is.EqualTo("Name1"));
            Assert.That(repo1[0].Path, Is.EqualTo("Path1"));
            Assert.That(repo1[1].Name, Is.EqualTo("Name3"));
            Assert.That(repo1[1].Path, Is.EqualTo("Path3"));

            var repo2 = actual["REPO2"];

            Assert.That(repo2, Is.Not.Null);
            Assert.That(repo2, Has.Count.EqualTo(1));
            Assert.That(repo2[0].Name, Is.EqualTo("Name2"));
            Assert.That(repo2[0].Path, Is.EqualTo("Path2"));

            context.VerifyAll();
        }