public void Christmas_is_only_from_December_3rd_to_December_31()
        {
            // Given
            var presenter = new DecorationsPresenter(dayUpdateMock.Object, configuration);

            DateTime November_30th = new DateTime(2015, 11, 30);
            DateTime December_1st  = new DateTime(2015, 12, 1);
            DateTime December_3rd  = new DateTime(2014, 12, 3);
            DateTime December_31st = new DateTime(2016, 12, 31);
            DateTime January_1st   = new DateTime(2016, 1, 1);

            // When, Then
            mockDotNet.Setup(m => m.Now).Returns(November_30th);
            Assert.IsFalse(presenter.IsChristmas);

            mockDotNet.Setup(m => m.Now).Returns(December_1st);
            Assert.IsFalse(presenter.IsChristmas);

            mockDotNet.Setup(m => m.Now).Returns(December_3rd);
            Assert.IsTrue(presenter.IsChristmas);

            mockDotNet.Setup(m => m.Now).Returns(December_31st);
            Assert.IsTrue(presenter.IsChristmas);

            mockDotNet.Setup(m => m.Now).Returns(January_1st);
            Assert.IsFalse(presenter.IsChristmas);
        }
        public void Easter_can_be_forced_by_a_configuration_item()
        {
            // Given
            configuration.Add(new InformationRadiatorItemConfigurationField()
            {
                ID    = "ForceEaster",
                Value = "true"
            });
            var presenter = new DecorationsPresenter(dayUpdateMock.Object, configuration);

            mockDotNet.Setup(m => m.Now).Returns(new DateTime(2015, 4, 9));

            // When, Then
            Assert.IsTrue(presenter.IsEaster);
        }
        public void Christmas_can_be_forced_by_a_configuration_item()
        {
            // Given
            configuration.Add(new InformationRadiatorItemConfigurationField()
            {
                ID    = "ForceChristmas",
                Value = "true"
            });
            var presenter = new DecorationsPresenter(dayUpdateMock.Object, configuration);

            DateTime November_30th = new DateTime(2015, 11, 30);

            mockDotNet.Setup(m => m.Now).Returns(November_30th);

            // When, Then
            Assert.IsTrue(presenter.IsChristmas);
        }
        public void The_view_is_updated_on_a_day_change()
        {
            // Given
            var presenter = new DecorationsPresenter(dayUpdateMock.Object, configuration);

            DecorationsPresenter eventPresenter = null;

            presenter.Update += (sender, e) =>
            {
                eventPresenter = sender as DecorationsPresenter;
            };

            // When
            dayUpdateMock.Raise(m => m.DayChanged += null, dayUpdateMock.Object, EventArgs.Empty);

            // Then
            Assert.AreEqual(presenter, eventPresenter, "Update event was not raised");
        }
        public void Easter_is_only_from_March_20th_to_April_8th()
        {
            // Given
            var presenter = new DecorationsPresenter(dayUpdateMock.Object, configuration);

            // When, Then
            mockDotNet.Setup(m => m.Now).Returns(new DateTime(2015, 3, 19));
            Assert.IsFalse(presenter.IsEaster);

            mockDotNet.Setup(m => m.Now).Returns(new DateTime(2015, 3, 20));
            Assert.IsTrue(presenter.IsEaster);

            mockDotNet.Setup(m => m.Now).Returns(new DateTime(2015, 4, 8));
            Assert.IsTrue(presenter.IsEaster);

            mockDotNet.Setup(m => m.Now).Returns(new DateTime(2015, 4, 9));
            Assert.IsFalse(presenter.IsEaster);
        }
        public void A_Steve_Quote_Angel_is_not_shown_if_it_is_not_Christmas()
        {
            // Given
            DateTime November_30th = new DateTime(2015, 11, 30);

            mockDotNet.Setup(m => m.Now).Returns(November_30th);

            var presenter = new DecorationsPresenter(dayUpdateMock.Object, configuration);

            bool show = true;

            presenter.SteveQuoteUpdate += (sender, e) =>
            {
                show = e.ShowSteveAngel;
            };

            // When
            fakeTimer.OnTick(times: 14);

            // Then
            Assert.IsFalse(show, "SteveQuoteUpdate event indicated that the Steve Quote Angel should be shown when it isn't Christmas");
        }
        public void A_Steve_Quote_Angel_is_shown_if_it_is_Christmas()
        {
            // Given
            DateTime December_3rd = new DateTime(2014, 12, 3);

            mockDotNet.Setup(m => m.Now).Returns(December_3rd);

            var presenter = new DecorationsPresenter(dayUpdateMock.Object, configuration);

            bool show = false;

            presenter.SteveQuoteUpdate += (sender, e) =>
            {
                show = e.ShowSteveAngel;
            };

            // When
            fakeTimer.OnTick(times: 14);

            // Then
            Assert.IsTrue(show, "SteveQuoteUpdate event did not indicate that the Steve Quote Angel should be shown during Christmas");
        }