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")); }
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); }
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); }
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()); }
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)); }
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); }