public async Task ShouldThrowValidationExceptionOnModifyWhenAttendanceIdIsInvalidAndLogItAsync()
        {
            //given
            Guid           invalidAttendanceId = Guid.Empty;
            DateTimeOffset dateTime            = GetRandomDateTime();
            Attendance     randomAttendance    = CreateRandomAttendance(dateTime);
            Attendance     invalidAttendance   = randomAttendance;

            invalidAttendance.Id = invalidAttendanceId;

            var invalidAttendanceException = new InvalidAttendanceException(
                parameterName: nameof(Attendance.Id),
                parameterValue: invalidAttendance.Id);

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

            //when
            ValueTask <Attendance> modifyAttendanceTask =
                this.attendanceService.ModifyAttendanceAsync(invalidAttendance);

            //then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     modifyAttendanceTask.AsTask());

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnModifyWhenUpdatedDateIsSameAsCreatedDateAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime         = GetRandomDateTime();
            Attendance     randomAttendance = CreateRandomAttendance(dateTime);
            Attendance     inputAttendance  = randomAttendance;

            var invalidAttendanceException = new InvalidAttendanceException(
                parameterName: nameof(Attendance.UpdatedDate),
                parameterValue: inputAttendance.UpdatedDate);

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

            // when
            ValueTask <Attendance> modifyAttendanceTask =
                this.attendanceService.ModifyAttendanceAsync(inputAttendance);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     modifyAttendanceTask.AsTask());

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidationExceptionOnModifyIfStorageCreatedByNotSameAsCreatedByAndLogItAsync()
        {
            // given
            int            randomNegativeMinutes = GetNegativeRandomNumber();
            Guid           differentId           = Guid.NewGuid();
            Guid           invalidCreatedBy      = differentId;
            DateTimeOffset randomDate            = GetRandomDateTime();
            Attendance     randomAttendance      = CreateRandomAttendance(randomDate);
            Attendance     invalidAttendance     = randomAttendance;

            invalidAttendance.CreatedDate = randomDate.AddMinutes(randomNegativeMinutes);
            Attendance storageAttendance = randomAttendance.DeepClone();
            Guid       attendanceId      = invalidAttendance.Id;

            invalidAttendance.CreatedBy = invalidCreatedBy;

            var invalidAttendanceException = new InvalidAttendanceException(
                parameterName: nameof(Attendance.CreatedBy),
                parameterValue: invalidAttendance.CreatedBy);

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectAttendanceByIdAsync(attendanceId))
            .ReturnsAsync(storageAttendance);

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

            // when
            ValueTask <Attendance> modifyAttendanceTask =
                this.attendanceService.ModifyAttendanceAsync(invalidAttendance);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     modifyAttendanceTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectAttendanceByIdAsync(invalidAttendance.Id),
                                          Times.Once);

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Beispiel #4
0
        public async void ShouldThrowValidationExceptionOnCreateWhenCreatedDateIsNotRecentAndLogItAsync(
            int invallidMinutes)
        {
            // given
            DateTimeOffset dateTime         = GetRandomDateTime();
            Attendance     randomAttendance = CreateRandomAttendance(dateTime: dateTime);
            Attendance     inputAttendance  = randomAttendance;

            inputAttendance.UpdatedBy   = inputAttendance.CreatedBy;
            inputAttendance.CreatedDate = dateTime.AddMinutes(invallidMinutes);
            inputAttendance.UpdatedDate = inputAttendance.CreatedDate;
            var invalidAttendanceException = new InvalidAttendanceException();

            invalidAttendanceException.AddData(
                key: nameof(Attendance.CreatedDate),
                values: $"Date is not recent");

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

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

            // when
            ValueTask <Attendance> createAttendanceTask =
                this.attendanceService.CreateAttendanceAsync(inputAttendance);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     createAttendanceTask.AsTask());

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

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

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Beispiel #5
0
        public async void ShouldThrowValidationExceptionOnCreateWhenUpdatedDateIsNotSameToCreatedDateAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime         = GetRandomDateTime();
            Attendance     randomAttendance = CreateRandomAttendance(dateTime);
            Attendance     inputAttendance  = randomAttendance.DeepClone();

            inputAttendance.UpdatedBy   = randomAttendance.CreatedBy;
            inputAttendance.UpdatedDate = GetRandomDateTime();

            var invalidAttendanceException = new InvalidAttendanceException(
                parameterName: nameof(Attendance.UpdatedDate),
                parameterValue: inputAttendance.UpdatedDate);

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

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

            // when
            ValueTask <Attendance> createAttendanceTask =
                this.attendanceService.CreateAttendanceAsync(inputAttendance);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     createAttendanceTask.AsTask());

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

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

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

            this.dateTimeBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnCreateWhenUpdatedByIsNotSameToCreatedByAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime          = GetRandomDateTime();
            Attendance     randomAttendance  = CreateRandomAttendance(dateTime);
            Attendance     invalidAttendance = randomAttendance;

            invalidAttendance.UpdatedBy = Guid.NewGuid();

            var invalidAttendanceInputException = new InvalidAttendanceException();

            invalidAttendanceInputException.AddData(
                key: nameof(Attendance.UpdatedBy),
                values: $"Id is not the same as {nameof(Attendance.CreatedBy)}");

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceInputException);

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

            // when
            ValueTask <Attendance> createAttendanceTask =
                this.attendanceService.CreateAttendanceAsync(invalidAttendance);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     createAttendanceTask.AsTask());

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

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
Beispiel #7
0
        public async Task ShouldThrowValidationExceptionOnCreateWhenAttendanceSemesterCourseIdIsInvalidAndLogItAsync()
        {
            // given
            DateTimeOffset dateTime          = GetRandomDateTime();
            Attendance     randomAttendance  = CreateRandomAttendance(dateTime: dateTime);
            Attendance     invalidAttendance = randomAttendance;

            invalidAttendance.StudentSemesterCourseId = default;

            var invalidAttendanceException = new InvalidAttendanceException(
                parameterName: nameof(Attendance.StudentSemesterCourseId),
                parameterValue: invalidAttendance.StudentSemesterCourseId);

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

            // when
            ValueTask <Attendance> createAttendanceTask =
                this.attendanceService.CreateAttendanceAsync(invalidAttendance);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     createAttendanceTask.AsTask());

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

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

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
Beispiel #8
0
        public async Task ShouldThrowValidationExceptionOnRetrieveWhenIdIsNullAndLogItAsync()
        {
            // given
            DateTimeOffset dateTimeOffset     = GetRandomDateTime();
            Guid           randomAttendanceId = default;
            Guid           inputAttendanceId  = randomAttendanceId;

            var invalidAttendanceException = new InvalidAttendanceException(
                parameterName: nameof(Attendance.Id),
                parameterValue: inputAttendanceId);

            var expectedValidationException =
                new AttendanceValidationException(invalidAttendanceException);

            // when
            ValueTask <Attendance> retrieveAttendanceTask =
                this.attendanceService.RetrieveAttendanceByIdAsync(inputAttendanceId);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     retrieveAttendanceTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectAttendanceByIdAsync(inputAttendanceId),
                                          Times.Never);

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

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldThrowValidatonExceptionOnDeleteWhenIdIsInvalidAndLogItAsync()
        {
            // given
            Guid randomAttendanceId = default;
            Guid inputAttendanceId  = randomAttendanceId;

            var invalidAttendanceException = new InvalidAttendanceException(
                parameterName: nameof(Attendance.Id),
                parameterValue: inputAttendanceId);

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

            // when
            ValueTask <Attendance> actualAttendanceTask =
                this.attendanceService.RemoveAttendanceByIdAsync(inputAttendanceId);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() => actualAttendanceTask.AsTask());

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

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

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

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.dateTimeBrokerMock.VerifyNoOtherCalls();
        }
        public async void ShouldThrowValidationExceptionOnCreateIfAttendanceIsInvalidAndLogItAsync(
            string invalidText)
        {
            // given
            var invalidStuent = new Attendance
            {
                Notes = invalidText
            };

            var invalidAttendanceException = new InvalidAttendanceException();

            invalidAttendanceException.AddData(
                key: nameof(Attendance.Id),
                values: "Id is required");

            invalidAttendanceException.AddData(
                key: nameof(Attendance.StudentSemesterCourseId),
                values: "Id is required");

            invalidAttendanceException.AddData(
                key: nameof(Attendance.AttendanceDate),
                values: "Date is required");

            invalidAttendanceException.AddData(
                key: nameof(Attendance.Notes),
                values: "Text is required");

            invalidAttendanceException.AddData(
                key: nameof(Attendance.CreatedBy),
                values: "Id is required");

            invalidAttendanceException.AddData(
                key: nameof(Attendance.UpdatedBy),
                values: "Id is required");

            invalidAttendanceException.AddData(
                key: nameof(Attendance.CreatedDate),
                values: "Date is required");

            invalidAttendanceException.AddData(
                key: nameof(Attendance.UpdatedDate),
                values: "Date is required");

            var expectedAttendanceValidationException =
                new AttendanceValidationException(invalidAttendanceException);

            // when
            ValueTask <Attendance> createAttendanceTask =
                this.attendanceService.CreateAttendanceAsync(invalidStuent);

            // then
            await Assert.ThrowsAsync <AttendanceValidationException>(() =>
                                                                     createAttendanceTask.AsTask());

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

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

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