示例#1
0
        public async Task ShouldThrowValidationExceptionOnModifyIfCalendarDoesntExistAndLogItAsync()
        {
            // given
            int            randomNegativeMinutes = GetNegativeRandomNumber();
            DateTimeOffset dateTime            = GetRandomDateTime();
            Calendar       randomCalendar      = CreateRandomCalendar(dateTime);
            Calendar       nonExistentCalendar = randomCalendar;

            nonExistentCalendar.CreatedDate = dateTime.AddMinutes(randomNegativeMinutes);
            Calendar noCalendar = null;
            var      notFoundCalendarException = new NotFoundCalendarException(nonExistentCalendar.Id);

            var expectedCalendarValidationException =
                new CalendarValidationException(notFoundCalendarException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectCalendarByIdAsync(nonExistentCalendar.Id))
            .ReturnsAsync(noCalendar);

            this.dateTimeBrokerMock.Setup(broker =>
                                          broker.GetCurrentDateTime())
            .Returns(dateTime);

            // when
            ValueTask <Calendar> modifyCalendarTask =
                this.calendarService.ModifyCalendarAsync(nonExistentCalendar);

            // then
            await Assert.ThrowsAsync <CalendarValidationException>(() =>
                                                                   modifyCalendarTask.AsTask());

            this.dateTimeBrokerMock.Verify(broker =>
                                           broker.GetCurrentDateTime(),
                                           Times.Once);

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectCalendarByIdAsync(nonExistentCalendar.Id),
                                          Times.Once);

            this.loggingBrokerMock.Verify(broker =>
                                          broker.LogError(It.Is(SameExceptionAs(
                                                                    expectedCalendarValidationException))),
                                          Times.Once);

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidatonExceptionOnDeleteWhenStorageCalendarIsInvalidAndLogItAsync()
        {
            // given
            Guid     randomCalendarId       = Guid.NewGuid();
            Guid     inputCalendarId        = randomCalendarId;
            Calendar invalidStorageCalendar = null;

            var notFoundCalendarException = new NotFoundCalendarException(inputCalendarId);

            var expectedCalendarValidationException =
                new CalendarValidationException(notFoundCalendarException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectCalendarByIdAsync(inputCalendarId))
            .ReturnsAsync(invalidStorageCalendar);

            // when
            ValueTask <Calendar> deleteCalendarByIdTask =
                this.calendarService.RemoveCalendarByIdAsync(inputCalendarId);

            // then
            await Assert.ThrowsAsync <CalendarValidationException>(() => deleteCalendarByIdTask.AsTask());

            this.loggingBrokerMock.Verify(broker =>
                                          broker.LogError(It.Is(SameExceptionAs(
                                                                    expectedCalendarValidationException))),
                                          Times.Once);

            this.dateTimeBrokerMock.Verify(broker =>
                                           broker.GetCurrentDateTime(),
                                           Times.Never);

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectCalendarByIdAsync(inputCalendarId),
                                          Times.Once);

            this.storageBrokerMock.Verify(broker =>
                                          broker.DeleteCalendarAsync(It.IsAny <Calendar>()),
                                          Times.Never);

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }