void Update_WithZeroSoccerEvents_ReturnsFalse()
        {
            // Arrange
            ISoccerEventsProvider provider = new StubZeroSoccerEventsProvider();
            ISoccerEventsStore    store    = new DummySoccerEventsStore();
            INotifier             notifier = new DummyNotifier();

            string infoEmailAddress = "*****@*****.**", infoMessage = "Soccer events processed successfully",
                   alertEmailAddress = "*****@*****.**", alertSmsNumber = "6999999999",
                   alertMessage = "ALERT! No soccer events!";

            SoccerEventsTask sut = new SoccerEventsTask(provider, store, notifier,
                                                        infoEmailAddress, infoMessage, alertEmailAddress, alertSmsNumber, alertMessage);

            bool expected = false;

            // Act
            bool actual = sut.Update();

            // Assert
            Assert.Equal(expected, actual);
        }
        void Update_WithZeroSoccerEvents_CallsNotifierSendEmailAndSendSmsUsingCorrectAlertParametersOnce()
        {
            // Arrange
            ISoccerEventsProvider provider = new StubZeroSoccerEventsProvider();
            ISoccerEventsStore    store    = new DummySoccerEventsStore();
            MockNotifier          notifier = new MockNotifier();

            string infoEmailAddress = "*****@*****.**", infoMessage = "Soccer events processed successfully",
                   alertEmailAddress = "*****@*****.**", alertSmsNumber = "6999999999",
                   alertMessage = "ALERT! No soccer events!";

            SoccerEventsTask sut = new SoccerEventsTask(provider, store, notifier,
                                                        infoEmailAddress, infoMessage, alertEmailAddress, alertSmsNumber, alertMessage);

            int expectedTimesSendEmailWasCalled = 1;
            int expectedTimesSendSmsWasCalled   = 1;

            // Act
            bool actual = sut.Update();

            // Assert
            notifier.SendEmailExpectation(alertEmailAddress, alertMessage, expectedTimesSendEmailWasCalled);
            notifier.SendSmsExpectation(alertSmsNumber, alertMessage, expectedTimesSendSmsWasCalled);
        }
        void Update_WithZeroSoccerEvents_CallsNotifierSendEmailAndSendSmsOnce()
        {
            // Arrange
            ISoccerEventsProvider provider = new StubZeroSoccerEventsProvider();
            ISoccerEventsStore    store    = new DummySoccerEventsStore();
            SpyNotifier           notifier = new SpyNotifier();

            string infoEmailAddress = "*****@*****.**", infoMessage = "Soccer events processed successfully",
                   alertEmailAddress = "*****@*****.**", alertSmsNumber = "6999999999",
                   alertMessage = "ALERT! No soccer events!";

            SoccerEventsTask sut = new SoccerEventsTask(provider, store, notifier,
                                                        infoEmailAddress, infoMessage, alertEmailAddress, alertSmsNumber, alertMessage);

            int expectedTimesSendEmailWasCalled = 1;
            int expectedTimesSendSmsWasCalled   = 1;

            // Act
            sut.Update();

            // Assert
            Assert.Equal(expectedTimesSendEmailWasCalled, notifier.NumberOfTimesSendEmailWasCalled);
            Assert.Equal(expectedTimesSendSmsWasCalled, notifier.NumberOfTimesSendSmsWasCalled);
        }