public async Task Handle(DomainCreated message) { string id = message.Id.ToLower(); SpfEntityState state = await _dao.Get(id); if (state != null) { _log.LogError("Ignoring {EventName} as SpfEntity already exists for {Id}.", nameof(DomainCreated), id); throw new InvalidOperationException($"Cannot handle event {nameof(DomainCreated)} as SpfEntity already exists for {id}."); } state = new SpfEntityState(id, 1, SpfState.Created, DateTime.UtcNow); await _dao.Save(state); SpfEntityCreated spfEntityCreated = new SpfEntityCreated(id, state.Version); _dispatcher.Dispatch(spfEntityCreated, _spfEntityConfig.SnsTopicArn); _log.LogInformation("Created SpfEntity for {Id}.", id); }
public async Task ItShouldRaiseARecordMessageAndSaveStateForNewlyCreatedEntities() { await PurgeAmazonSqsQueue(OutputQueueUrl); await TruncateDatabase(ConnectionString); SpfEntityCreated entityCreated = new SpfEntityCreated("ncsc.gov.uk", 1); InvokeLambda(entityCreated); List <Message> messages = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.That(messages.Count, Is.EqualTo(1)); Assert.That(messages[0], Is.TypeOf <SpfRecordExpired>()); SpfRecordExpired expiredMessage = (SpfRecordExpired)messages[0]; Assert.That(expiredMessage.Id, Is.EqualTo(entityCreated.Id)); List <SpfSchedulerState> states = await GetStates(ConnectionString); Assert.That(states.Count, Is.EqualTo(1)); Assert.That(states[0].Id, Is.EqualTo(expiredMessage.Id)); }
public async Task DomainCreatedWithNoDomainCreatesEntityForDomain() { await PurgeAmazonSqsQueue(OutputQueueUrl); await TruncateDatabase(ConnectionString); DomainCreated domainCreated = new DomainCreated(Id, "*****@*****.**", DateTime.UtcNow); InvokeLambda(domainCreated); Message message = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.That(message, Is.TypeOf <SpfEntityCreated>()); SpfEntityCreated spfEntityCreated = (SpfEntityCreated)message; Assert.That(spfEntityCreated.Id, Is.EqualTo(domainCreated.Id)); Assert.That(spfEntityCreated.Version, Is.EqualTo(1)); List <SpfEntityState> spfEntityStates = await GetStates(ConnectionString); Assert.That(spfEntityStates.Count, Is.EqualTo(1)); Assert.That(spfEntityStates[0].Id, Is.EqualTo(domainCreated.Id)); Assert.That(spfEntityStates[0].Version, Is.EqualTo(1)); }
public async Task ItShouldNotRaiseAnEventForExistingState() { await PurgeAmazonSqsQueue(OutputQueueUrl); await TruncateDatabase(ConnectionString); SpfEntityCreated entityCreated = new SpfEntityCreated("ncsc.gov.uk", 1); InvokeLambda(entityCreated); List <Message> firstRead = await ReadAmazonSqsEvent(OutputQueueUrl, ReadTimeoutSecond); Assert.AreEqual(firstRead.Count, 1); InvokeLambda(entityCreated); List <Message> secondRead = await ReadAmazonSqsEvent(OutputQueueUrl, 5); Assert.AreEqual(secondRead.Count, 0); List <SpfSchedulerState> states = await GetStates(ConnectionString); Assert.That(states.Count, Is.EqualTo(1)); Assert.That(states[0].Id, Is.EqualTo(entityCreated.Id)); }