상속: ViewModelBase, IControlViewModel
        public void UnsyncedPresenter_AfterRefresh_OutgoingCommitsAreDisplayed()
        {
            //Arrange
            var vm = new UnsyncedCommitsViewViewModel
            {
                Provider = _provider.Object
            };

            //Assert
            CollectionAssert.AreEquivalent(_provider.Object.UnsyncedLocalCommits.ToList(), vm.OutgoingCommits.ToList());
        }
        public void UnsyncedPresenter_AfterRefresh_ViewBranchIsCurrentBranch()
        {
            //Arrange
            var vm = new UnsyncedCommitsViewViewModel
            {
                Provider = _provider.Object
            };

            //Assert
            Assert.AreEqual(_initialBranch.Name, vm.CurrentBranch);
        }
        public void UnsyncedPresenter_OnFetch_ProviderFetches()
        {
            //Arrange
            var vm = new UnsyncedCommitsViewViewModel
            {
                Provider = _provider.Object
            };

            //Act - Simulate Fetch click
            vm.FetchCommitsCommand.Execute(null);

            //Assert
            _provider.Verify(git => git.Fetch(It.IsAny<string>()));
        }
        public void InitializeMocks()
        {
            _window = Mocks.MockFactory.CreateWindowMock();
            _windows = new MockWindowsCollection(new List<Window> { _window.Object });
            _vbe = Mocks.MockFactory.CreateVbeMock(_windows);

            _configService = new Mock<IConfigurationService<SourceControlConfiguration>>();
            _configService.Setup(c => c.LoadConfiguration()).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>())).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);
        }
        public void UnsyncedPresenter_AfterFetch_IncomingCommitsRefreshes()
        {
            //Arrange
            var vm = new UnsyncedCommitsViewViewModel
            {
                Provider = _provider.Object
            };

            _provider.SetupGet(git => git.UnsyncedRemoteCommits)
                .Returns(new List<ICommit> { new Commit("1111111", "Hosch250", "Fixed the foobarred bazzer.") });

            //Act - Simulate Fetch click
            vm.FetchCommitsCommand.Execute(null);

            //Assert
            CollectionAssert.AreEquivalent(_provider.Object.UnsyncedRemoteCommits.ToList(), vm.IncomingCommits.ToList());
        }
        public void UnsyncedPresenter_WhenSyncFails_ActionFailedEventIsRaised()
        {
            //arrange
            var wasRaised = false;
            var vm = new UnsyncedCommitsViewViewModel
            {
                Provider = _provider.Object
            };

            _provider.Setup(p => p.Pull())
                .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.SyncCommitsCommand.Execute(null);

            //assert
            Assert.IsTrue(wasRaised, "ActionFailedEvent was not raised.");
        }
        public void UnsyncedPresenter_OnSync_ProviderPullsThenPushes()
        {
            //Arrange
            var vm = new UnsyncedCommitsViewViewModel
            {
                Provider = _provider.Object
            };

            //Act
            vm.SyncCommitsCommand.Execute(null);

            //Assert
            _provider.Verify(git => git.Pull());
            _provider.Verify(git => git.Push());
        }