public async Task ShouldDeleteGuardianContactAsync()
        {
            // given
            GuardianContact randomGuardianContact = await PostRandomGuardianContactAsync();

            GuardianContact inputGuardianContact    = randomGuardianContact;
            GuardianContact expectedGuardianContact = inputGuardianContact;

            // when
            GuardianContact deletedGuardianContact =
                await this.otripleSApiBroker.DeleteGuardianContactByIdAsync(
                    inputGuardianContact.GuardianId,
                    inputGuardianContact.ContactId);

            ValueTask <GuardianContact> getGuardianContactByIdTask =
                this.otripleSApiBroker.GetGuardianContactByIdAsync(
                    inputGuardianContact.GuardianId,
                    inputGuardianContact.ContactId);

            // then
            deletedGuardianContact.Should().BeEquivalentTo(expectedGuardianContact);

            await Assert.ThrowsAsync <HttpResponseNotFoundException>(() =>
                                                                     getGuardianContactByIdTask.AsTask());
        }
예제 #2
0
        public async Task ShouldThrowServiceExceptionOnAddWhenExceptionOccursAndLogItAsync()
        {
            // given
            GuardianContact randomGuardianContact = CreateRandomGuardianContact();
            GuardianContact inputGuardianContact  = randomGuardianContact;
            var             exception             = new Exception();

            var expectedGuardianContactServiceException =
                new GuardianContactServiceException(exception);

            this.storageBrokerMock.Setup(broker =>
                                         broker.InsertGuardianContactAsync(inputGuardianContact))
            .ThrowsAsync(exception);

            // when
            ValueTask <GuardianContact> addGuardianContactTask =
                this.guardianContactService.AddGuardianContactAsync(inputGuardianContact);

            // then
            await Assert.ThrowsAsync <GuardianContactServiceException>(() =>
                                                                       addGuardianContactTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.InsertGuardianContactAsync(inputGuardianContact),
                                          Times.Once);

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
예제 #3
0
        public async void ShouldThrowValidationExceptionOnAddWhenGuardianContactIsNullAndLogItAsync()
        {
            // given
            GuardianContact randomGuardianContact        = default;
            GuardianContact nullGuardianContact          = randomGuardianContact;
            var             nullGuardianContactException = new NullGuardianContactException();

            var expectedGuardianContactValidationException =
                new GuardianContactValidationException(nullGuardianContactException);

            // when
            ValueTask <GuardianContact> addGuardianContactTask =
                this.guardianContactService.AddGuardianContactAsync(nullGuardianContact);

            // then
            await Assert.ThrowsAsync <GuardianContactValidationException>(() =>
                                                                          addGuardianContactTask.AsTask());

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

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
예제 #4
0
        public async void ShouldThrowValidationExceptionOnAddWhenContactIdIsInvalidAndLogItAsync()
        {
            // given
            GuardianContact randomGuardianContact = CreateRandomGuardianContact();
            GuardianContact inputGuardianContact  = randomGuardianContact;

            inputGuardianContact.ContactId = default;

            var invalidGuardianContactException = new InvalidGuardianContactException(
                parameterName: nameof(GuardianContact.ContactId),
                parameterValue: inputGuardianContact.ContactId);

            var expectedGuardianContactValidationException =
                new GuardianContactValidationException(invalidGuardianContactException);

            // when
            ValueTask <GuardianContact> addGuardianContactTask =
                this.guardianContactService.AddGuardianContactAsync(inputGuardianContact);

            // then
            await Assert.ThrowsAsync <GuardianContactValidationException>(() =>
                                                                          addGuardianContactTask.AsTask());

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

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

            this.loggingBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldGetAllGuardianContactsAsync()
        {
            // given
            var randomGuardianContacts = new List <GuardianContact>();

            for (int i = 0; i <= GetRandomNumber(); i++)
            {
                randomGuardianContacts.Add(await PostRandomGuardianContactAsync());
            }

            List <GuardianContact> inputGuardianContacts    = randomGuardianContacts;
            List <GuardianContact> expectedGuardianContacts = inputGuardianContacts.ToList();

            // when
            List <GuardianContact> actualGuardianContacts =
                await this.otripleSApiBroker.GetAllGuardianContactsAsync();

            // then
            foreach (GuardianContact expectedGuardianContact in expectedGuardianContacts)
            {
                GuardianContact actualGuardianContact =
                    actualGuardianContacts.Single(guardianContact =>
                                                  guardianContact.GuardianId == expectedGuardianContact.GuardianId &&
                                                  guardianContact.ContactId == expectedGuardianContact.ContactId);

                actualGuardianContact.Should().BeEquivalentTo(expectedGuardianContact);
                await DeleteGuardianContactAsync(actualGuardianContact);
            }
        }
        public async Task ShouldRetrieveGuardianContactById()
        {
            // given
            GuardianContact randomGuardianContact   = CreateRandomGuardianContact();
            GuardianContact storageGuardianContact  = randomGuardianContact;
            GuardianContact expectedGuardianContact = storageGuardianContact;

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectGuardianContactByIdAsync(randomGuardianContact.GuardianId, randomGuardianContact.ContactId))
            .Returns(new ValueTask <GuardianContact>(randomGuardianContact));

            // when
            GuardianContact actualGuardianContact = await
                                                    this.guardianContactService.RetrieveGuardianContactByIdAsync(
                randomGuardianContact.GuardianId, randomGuardianContact.ContactId);

            // then
            actualGuardianContact.Should().BeEquivalentTo(expectedGuardianContact);

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectGuardianContactByIdAsync(randomGuardianContact.GuardianId, randomGuardianContact.ContactId),
                                          Times.Once);

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldAddGuardianContactAsync()
        {
            // given
            GuardianContact randomGuardianContact   = CreateRandomGuardianContact();
            GuardianContact inputGuardianContact    = randomGuardianContact;
            GuardianContact storageGuardianContact  = randomGuardianContact;
            GuardianContact expectedGuardianContact = storageGuardianContact;

            this.storageBrokerMock.Setup(broker =>
                                         broker.InsertGuardianContactAsync(inputGuardianContact))
            .ReturnsAsync(storageGuardianContact);

            // when
            GuardianContact actualGuardianContact =
                await this.guardianContactService.AddGuardianContactAsync(inputGuardianContact);

            // then
            actualGuardianContact.Should().BeEquivalentTo(expectedGuardianContact);

            this.storageBrokerMock.Verify(broker =>
                                          broker.InsertGuardianContactAsync(inputGuardianContact),
                                          Times.Once);

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
예제 #8
0
 private static void ValidateGuardianContactIsNull(GuardianContact guardianContact)
 {
     if (guardianContact is null)
     {
         throw new NullGuardianContactException();
     }
 }
        public ValueTask <GuardianContact> AddGuardianContactAsync(GuardianContact guardianContact) =>
        TryCatch(async() =>
        {
            ValidateGuardianContactOnCreate(guardianContact);

            return(await this.storageBroker.InsertGuardianContactAsync(guardianContact));
        });
예제 #10
0
 private static void ValidateStorageGuardianContact
     (GuardianContact storageGuardianContact, Guid guardianId, Guid contactId)
 {
     if (storageGuardianContact == null)
     {
         throw new NotFoundGuardianContactException(guardianId, contactId);
     }
 }
        public async ValueTask <GuardianContact> DeleteGuardianContactAsync(
            GuardianContact GuardianContact)
        {
            EntityEntry <GuardianContact> GuardianContactEntityEntry =
                this.GuardianContacts.Remove(GuardianContact);

            await this.SaveChangesAsync();

            return(GuardianContactEntityEntry.Entity);
        }
        public async ValueTask <GuardianContact> InsertGuardianContactAsync(
            GuardianContact GuardianContact)
        {
            EntityEntry <GuardianContact> GuardianContactEntityEntry =
                await this.GuardianContacts.AddAsync(GuardianContact);

            await this.SaveChangesAsync();

            return(GuardianContactEntityEntry.Entity);
        }
        public ValueTask <GuardianContact> RetrieveGuardianContactByIdAsync(Guid guardianId, Guid contactId) =>
        TryCatch(async() =>
        {
            ValidateGuardianContactIdIsNull(guardianId, contactId);

            GuardianContact storageGuardianContact =
                await this.storageBroker.SelectGuardianContactByIdAsync(guardianId, contactId);

            ValidateStorageGuardianContact(storageGuardianContact, guardianId, contactId);

            return(storageGuardianContact);
        });
        public async ValueTask <GuardianContact> DeleteGuardianContactAsync(
            GuardianContact guardianContact)
        {
            using var broker = new StorageBroker(this.configuration);

            EntityEntry <GuardianContact> guardianContactEntityEntry =
                broker.GuardianContacts.Remove(entity: guardianContact);

            await broker.SaveChangesAsync();

            return(guardianContactEntityEntry.Entity);
        }
예제 #15
0
        private static void ValidateGuardianContactRequiredFields(GuardianContact guardianContact)
        {
            switch (guardianContact)
            {
            case { } when IsInvalid(guardianContact.GuardianId):
                throw new InvalidGuardianContactInputException(
                          parameterName: nameof(GuardianContact.GuardianId),
                          parameterValue: guardianContact.GuardianId);

            case { } when IsInvalid(guardianContact.ContactId):
                throw new InvalidGuardianContactInputException(
                          parameterName: nameof(GuardianContact.ContactId),
                          parameterValue: guardianContact.ContactId);
            }
        }
        public async Task ShouldThrowValidationExceptionOnRemoveWhenStorageGuardianContactIsInvalidAndLogItAsync()
        {
            // given
            DateTimeOffset  randomDateTime             = GetRandomDateTime();
            GuardianContact randomGuardianContact      = CreateRandomGuardianContact(randomDateTime);
            Guid            inputContactId             = randomGuardianContact.ContactId;
            Guid            inputGuardianId            = randomGuardianContact.GuardianId;
            GuardianContact nullStorageGuardianContact = null;

            var notFoundGuardianContactException =
                new NotFoundGuardianContactException(inputGuardianId, inputContactId);

            var expectedSemesterCourseValidationException =
                new GuardianContactValidationException(notFoundGuardianContactException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectGuardianContactByIdAsync(inputGuardianId, inputContactId))
            .ReturnsAsync(nullStorageGuardianContact);

            // when
            ValueTask <GuardianContact> removeGuardianContactTask =
                this.guardianContactService.RemoveGuardianContactByIdAsync(inputGuardianId, inputContactId);

            // then
            await Assert.ThrowsAsync <GuardianContactValidationException>(() =>
                                                                          removeGuardianContactTask.AsTask());

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

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

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

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
        }
        public async Task ShouldPostGuardianContactAsync()
        {
            // given
            GuardianContact randomGuardianContact = await CreateRandomGuardianContactAsync();

            GuardianContact inputGuardianContact    = randomGuardianContact;
            GuardianContact expectedGuardianContact = inputGuardianContact;

            // when
            await this.otripleSApiBroker.PostGuardianContactAsync(inputGuardianContact);

            GuardianContact actualGuardianContact =
                await this.otripleSApiBroker.GetGuardianContactByIdAsync(
                    inputGuardianContact.GuardianId,
                    inputGuardianContact.ContactId);

            // then
            actualGuardianContact.Should().BeEquivalentTo(expectedGuardianContact);
            await DeleteGuardianContactAsync(actualGuardianContact);
        }
        public async Task ShouldRemoveGuardianContactAsync()
        {
            // given
            var             randomGuardianId      = Guid.NewGuid();
            var             randomContactId       = Guid.NewGuid();
            Guid            inputGuardianId       = randomGuardianId;
            Guid            inputContactId        = randomContactId;
            DateTimeOffset  inputDateTime         = GetRandomDateTime();
            GuardianContact randomGuardianContact = CreateRandomGuardianContact(inputDateTime);

            randomGuardianContact.GuardianId = inputGuardianId;
            randomGuardianContact.ContactId  = inputContactId;
            GuardianContact storageGuardianContact  = randomGuardianContact;
            GuardianContact expectedGuardianContact = storageGuardianContact;

            this.storageBrokerMock.Setup(broker =>
                                         broker.SelectGuardianContactByIdAsync(inputGuardianId, inputContactId))
            .ReturnsAsync(storageGuardianContact);

            this.storageBrokerMock.Setup(broker =>
                                         broker.DeleteGuardianContactAsync(storageGuardianContact))
            .ReturnsAsync(expectedGuardianContact);

            // when
            GuardianContact actualGuardianContact =
                await this.guardianContactService.RemoveGuardianContactByIdAsync(inputGuardianId, inputContactId);

            // then
            actualGuardianContact.Should().BeEquivalentTo(expectedGuardianContact);

            this.storageBrokerMock.Verify(broker =>
                                          broker.SelectGuardianContactByIdAsync(inputGuardianId, inputContactId),
                                          Times.Once);

            this.storageBrokerMock.Verify(broker =>
                                          broker.DeleteGuardianContactAsync(storageGuardianContact),
                                          Times.Once);

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.storageBrokerMock.VerifyNoOtherCalls();
        }
예제 #19
0
        public async void ShouldThrowValidationExceptionOnAddWhenReferneceExceptionAndLogItAsync()
        {
            // given
            GuardianContact randomGuardianContact  = CreateRandomGuardianContact();
            GuardianContact invalidGuardianContact = randomGuardianContact;
            string          randomMessage          = GetRandomMessage();
            string          exceptionMessage       = randomMessage;
            var             foreignKeyConstraintConflictException = new ForeignKeyConstraintConflictException(exceptionMessage);

            var invalidGuardianContactReferenceException =
                new InvalidGuardianContactReferenceException(foreignKeyConstraintConflictException);

            var expectedGuardianContactValidationException =
                new GuardianContactValidationException(invalidGuardianContactReferenceException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.InsertGuardianContactAsync(invalidGuardianContact))
            .ThrowsAsync(foreignKeyConstraintConflictException);

            // when
            ValueTask <GuardianContact> addGuardianContactTask =
                this.guardianContactService.AddGuardianContactAsync(invalidGuardianContact);

            // then
            await Assert.ThrowsAsync <GuardianContactValidationException>(() =>
                                                                          addGuardianContactTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.InsertGuardianContactAsync(invalidGuardianContact),
                                          Times.Once);

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
        }
예제 #20
0
        public async void ShouldThrowValidationExceptionOnAddWhenGuardianContactAlreadyExistsAndLogItAsync()
        {
            // given
            GuardianContact randomGuardianContact        = CreateRandomGuardianContact();
            GuardianContact alreadyExistsGuardianContact = randomGuardianContact;
            string          randomMessage         = GetRandomMessage();
            string          exceptionMessage      = randomMessage;
            var             duplicateKeyException = new DuplicateKeyException(exceptionMessage);

            var alreadyExistsGuardianContactException =
                new AlreadyExistsGuardianContactException(duplicateKeyException);

            var expectedGuardianContactValidationException =
                new GuardianContactValidationException(alreadyExistsGuardianContactException);

            this.storageBrokerMock.Setup(broker =>
                                         broker.InsertGuardianContactAsync(alreadyExistsGuardianContact))
            .ThrowsAsync(duplicateKeyException);

            // when
            ValueTask <GuardianContact> addGuardianContactTask =
                this.guardianContactService.AddGuardianContactAsync(alreadyExistsGuardianContact);

            // then
            await Assert.ThrowsAsync <GuardianContactValidationException>(() =>
                                                                          addGuardianContactTask.AsTask());

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

            this.storageBrokerMock.Verify(broker =>
                                          broker.InsertGuardianContactAsync(alreadyExistsGuardianContact),
                                          Times.Once);

            this.storageBrokerMock.VerifyNoOtherCalls();
            this.loggingBrokerMock.VerifyNoOtherCalls();
        }
예제 #21
0
 public async ValueTask <GuardianContact> PostGuardianContactAsync(GuardianContact guardian) =>
 await this.apiFactoryClient.PostContentAsync(GuardianContactsRelativeUrl, guardian);
예제 #22
0
 private static void ValidateGuardianContactOnCreate(GuardianContact guardianContact)
 {
     ValidateGuardianContactIsNull(guardianContact);
     ValidateGuardianContactRequiredFields(guardianContact);
 }