Пример #1
0
        public async Task <IActionResult> UpdateContact(ContactViewModel contactViewModel)
        {
            NullGuard.NotNull(contactViewModel, nameof(contactViewModel));

            IRefreshableToken token = await _tokenHelperFactory.GetTokenAsync <IRefreshableToken>(TokenType.MicrosoftGraphToken, HttpContext);

            if (token == null)
            {
                return(Unauthorized());
            }

            if (ModelState.IsValid == false)
            {
                return(RedirectToAction("Contacts", "Contact", new { contactViewModel.ExternalIdentifier }));
            }

            IUpdateContactCommand updateContactCommand = _contactViewModelConverter.Convert <ContactViewModel, UpdateContactCommand>(contactViewModel);

            updateContactCommand.TokenType    = token.TokenType;
            updateContactCommand.AccessToken  = token.AccessToken;
            updateContactCommand.RefreshToken = token.RefreshToken;
            updateContactCommand.Expires      = token.Expires;

            await _commandBus.PublishAsync(updateContactCommand);

            return(RedirectToAction("Contacts", "Contact", new { contactViewModel.ExternalIdentifier }));
        }
        public void Validate_WhenAccountingRepositoryIsNull_ThrowsArgumentNullException()
        {
            IUpdateContactCommand sut = CreateSut();

            ArgumentNullException result = Assert.Throws <ArgumentNullException>(() => sut.Validate(_validatorMockContext.ValidatorMock.Object, _microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object, null));

            Assert.That(result.ParamName, Is.EqualTo("accountingRepository"));
        }
        public void Validate_WhenCalled_ReturnsValidator()
        {
            IUpdateContactCommand sut = CreateSut();

            IValidator result = sut.Validate(_validatorMockContext.ValidatorMock.Object, _microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object, _accountingRepositoryMock.Object);

            Assert.That(result, Is.EqualTo(_validatorMockContext.ValidatorMock.Object));
        }
        public void ToDomain_WhenCalled_ReturnsContactWithoutInternalIdentifier()
        {
            IUpdateContactCommand sut = CreateSut();

            string result = sut.ToDomain(_contactRepositoryMock.Object, _accountingRepositoryMock.Object).InternalIdentifier;

            Assert.That(result, Is.Null);
        }
        public void ToDomain_WhenAccountingRepositoryIsNull_ThrowsArgumentNullException()
        {
            IUpdateContactCommand sut = CreateSut();

            ArgumentNullException result = Assert.Throws <ArgumentNullException>(() => sut.ToDomain(_contactRepositoryMock.Object, null));

            Assert.That(result.ParamName, Is.EqualTo("accountingRepository"));
        }
Пример #6
0
        public async Task GetExistingContactAsync_WhenCalledAndNoContactWasReturnedFromMicrosoftGraphRepository_ReturnsNull()
        {
            IUpdateContactCommand sut = CreateSut(hasMicrosoftGraphContact: false);

            IContact result = await sut.GetExistingContactAsync(_microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object);

            Assert.That(result, Is.Null);
        }
Пример #7
0
        public async Task GetExistingContactAsync_WhenCalledAndNoContactWasReturnedFromMicrosoftGraphRepository_AssertApplyContactSupplementAsyncWasNotCalledOnContactRepository()
        {
            IUpdateContactCommand sut = CreateSut(hasMicrosoftGraphContact: false);

            await sut.GetExistingContactAsync(_microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object);

            _contactRepositoryMock.Verify(m => m.ApplyContactSupplementAsync(It.IsAny <IContact>()), Times.Never);
        }
