public async Task ShouldDeleteDomainAndHostWhenDomainDeletedReceivedAndHostIsNotStillInUse() { string domainName = "test.gov.uk"; string hostName = "test-host-inbound.com"; DomainDeleted message = new DomainDeleted(domainName); MxEntityState stateFromDb = new MxEntityState(domainName.ToLower()) { MxState = MxState.Created, HostMxRecords = new List <HostMxRecord> { new HostMxRecord(hostName, 0, new List <string>()) } }; List <string> uniqueHosts = new List <string> { hostName }; A.CallTo(() => _dao.Get(domainName.ToLower())).Returns(Task.FromResult(stateFromDb)); A.CallTo(() => _dao.GetHostsUniqueToDomain(domainName.ToLower())).Returns(Task.FromResult(uniqueHosts)); await _mxEntity.Handle(message); A.CallTo(() => _dao.DeleteHosts(uniqueHosts)).MustHaveHappenedOnceExactly(); A.CallTo(() => _dispatcher.Dispatch(A <MxHostDeleted> .That.Matches(a => a.Id == stateFromDb.HostMxRecords[0].Id), A <string> ._)).MustHaveHappenedOnceExactly(); A.CallTo(() => _dao.Delete(domainName.ToLower())).MustHaveHappenedOnceExactly(); }
public async Task Handle(DomainDeleted message) { string domainName = message.Id.ToLower(); MxEntityState state = await LoadState(domainName, nameof(message)); if (state.HostMxRecords != null && state.HostMxRecords.Count > 0) { List <string> uniqueHosts = await _dao.GetHostsUniqueToDomain(domainName); if (uniqueHosts.Count > 0) { await _dao.DeleteHosts(uniqueHosts); foreach (string host in uniqueHosts) { _dispatcher.Dispatch(new MxHostDeleted(host), _mxEntityConfig.SnsTopicArn); _log.LogInformation($"An MxHostDeleted message for Host: {host} has been dispatched to the SnsTopic: {_mxEntityConfig.SnsTopicArn}"); } } } await _dao.Delete(domainName); _log.LogInformation($"Deleted MX entity with id: {message.Id}."); }