public void GetInfoForNext15Days_ReturnsOneFreeDate()
        {
            var duwStorageStub = new Mock <IDuwStorage>();
            var mailSenderStub = new Mock <IMailSender>();
            var validDate      = DateTime.Today;

            duwStorageStub.Setup(it => it.ReadDataByDate(validDate)).Returns($"has free slot for this date {validDate}");
            var duw  = new Duw(duwStorageStub.Object, mailSenderStub.Object);
            var info = duw.GetInfoForNext15Days();

            Assert.IsTrue(info.Single(it => it.Key == validDate).Value, "Duw said that it has no free dates, but I know - it has.");
        }
        public void GetInfoForNext15Days_ReturnsResultForNext15Days()
        {
            var duwStorageStub = new Mock <IDuwStorage>();
            var mailSenderStub = new Mock <IMailSender>();
            var startDate      = DateTime.Today;
            var duw            = new Duw(duwStorageStub.Object, mailSenderStub.Object);
            var result         = duw.GetInfoForNext15Days();

            Assert.AreEqual(15, result.Length, $"Duw returned result for invalid count of days: {result.Length}");
            var onlyDates    = result.Select(it => it.Key);
            var orderedDates = onlyDates.OrderBy(it => it).ToArray();

            for (var i = 0; i < orderedDates.Length; i++)
            {
                var expectedDate = startDate.AddDays(i);
                var orderedDate  = orderedDates[i];
                Assert.AreEqual(expectedDate, orderedDate, $"Invalid date is present in returned date list: {orderedDate}");
            }
        }
        public void GetInfoForNext15Days_DuwStorageThrowsException_MailSenderSendsEmail()
        {
            var duwStorageStub = new Mock <IDuwStorage>();
            var mailSenderMock = new Mock <IMailSender>();
            var targetDate     = DateTime.Today;
            var exception      = new DuwStorageException($"Cannot get data for this date {targetDate}");

            duwStorageStub.Setup(it => it.ReadDataByDate(targetDate)).Throws(exception);
            var duw = new Duw(duwStorageStub.Object, mailSenderMock.Object);

            duw.GetInfoForNext15Days();

            mailSenderMock.Verify(it => it.SendEmail(new Message
            {
                Body      = $"Exception occured during getting info for {targetDate}. Exception: {exception}",
                Recepient = "*****@*****.**",
                Sender    = "*****@*****.**",
                Subject   = $"EXCEPTION OCCURED {DateTime.Now.ToString("g")}"
            }), Times.Once);
        }
        public void GetInfoForNext15Days_ReturnsOneDateIsUsedAllOtherAreFree()
        {
            var duwStorageStub = new Mock <IDuwStorage>();
            var mailSenderStub = new Mock <IMailSender>();
            var startDate      = DateTime.Today;

            for (var i = 0; i < 15; i++)
            {
                var currentDate = startDate.AddDays(i);
                var returnData  = $"has free slot for this date {currentDate}";
                if (i == 14)                             //The last day. Set invalid data for it.
                {
                    returnData = "brak wolnych biletów"; //PL: it means there is no free tickets.
                }
                duwStorageStub.Setup(it => it.ReadDataByDate(currentDate)).Returns(returnData);
            }
            var duw  = new Duw(duwStorageStub.Object, mailSenderStub.Object);
            var info = duw.GetInfoForNext15Days();

            Assert.IsFalse(info.Single(it => it.Key == startDate.AddDays(14)).Value, "Duw said that it has a free date for me, but this date is not free.");
        }