Beispiel #1
0
        public async Task ProcessMailMessageMessageIsParsed()
        {
            A.CallTo(() => _lambdaAggregateReportParseConfig.MaxS3ObjectSizeKilobytes).Returns(2);

            A.CallTo(() => _emailMessageClient.GetEmailMessages(A <string> ._, A <S3Event> ._)).Returns(Task.FromResult(new[]
            {
                new EmailMessageInfo(new EmailMetadata("uri", "filename", 1), Stream.Null)
            }));

            ILambdaContext lambdaContext = A.Fake <ILambdaContext>();
            S3Event        s3Event       = new S3Event();
            await _s3EmailMessageProcessor.ProcessEmailMessage(lambdaContext, s3Event);

            A.CallTo(() => _log.Warn(A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _aggegateReportParser.Parse(A <EmailMessageInfo> ._)).MustHaveHappened(Repeated.Exactly.Once);
        }
Beispiel #2
0
        public async Task ProcessMailMessageMessageIsProcessed()
        {
            A.CallTo(() => _lambdaReportParseConfig.MaxS3ObjectSizeKilobytes).Returns(2);

            A.CallTo(() => _emailMessageClient.GetEmailMessages(A <string> ._, A <string> ._, A <S3Event> ._)).Returns(Task.FromResult(new[]
            {
                new EmailMessageInfo(new EmailMetadata("uri", "filename", 1), Stream.Null)
            }));

            A.CallTo(() => _emailMessageInfoProcessor.ProcessEmailMessage(A <EmailMessageInfo> ._))
            .Returns(new Result <Domain>(new Domain(), true, false));

            ILambdaContext lambdaContext = A.Fake <ILambdaContext>();
            S3Event        s3Event       = new S3Event();
            bool           result        = await _s3EmailMessageProcessor.ProcessEmailMessage(string.Empty, lambdaContext, s3Event);

            Assert.That(result, Is.True);
            A.CallTo(() => _log.Warn(A <string> ._)).MustNotHaveHappened();
            A.CallTo(() => _emailMessageInfoProcessor.ProcessEmailMessage(A <EmailMessageInfo> ._)).MustHaveHappened(Repeated.Exactly.Once);
        }
Beispiel #3
0
        public async Task ProcessEmailMessage(ILambdaContext context, S3Event s3Event)
        {
            List <EmailMessageInfo> emailMessageInfos = (await _s3EmailMessageClient.GetEmailMessages(context.AwsRequestId, s3Event)).ToList();


            List <EmailMessageInfo> emailMessageInfosOverThreshold = emailMessageInfos.Where(_ => _.EmailMetadata.FileSizeKb > _config.MaxS3ObjectSizeKilobytes).ToList();

            emailMessageInfosOverThreshold.ForEach(_ => _log.Warn($"Didn't process message as it's size ({_.EmailMetadata.FileSizeKb} Kb) exceeded max email message size {_config.MaxS3ObjectSizeKilobytes} Kb"));

            List <EmailMessageInfo> emailMessages = emailMessageInfos.Where(_ => _.EmailMetadata.FileSizeKb <= _config.MaxS3ObjectSizeKilobytes).ToList();

            await Task.WhenAll(emailMessages.Select(_aggregateReportParser.Parse));
        }
        public async Task <bool> ProcessEmailMessage(string messageId, ILambdaContext context, S3Event s3Event)
        {
            EmailMessageInfo[] emailMessageInfos = await _s3EmailMessageClient.GetEmailMessages(context.AwsRequestId, messageId, s3Event);

            if (emailMessageInfos.Any(_ => _.EmailMetadata.FileSizeKb > _config.MaxS3ObjectSizeKilobytes))
            {
                _log.Warn($"Didn't process messages as MaxS3ObjectSizeKilobytes of {_config.MaxS3ObjectSizeKilobytes} Kb was exceeded");
                return(false);
            }

            List <Result <TDomain> > results = new List <Result <TDomain> >();

            foreach (EmailMessageInfo emailMessageInfo in emailMessageInfos)
            {
                results.Add(await _emailMessageInfoProcessor.ProcessEmailMessage(emailMessageInfo));
            }

            return(results.Any() && results.All(_ => _.Success));
        }