public async Task WhenInitialJobsHaveFailedThenBuildFailedIsSent()
        {
            var messenger         = new Mock <IMessenger>();
            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Returns(
                () =>
            {
                var task = new Task <IEnumerable <JenkinsViewViewModel> >(() => this.listViews);
                task.Start();
                return(task);
            });

            var vm = new JenkinsViewsViewModel(messenger.Object, jenkinsServiceMoq.Object, new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(
                o =>
                o.Send(
                    new BuildOccured(
                        new List <JenkinsJobViewModel>
            {
                new JenkinsJobViewModel("job2", JobStatus.Failed, UrlJob2, 1234, It.IsAny <RunBuildCommand>(), It.IsAny <StopBuildCommand>(), false)
            })),
                Times.Once);
        }
        public async Task WhenLastJobsHaveFailedAndNewJobsFailedThenThereIsNewNotification()
        {
            var messenger         = new Mock <IMessenger>();
            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Returns(
                () =>
            {
                var task = new Task <IEnumerable <JenkinsViewViewModel> >(() => this.listViews);
                task.Start();
                return(task);
            });

            var vm = new JenkinsViewsViewModel(messenger.Object, jenkinsServiceMoq.Object, new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(It.IsAny <BuildOccured>()), Times.Once);

            this.jobs[1] = new JenkinsJobViewModel(this.job2.DisplayName, JobStatus.Failed, UrlJob2, this.job2.LastRanBuildNumber + 1, this.buildCommandJob2, this.stopBuildCommandJob2);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(It.IsAny <BuildOccured>()), Times.Exactly(2));
        }
        public async Task WhenInitialJobsHaveNoFailedThenNoEventIsSent()
        {
            var messenger    = new Mock <IMessenger>();
            var jenkinsViews = new List <JenkinsViewViewModel>
            {
                new JenkinsViewViewModel("view", new List <JenkinsJobViewModel>
                {
                    this.job1, new JenkinsJobViewModel("job2", JobStatus.Success, UrlJob2, 564, this.buildCommandJob2, this.stopBuildCommandJob2)
                })
            };

            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Returns(
                () =>
            {
                var task = new Task <IEnumerable <JenkinsViewViewModel> >(() => jenkinsViews);
                task.Start();
                return(task);
            });

            var vm = new JenkinsViewsViewModel(messenger.Object, jenkinsServiceMoq.Object, new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(new BuildOccured(null)), Times.Never());
        }
        public async Task WhenBreakBuildBackToNormalThenBuildBackToNormalIsSendOnce()
        {
            var messenger    = new Mock <IMessenger>();
            var jenkinsViews = new List <JenkinsViewViewModel>
            {
                new JenkinsViewViewModel("view", new List <JenkinsJobViewModel>
                {
                    new JenkinsJobViewModel("job1", JobStatus.Failed, UrlJob1, 1265, this.buildCommandJob1, this.stopBuildCommandJob1),
                    new JenkinsJobViewModel("job2", JobStatus.Failed, UrlJob2, 5454, this.buildCommandJob2, this.stopBuildCommandJob2)
                })
            };
            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Returns(
                () =>
            {
                // ReSharper disable once AccessToModifiedClosure
                var task = new Task <IEnumerable <JenkinsViewViewModel> >(() => jenkinsViews);
                task.Start();
                return(task);
            });

            var vm = new JenkinsViewsViewModel(messenger.Object, jenkinsServiceMoq.Object, new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(It.IsAny <BuildOccured>()), Times.Once);

            jenkinsViews = new List <JenkinsViewViewModel>
            {
                new JenkinsViewViewModel("view", new List <JenkinsJobViewModel>
                {
                    new JenkinsJobViewModel("job1", JobStatus.Failed, UrlJob1, 5445, this.buildCommandJob1, this.stopBuildCommandJob1),
                    new JenkinsJobViewModel("job2", JobStatus.Success, UrlJob2, 5454, this.buildCommandJob2, this.stopBuildCommandJob2)
                })
            };

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(
                o =>
                o.Send(
                    new BuildOccured(
                        new List <JenkinsJobViewModel>
            {
                new JenkinsJobViewModel("job2", JobStatus.Success, UrlJob2, 5454, this.buildCommandJob2, this.stopBuildCommandJob2, false)
            })),
                Times.Once);
            messenger.Verify(o => o.Send(It.IsAny <BuildOccured>()), Times.Exactly(2));

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(It.IsAny <BuildOccured>()), Times.Exactly(2));
        }
        public void WhenPreviousViewCommandThenLoginViewRequired()
        {
            var messenger = new Mock <IMessenger>();
            var vm        = new JenkinsViewsViewModel(
                messenger.Object,
                new Mock <IJenkinService>().Object,
                new Mock <ITimer>().Object);

            vm.Previous.Execute(null);

            messenger.Verify(o => o.Send(new LoginViewRequired(vm)));
        }
        public async Task WhenRequestFailedThenErrorMessageIsDisplayedAndIsLoadingIsFalse()
        {
            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Throws(new Exception());
            var vm = new JenkinsViewsViewModel(
                new Mock <IMessenger>().Object,
                jenkinsServiceMoq.Object,
                new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            Check.That(vm.IsErrorDisplay).IsTrue();
            Check.That(vm.IsLoading).IsFalse();
        }
        public async Task WhenChangeSincePreviousRefreshThenThereIsNewNotification()
        {
            var messenger    = new Mock <IMessenger>();
            var jenkinsViews = new List <JenkinsViewViewModel>
            {
                new JenkinsViewViewModel("view", new List <JenkinsJobViewModel>
                {
                    this.job1, new JenkinsJobViewModel("job2", JobStatus.Success, UrlJob2, 8764, this.buildCommandJob2, this.stopBuildCommandJob2)
                })
            };
            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Returns(
                () =>
            {
                // ReSharper disable once AccessToModifiedClosure
                var task = new Task <IEnumerable <JenkinsViewViewModel> >(() => jenkinsViews);
                task.Start();
                return(task);
            });

            var vm = new JenkinsViewsViewModel(messenger.Object, jenkinsServiceMoq.Object, new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(new BuildOccured(null)), Times.Never);

            jenkinsViews = new List <JenkinsViewViewModel>
            {
                new JenkinsViewViewModel("view", new List <JenkinsJobViewModel>
                {
                    new JenkinsJobViewModel("job1", JobStatus.Failed, UrlJob1, 5454, this.buildCommandJob1, this.stopBuildCommandJob1),
                    new JenkinsJobViewModel("job2", JobStatus.Success, UrlJob1, 1231, this.buildCommandJob2, this.stopBuildCommandJob2)
                })
            };

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(
                o =>
                o.Send(
                    new BuildOccured(
                        new List <JenkinsJobViewModel>
            {
                new JenkinsJobViewModel("job1", JobStatus.Failed, UrlJob1, 5454, this.buildCommandJob1, this.stopBuildCommandJob1, false)
            })),
                Times.Once);
        }
        public async Task WhenJenkinsViewsViewModelIsRefreshThenViewsAreListedAsync()
        {
            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Returns(
                () =>
            {
                var task = new Task <IEnumerable <JenkinsViewViewModel> >(() => this.listViews);
                task.Start();
                return(task);
            });
            var vm = new JenkinsViewsViewModel(
                new Mock <IMessenger>().Object,
                jenkinsServiceMoq.Object,
                new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            Check.That(vm.SelectedIndex).Equals(0);
            Check.That(vm.JenkinsViews).ContainsExactly(this.listViews);
        }
        public async Task WhenNothingChangeSincePreviousRefreshThenThereIsNoNewNotification()
        {
            var messenger         = new Mock <IMessenger>();
            var jenkinsServiceMoq = new Mock <IJenkinService>();

            jenkinsServiceMoq.Setup(o => o.Views()).Returns(
                () =>
            {
                var task = new Task <IEnumerable <JenkinsViewViewModel> >(() => this.listViews);
                task.Start();
                return(task);
            });

            var vm = new JenkinsViewsViewModel(messenger.Object, jenkinsServiceMoq.Object, new Mock <ITimer>().Object);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(It.IsAny <BuildOccured>()), Times.Once);

            await vm.RefreshJobs.ExecuteAsync(null);

            messenger.Verify(o => o.Send(It.IsAny <BuildOccured>()), Times.Once);
        }