public void NullStatus_ShouldBeIgnored()
        {
            var presenter       = new FakeMessagePresenter();
            var statusPresenter = new JobRunStatusPresenter(presenter);

            statusPresenter.BeginPresenting(JobRunStatus.Create("task"));
            presenter.Clear();

            statusPresenter.PresentAnyChangesTo(null);

            presenter.WasMessageShown.Should().BeFalse("because nothing was given to the status presenter");
        }
        public void SameMessage_ShouldNotLogAnything()
        {
            var presenter = new FakeMessagePresenter();
            var status    = JobRunStatus.Create("task");

            var statusPresenter = new JobRunStatusPresenter(presenter);

            statusPresenter.BeginPresenting(status);
            presenter.Clear();

            statusPresenter.PresentAnyChangesTo(status);

            presenter.WasMessageShown.Should().BeFalse("because no changes have been made yet");
        }
        public void MessageChange_ShouldLogMessageAfterFirstTime()
        {
            var presenter = new FakeMessagePresenter();
            var status    = JobRunStatus.Create("task");

            var statusPresenter = new JobRunStatusPresenter(presenter);

            statusPresenter.BeginPresenting(status);
            statusPresenter.PresentAnyChangesTo(status.WithDifferentMessage("another"));
            presenter.Clear();

            statusPresenter.PresentAnyChangesTo(status.WithDifferentMessage("third"));

            presenter.WasMessageShown.Should().BeTrue("because the message changed");
        }
        public void TaskStart_ShouldLogMessage()
        {
            var presenter = new FakeMessagePresenter();
            var status    = JobRunStatus.Create("task");

            var statusPresenter = new JobRunStatusPresenter(presenter);

            statusPresenter.BeginPresenting(status);

            presenter.Clear();

            var copy = status.ToRunningState(StartTime);

            statusPresenter.PresentAnyChangesTo(copy);

            presenter.WasMessageShown.Should().BeTrue("because the task started");
        }
        public void TwoMessagesInARow_ShouldNotBePresented()
        {
            var presenter = new FakeMessagePresenter();
            var status    = JobRunStatus.Create("task");

            var statusPresenter = new JobRunStatusPresenter(presenter);

            statusPresenter.BeginPresenting(status);
            var another = status.WithDifferentMessage("another");

            statusPresenter.PresentAnyChangesTo(another);
            presenter.Clear();

            statusPresenter.PresentAnyChangesTo(another);

            presenter.WasMessageShown.Should().BeFalse("because the message did not change");
        }
        public void DifferentCurrentMessage_ShouldLogMessage()
        {
            var presenter = new FakeMessagePresenter();
            var status    = JobRunStatus.Create("task");

            var statusPresenter = new JobRunStatusPresenter(presenter);

            statusPresenter.BeginPresenting(status);

            presenter.Clear();

            var copy = status.ToRunningState(StartTime);

            copy.CurrentMessage = "different message";
            statusPresenter.PresentAnyChangesTo(copy);

            presenter.WasMessageShown.Should().BeTrue("because the message changed");
            presenter.MessageShown.Should().Be($"Latest: {copy.CurrentMessage}");
        }