Example #1
0
        public async Task ShouldDetectFileChangesAndCommit()
        {
            Logger.Trace("Starting ShouldDetectFileChangesAndCommit");

            try
            {
                InitializePlatformAndEnvironment(TestRepoMasterCleanSynchronized);

                using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized))
                {
                    var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent();

                    var repositoryWatcherListener = Substitute.For <IRepositoryWatcherListener>();
                    repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent);

                    repositoryWatcher.Initialize();
                    repositoryWatcher.Start();
                    repositoryWatcher.Stop();

                    try
                    {
                        var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt");

                        Logger.Trace("Issuing Changes");

                        foobarTxt.WriteAllText("foobar");
                        await TaskManager.Wait();

                        Logger.Trace("Continue test");

                        repositoryWatcher.Start();

                        watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.Reset();

                        repositoryWatcherListener.DidNotReceive().HeadChanged();
                        repositoryWatcherListener.DidNotReceive().ConfigChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
                        repositoryWatcherListener.DidNotReceive().IndexChanged();
                        repositoryWatcherListener.Received().RepositoryChanged();
                        repositoryWatcherListener.DidNotReceive().LocalBranchesChanged();
                        repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
                        repositoryWatcherListener.ClearReceivedCalls();

                        repositoryWatcher.Stop();
                        Logger.Trace("Issuing Command");

                        await GitClient.AddAll().StartAsAsync();

                        Logger.Trace("Completed Command");
                        repositoryWatcher.Start();

                        watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.Reset();

                        repositoryWatcherListener.DidNotReceive().HeadChanged();
                        repositoryWatcherListener.DidNotReceive().ConfigChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
                        repositoryWatcherListener.Received(1).IndexChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryChanged();
                        repositoryWatcherListener.DidNotReceive().LocalBranchesChanged();
                        repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
                        repositoryWatcherListener.ClearReceivedCalls();

                        repositoryWatcher.Stop();
                        Logger.Trace("Issuing Command");

                        await GitClient.Commit("Test Commit", string.Empty).StartAsAsync();

                        Logger.Trace("Completed Command");
                        repositoryWatcher.Start();

                        watcherAutoResetEvent.RepositoryCommitted.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.Reset();

                        repositoryWatcherListener.DidNotReceive().HeadChanged();
                        repositoryWatcherListener.DidNotReceive().ConfigChanged();
                        repositoryWatcherListener.Received(1).RepositoryCommitted();
                        repositoryWatcherListener.Received(1).IndexChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryChanged();
                        repositoryWatcherListener.Received(1).LocalBranchesChanged();
                        repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
                        repositoryWatcherListener.ClearReceivedCalls();
                    }
                    finally
                    {
                        repositoryWatcher.Stop();
                    }
                }
            }
            finally
            {
                Logger.Trace("Ending ShouldDetectFileChangesAndCommit");
            }
        }
Example #2
0
        public async Task ShouldDetectChangesToRemotes()
        {
            Logger.Trace("Starting ShouldDetectChangesToRemotes");

            try
            {
                InitializePlatformAndEnvironment(TestRepoMasterCleanSynchronized);

                using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized))
                {
                    var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent();

                    var repositoryWatcherListener = Substitute.For <IRepositoryWatcherListener>();
                    repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent);

                    repositoryWatcher.Initialize();
                    repositoryWatcher.Start();
                    repositoryWatcher.Stop();

                    try
                    {
                        Logger.Trace("Issuing Command");

                        await GitClient.RemoteRemove("origin").StartAsAsync();

                        await TaskManager.Wait();

                        Logger.Trace("Continue test");

                        repositoryWatcher.Start();
                        watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.Reset();

                        repositoryWatcherListener.DidNotReceive().HeadChanged();
                        repositoryWatcherListener.Received(1).ConfigChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
                        repositoryWatcherListener.DidNotReceive().IndexChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryChanged();
                        repositoryWatcherListener.DidNotReceive().LocalBranchesChanged();
                        repositoryWatcherListener.Received(1).RemoteBranchesChanged();
                        repositoryWatcherListener.ClearReceivedCalls();

                        repositoryWatcher.Stop();

                        Logger.Trace("Issuing 2nd Command");

                        await GitClient.RemoteAdd("origin", "https://github.com/EvilStanleyGoldman/IOTestsRepo.git").StartAsAsync();

                        await TaskManager.Wait();

                        Logger.Trace("Continue 2nd test");

                        repositoryWatcher.Start();
                        watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();

                        repositoryWatcherListener.DidNotReceive().HeadChanged();
                        repositoryWatcherListener.Received(1).ConfigChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
                        repositoryWatcherListener.DidNotReceive().IndexChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryChanged();
                        repositoryWatcherListener.DidNotReceive().LocalBranchesChanged();
                        repositoryWatcherListener.Received(1).RemoteBranchesChanged();
                    }
                    finally
                    {
                        repositoryWatcher.Stop();
                    }
                }
            }
            finally
            {
                Logger.Trace("Ending ShouldDetectChangesToRemotes");
            }
        }
        public async Task ShouldDetectBranchCreate()
        {
            Logger.Trace("Starting ShouldDetectBranchCreate");

            try
            {
                await Initialize(TestRepoMasterCleanSynchronized, initializeRepository : false);

                using (var repositoryWatcher = CreateRepositoryWatcher(TestRepoMasterCleanSynchronized))
                {
                    var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent();

                    var repositoryWatcherListener = Substitute.For <IRepositoryWatcherListener>();
                    repositoryWatcherListener.AttachListener(repositoryWatcher, watcherAutoResetEvent);

                    repositoryWatcher.Initialize();
                    repositoryWatcher.Start();
                    repositoryWatcher.Stop();

                    try
                    {
                        Logger.Trace("Issuing Command");

                        await GitClient.CreateBranch("feature/document2", "feature/document").StartAsAsync();

                        await TaskManager.Wait();

                        Logger.Trace("Continue test");

                        repositoryWatcher.Start();

                        watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
                        watcherAutoResetEvent.Reset();

                        repositoryWatcherListener.DidNotReceive().HeadChanged();
                        repositoryWatcherListener.DidNotReceive().ConfigChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
                        repositoryWatcherListener.DidNotReceive().IndexChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryChanged();
                        repositoryWatcherListener.Received(1).LocalBranchesChanged();
                        repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
                        repositoryWatcherListener.ClearReceivedCalls();

                        repositoryWatcher.Stop();

                        Logger.Trace("Issuing Command");

                        await GitClient.CreateBranch("feature2/document2", "feature/document").StartAsAsync();

                        await TaskManager.Wait();

                        Logger.Trace("Continue test");

                        repositoryWatcher.Start();

                        watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();

                        repositoryWatcherListener.DidNotReceive().HeadChanged();
                        repositoryWatcherListener.DidNotReceive().ConfigChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
                        repositoryWatcherListener.DidNotReceive().IndexChanged();
                        repositoryWatcherListener.DidNotReceive().RepositoryChanged();
                        repositoryWatcherListener.Received(1).LocalBranchesChanged();
                        repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
                    }
                    finally
                    {
                        repositoryWatcher.Stop();
                    }
                }
            }
            finally
            {
                Logger.Trace("Ending ShouldDetectBranchCreate");
            }
        }