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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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));
        }