Пример #8
0
        public void GetExistingContactAsync_WhenContactRepositoryIsNull_ThrowsArgumentNullException()
        {
            IUpdateContactCommand sut = CreateSut();

            ArgumentNullException result = Assert.ThrowsAsync <ArgumentNullException>(async() => await sut.GetExistingContactAsync(_microsoftGraphRepositoryMock.Object, null));

            Assert.That(result.ParamName, Is.EqualTo("contactRepository"));
        }
        public void ToDomain_WhenCalled_ReturnsContact()
        {
            IUpdateContactCommand sut = CreateSut();

            IContact result = sut.ToDomain(_contactRepositoryMock.Object, _accountingRepositoryMock.Object);

            Assert.That(result, Is.TypeOf <Contact>());
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndNoExistingContactWasReturnedFromCommand_AssertUpdateContactAsyncWasNotCalledOnMicrosoftGraphRepository()
        {
            CommandHandler sut = CreateSut();

            IUpdateContactCommand command = CreateUpdateContactCommandMock(hasExistingContact: false).Object;
            await sut.ExecuteAsync(command);

            _microsoftGraphRepositoryMock.Verify(m => m.UpdateContactAsync(It.IsAny <IRefreshableToken>(), It.IsAny <IContact>()), Times.Never());
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommandAndNoUpdatedContactWasReturnedFromMicrosoftGraphRepository_AssertCreateOrUpdateContactSupplementAsyncWasNotCalledOnContactRepository()
        {
            CommandHandler sut = CreateSut(false);

            IUpdateContactCommand command = CreateUpdateContactCommandMock().Object;
            await sut.ExecuteAsync(command);

            _contactRepositoryMock.Verify(m => m.CreateOrUpdateContactSupplementAsync(It.IsAny <IContact>(), It.IsAny <string>()), Times.Never());
        }
        public void ToDomain_WhenCalled_ReturnsContactWithExternalIdentifierFromCommand()
        {
            string externalIdentifier = _fixture.Create <string>();
            IUpdateContactCommand sut = CreateSut(externalIdentifier);

            string result = sut.ToDomain(_contactRepositoryMock.Object, _accountingRepositoryMock.Object).ExternalIdentifier;

            Assert.That(result, Is.EqualTo(externalIdentifier));
        }
        public async Task ExecuteAsync_WhenCalledAndCommandDoesNotHaveExternalIdentifier_AssertCreateOrUpdateContactSupplementAsyncWasNotCalledOnContactRepository()
        {
            CommandHandler sut = CreateSut();

            IUpdateContactCommand command = CreateUpdateContactCommandMock(false).Object;
            await sut.ExecuteAsync(command);

            _contactRepositoryMock.Verify(m => m.CreateOrUpdateContactSupplementAsync(It.IsAny <IContact>(), It.IsAny <string>()), Times.Never());
        }
Пример #14
0
        public async Task GetExistingContactAsync_WhenCalledAndContactWasReturnedFromMicrosoftGraphRepository_ReturnAppliedContactSupplementFromContactRepository()
        {
            IContact appliedContactSupplement = _fixture.BuildContactMock().Object;
            IUpdateContactCommand sut         = CreateSut(appliedContactSupplement: appliedContactSupplement);

            IContact result = await sut.GetExistingContactAsync(_microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object);

            Assert.That(result, Is.EqualTo(appliedContactSupplement));
        }
Пример #15
0
        public async Task GetExistingContactAsync_WhenCalledAndContactWasReturnedFromMicrosoftGraphRepository_AssertApplyContactSupplementAsyncWasCalledOnContactRepositoryWithContactFromMicrosoftGraphRepository()
        {
            IContact microsoftGraphContact = _fixture.BuildContactMock().Object;
            IUpdateContactCommand sut      = CreateSut(microsoftGraphContact: microsoftGraphContact);

            await sut.GetExistingContactAsync(_microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object);

            _contactRepositoryMock.Verify(m => m.ApplyContactSupplementAsync(It.Is <IContact>(value => value == microsoftGraphContact)), Times.Once);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandDoesNotHaveExternalIdentifier_AssertExternalIdentifierWasNotCalledOnUpdatedContactFromMicrosoftGraphRepository()
        {
            Mock <IContact> updatedMicrosoftGraphContactMock = _fixture.BuildContactMock();
            CommandHandler  sut = CreateSut(updatedMicrosoftGraphContact: updatedMicrosoftGraphContactMock.Object);

            IUpdateContactCommand command = CreateUpdateContactCommandMock(false).Object;
            await sut.ExecuteAsync(command);

            updatedMicrosoftGraphContactMock.Verify(m => m.ExternalIdentifier, Times.Never);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandDoesNotHaveExternalIdentifier_AssertInternalIdentifierSetterWasNotCalledOnContactFromToDomainOnCommand()
        {
            CommandHandler sut = CreateSut();

            Mock <IContact>       toDomainContactMock = _fixture.BuildContactMock();
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(false, toDomainContactMock.Object).Object;
            await sut.ExecuteAsync(command);

            toDomainContactMock.VerifySet(m => m.InternalIdentifier = It.IsAny <string>(), Times.Never);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandDoesNotHaveExternalIdentifier_AssertInternalIdentifierWasNotCalledOnExistingContactFromCommand()
        {
            CommandHandler sut = CreateSut();

            Mock <IContact>       existingContactMock = _fixture.BuildContactMock();
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(false, existingContact: existingContactMock.Object).Object;
            await sut.ExecuteAsync(command);

            existingContactMock.Verify(m => m.InternalIdentifier, Times.Never);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommandAndUpdatedContactWasReturnedFromMicrosoftGraphRepository_AssertExternalIdentifierWasCalledOnUpdatedContactFromMicrosoftGraphRepository()
        {
            Mock <IContact> updatedMicrosoftGraphContactMock = _fixture.BuildContactMock();
            CommandHandler  sut = CreateSut(updatedMicrosoftGraphContact: updatedMicrosoftGraphContactMock.Object);

            IUpdateContactCommand command = CreateUpdateContactCommandMock().Object;
            await sut.ExecuteAsync(command);

            updatedMicrosoftGraphContactMock.Verify(m => m.ExternalIdentifier, Times.Once);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommandAndNoUpdatedContactWasReturnedFromMicrosoftGraphRepository_AssertExternalIdentifierWasNotCalledOnExistingContactFromCommand()
        {
            CommandHandler sut = CreateSut(false);

            Mock <IContact>       existingContactMock = _fixture.BuildContactMock();
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(existingContact: existingContactMock.Object).Object;
            await sut.ExecuteAsync(command);

            existingContactMock.Verify(m => m.ExternalIdentifier, Times.Never);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommand_AssertInternalIdentifierWasCalledOnExistingContactFromCommand()
        {
            CommandHandler sut = CreateSut();

            Mock <IContact>       existingContactMock = _fixture.BuildContactMock();
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(existingContact: existingContactMock.Object).Object;
            await sut.ExecuteAsync(command);

            existingContactMock.Verify(m => m.InternalIdentifier, Times.Once);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndNoExistingContactWasReturnedFromCommand_AssertExternalIdentifierSetterWasNotCalledOnContactFromToDomainOnCommand()
        {
            CommandHandler sut = CreateSut();

            Mock <IContact>       toDomainContactMock = _fixture.BuildContactMock();
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(toDomainContact: toDomainContactMock.Object, hasExistingContact: false).Object;
            await sut.ExecuteAsync(command);

            toDomainContactMock.VerifySet(m => m.ExternalIdentifier = It.IsAny <string>(), Times.Never);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommandAndUpdatedContactWithoutExternalIdentifierWasReturnedFromMicrosoftGraphRepository_AssertExternalIdentifierSetterWasNotCalledOnContactFromToDomainOnCommand()
        {
            IContact       updatedMicrosoftGraphContact = _fixture.BuildContactMock(hasExternalIdentifier: false).Object;
            CommandHandler sut = CreateSut(updatedMicrosoftGraphContact: updatedMicrosoftGraphContact);

            Mock <IContact>       toDomainContactMock = _fixture.BuildContactMock();
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(toDomainContact: toDomainContactMock.Object).Object;
            await sut.ExecuteAsync(command);

            toDomainContactMock.VerifySet(m => m.ExternalIdentifier = It.IsAny <string>(), Times.Never);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommandAndUpdatedContactWithExternalIdentifierWasReturnedFromMicrosoftGraphRepository_AssertExternalIdentifierSetterWasCalledOnContactFromToDomainOnCommandWithExternalIdentifierFromUpdatedContractFormMicrosoftGraphRepository()
        {
            string         externalIdentifier           = _fixture.Create <string>();
            IContact       updatedMicrosoftGraphContact = _fixture.BuildContactMock(externalIdentifier: externalIdentifier).Object;
            CommandHandler sut = CreateSut(updatedMicrosoftGraphContact: updatedMicrosoftGraphContact);

            Mock <IContact>       toDomainContactMock = _fixture.BuildContactMock();
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(toDomainContact: toDomainContactMock.Object).Object;
            await sut.ExecuteAsync(command);

            toDomainContactMock.VerifySet(m => m.ExternalIdentifier = It.Is <string>(value => string.CompareOrdinal(value, externalIdentifier) == 0), Times.Once);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWithInternalIdentifierWasReturnedFromCommand_AssertInternalIdentifierSetterWasCalledOnContactFromToDomainOnCommandWithInternalIdentifierFromExistingContactFromCommand()
        {
            CommandHandler sut = CreateSut();

            Mock <IContact>       toDomainContactMock = _fixture.BuildContactMock();
            string                internalIdentifier  = _fixture.Create <string>();
            IContact              existingContact     = _fixture.BuildContactMock(internalIdentifier: internalIdentifier).Object;
            IUpdateContactCommand command             = CreateUpdateContactCommandMock(toDomainContact: toDomainContactMock.Object, existingContact: existingContact).Object;
            await sut.ExecuteAsync(command);

            toDomainContactMock.VerifySet(m => m.InternalIdentifier = It.Is <string>(value => string.CompareOrdinal(value, internalIdentifier) == 0), Times.Once);
        }
        public void Validate_WhenCalled_AssertShouldNotBeNullOrWhiteSpaceWasCalledOnStringValidatorForExternalIdentifier()
        {
            string externalIdentifier = _fixture.Create <string>();
            IUpdateContactCommand sut = CreateSut(externalIdentifier);

            sut.Validate(_validatorMockContext.ValidatorMock.Object, _microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object, _accountingRepositoryMock.Object);

            _validatorMockContext.StringValidatorMock.Verify(m => m.ShouldNotBeNullOrWhiteSpace(
                                                                 It.Is <string>(value => string.CompareOrdinal(value, externalIdentifier) == 0),
                                                                 It.Is <Type>(value => value == sut.GetType()),
                                                                 It.Is <string>(value => string.CompareOrdinal(value, "ExternalIdentifier") == 0)),
                                                             Times.Once);
        }
 public ContactsController(
     IGetAllContactsCommand getAllContactsCommand,
     IGetContactByIdCommand getContactByIdCommand,
     ICreateContactCommand createContactCommand,
     IDeleteContactCommand deleteContactCommand,
     IUpdateContactCommand updateContactCommand
     )
 {
     _getAllContactsCommand = getAllContactsCommand;
     _getContactByIdCommand = getContactByIdCommand;
     _createContactCommand  = createContactCommand;
     _deleteContactCommand  = deleteContactCommand;
     _updateContactCommand  = updateContactCommand;
 }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommand_AssertUpdateContactAsyncWasCalledOnMicrosoftGraphRepositoryWithContactFromToDomainOnCommand()
        {
            CommandHandler sut = CreateSut();

            IContact              toDomainContact  = _fixture.BuildContactMock().Object;
            IRefreshableToken     refreshableToken = _fixture.BuildRefreshableTokenMock().Object;
            IUpdateContactCommand command          = CreateUpdateContactCommandMock(toDomainContact: toDomainContact, refreshableToken: refreshableToken).Object;
            await sut.ExecuteAsync(command);

            _microsoftGraphRepositoryMock.Verify(m => m.UpdateContactAsync(
                                                     It.Is <IRefreshableToken>(value => value == refreshableToken),
                                                     It.Is <IContact>(value => value == toDomainContact)),
                                                 Times.Once);
        }
        public async Task ExecuteAsync_WhenCalledAndCommandHasExternalIdentifierAndExistingContactWasReturnedFromCommandAndUpdatedContactWithExternalIdentifierWasReturnedFromMicrosoftGraphRepository_AssertCreateOrUpdateContactSupplementAsyncWasCalledOnContactRepositoryWithContactFromToDomainOnCommandAndWithExternalIdentifierFromExistingContactFromCommand()
        {
            CommandHandler sut = CreateSut();

            IContact toDomainContact      = _fixture.BuildContactMock().Object;
            string   externalIdentifier   = _fixture.Create <string>();
            IContact existingContact      = _fixture.BuildContactMock(externalIdentifier: externalIdentifier).Object;
            IUpdateContactCommand command = CreateUpdateContactCommandMock(toDomainContact: toDomainContact, existingContact: existingContact).Object;
            await sut.ExecuteAsync(command);

            _contactRepositoryMock.Verify(m => m.CreateOrUpdateContactSupplementAsync(
                                              It.Is <IContact>(value => value == toDomainContact),
                                              It.Is <string>(value => string.CompareOrdinal(value, externalIdentifier) == 0)),
                                          Times.Once());
        }
        public void Validate_WhenCalled_AssertShouldBeKnownValueWasCalledOnObjectValidatorForExternalIdentifier()
        {
            string externalIdentifier = _fixture.Create <string>();
            IUpdateContactCommand sut = CreateSut(externalIdentifier);

            sut.Validate(_validatorMockContext.ValidatorMock.Object, _microsoftGraphRepositoryMock.Object, _contactRepositoryMock.Object, _accountingRepositoryMock.Object);

            _validatorMockContext.ObjectValidatorMock.Verify(m => m.ShouldBeKnownValue(
                                                                 It.Is <string>(value => string.CompareOrdinal(value, externalIdentifier) == 0),
                                                                 It.IsNotNull <Func <string, Task <bool> > >(),
                                                                 It.Is <Type>(value => value == sut.GetType()),
                                                                 It.Is <string>(value => string.CompareOrdinal(value, "ExternalIdentifier") == 0),
                                                                 It.Is <bool>(value => value == false)),
                                                             Times.Once);
        }