public async Task Correct_Entity_Is_Inserted_When_Called()
            {
                // Arrange
                var expected = new OutcomeEntity
                {
                    FileType     = "docx",
                    FileStatus   = "rebuilt",
                    RowKey       = "1234567",
                    PartitionKey = "durablefileprocessing"
                };

                OutcomeEntity actualEntity = null;

                _mockCloudTable.Setup(s => s.ExecuteAsync(It.IsAny <TableOperation>())).Callback <TableOperation>((op) =>
                {
                    actualEntity = (OutcomeEntity)op.Entity;
                });

                var cacheManager = new TableStorageCacheManager(_mockCacheClient.Object, _mockConfigurationSettings.Object);

                // Act
                await cacheManager.InsertEntityAsync(expected);

                // Assert
                Assert.That(actualEntity.FileType, Is.EqualTo(expected.FileType));
                Assert.That(actualEntity.FileStatus, Is.EqualTo(expected.FileStatus));
                Assert.That(actualEntity.RowKey, Is.EqualTo(expected.RowKey));
                Assert.That(actualEntity.PartitionKey, Is.EqualTo(expected.PartitionKey));
            }
Esempio n. 2
0
        public async Task HandleAsync(OutcomeCreated payload)
        {
            using (ReadModelContext db = readModelContextFactory.Create())
            {
                db.Outcomes.Add(new OutcomeEntity(
                                    new OutcomeModel(
                                        payload.AggregateKey,
                                        payload.Amount,
                                        payload.When,
                                        payload.Description,
                                        Enumerable.Empty <IKey>()
                                        )
                                    ).SetUserKey(payload.UserKey));

                await db.SaveChangesAsync();

                OutcomeEntity entity = await db.Outcomes.FindAsync(payload.AggregateKey.AsGuidKey().Guid);

                if (entity != null)
                {
                    db.OutcomeCategories.Add(new OutcomeCategoryEntity()
                    {
                        OutcomeId  = payload.AggregateKey.AsGuidKey().Guid,
                        CategoryId = payload.CategoryKey.AsGuidKey().Guid
                    });
                    await db.SaveChangesAsync();
                }
            }
        }
Esempio n. 3
0
            public async Task Entity_Is_Inserted_When_Called()
            {
                // Arrange
                const string fileHash     = "IAMHASH";
                const string fileStatus   = "rebuilt";
                const string fileType     = "pdf";
                const string partitionKey = "durablefileprocessing";

                var actual = new OutcomeEntity();

                var mockCacheManager = new Mock <ICacheManager <OutcomeEntity> >();
                var mockContext      = new Mock <IDurableActivityContext>();
                var mockLogger       = new Mock <ILogger>();

                mockContext.Setup(s => s.GetInput <(string, string, string)>()).Returns((fileHash, fileStatus, fileType));

                mockCacheManager.Setup(s => s.InsertEntityAsync(It.IsAny <OutcomeEntity>())).Callback <OutcomeEntity>((entity) =>
                {
                    actual = entity;
                });

                var activityFunction = new InsertEntityIntoCache(mockCacheManager.Object);

                // Act
                await activityFunction.Run(mockContext.Object, mockLogger.Object);

                // Assert
                Assert.That(actual.FileType, Is.EqualTo(fileType));
                Assert.That(actual.FileStatus, Is.EqualTo(fileStatus));
                Assert.That(actual.RowKey, Is.EqualTo(fileHash));
                Assert.That(actual.PartitionKey, Is.EqualTo(partitionKey));
            }
Esempio n. 4
0
        public async Task HandleAsync(OutcomeDeleted payload)
        {
            using (ReadModelContext db = readModelContextFactory.Create())
            {
                OutcomeEntity entity = await db.Outcomes.FindAsync(payload.AggregateKey.AsGuidKey().Guid);

                if (entity != null)
                {
                    db.Outcomes.Remove(entity);
                    await db.SaveChangesAsync();
                }
            }
        }
Esempio n. 5
0
        public async Task HandleAsync(OutcomeWhenChanged payload)
        {
            using (ReadModelContext db = new ReadModelContext())
            {
                OutcomeEntity entity = await db.Outcomes.FindAsync(payload.AggregateKey.AsGuidKey().Guid);

                if (entity != null)
                {
                    entity.When = payload.When;
                    await db.SaveChangesAsync();
                }
            }
        }
Esempio n. 6
0
        public async Task HandleAsync(OutcomeDescriptionChanged payload)
        {
            using (ReadModelContext db = dbFactory.Create())
            {
                OutcomeEntity entity = await db.Outcomes.FindAsync(payload.AggregateKey.AsGuidKey().Guid);

                if (entity != null)
                {
                    entity.Description = payload.Description;
                    await db.SaveChangesAsync();
                }
            }
        }
Esempio n. 7
0
        public async Task HandleAsync(OutcomeAmountChanged payload)
        {
            using (ReadModelContext db = readModelContextFactory.Create())
            {
                OutcomeEntity entity = await db.Outcomes.FindAsync(payload.AggregateKey.AsGuidKey().Guid);

                if (entity != null)
                {
                    entity.Amount   = payload.NewValue.Value;
                    entity.Currency = payload.NewValue.Currency;
                    await db.SaveChangesAsync();
                }
            }
        }
Esempio n. 8
0
        public async Task Run([ActivityTrigger] IDurableActivityContext context, ILogger log)
        {
            (string fileHash, string fileStatus, string fileType) = context.GetInput <(string, string, string)>();

            var entry = new OutcomeEntity
            {
                PartitionKey = "durablefileprocessing",
                RowKey       = fileHash,
                FileStatus   = fileStatus,
                FileType     = fileType
            };

            await _cacheManager.InsertEntityAsync(entry);
        }
Esempio n. 9
0
        public async Task HandleAsync(OutcomeCategoryAdded payload)
        {
            using (ReadModelContext db = readModelContextFactory.Create())
            {
                OutcomeEntity entity = await db.Outcomes.FindAsync(payload.AggregateKey.AsGuidKey().Guid);

                if (entity != null)
                {
                    db.OutcomeCategories.Add(new OutcomeCategoryEntity()
                    {
                        OutcomeId  = payload.AggregateKey.AsGuidKey().Guid,
                        CategoryId = payload.CategoryKey.AsGuidKey().Guid
                    });
                    await db.SaveChangesAsync();
                }
            }
        }
Esempio n. 10
0
            public async Task Entity_Is_Returned_When_Called()
            {
                // Arrange
                const string fileHash     = "IAMHASH";
                const string partitionKey = "durablefileprocessing";

                var expected = new OutcomeEntity
                {
                    FileStatus   = "rebuilt",
                    FileType     = "Pdf",
                    RowKey       = fileHash,
                    PartitionKey = "durablefileprocessing"
                };

                var mockCacheManager = new Mock <ICacheManager <OutcomeEntity> >();
                var mockContext      = new Mock <IDurableActivityContext>();
                var mockLogger       = new Mock <ILogger>();

                mockCacheManager.Setup(s => s.GetEntityAsync(
                                           It.Is <string>(name => name == partitionKey),
                                           It.Is <string>(hash => hash == fileHash)))
                .ReturnsAsync(expected);

                mockContext.Setup(s => s.GetInput <string>()).Returns(fileHash);

                var activityFunction = new GetEntityFromCache(mockCacheManager.Object);

                // Act
                var result = await activityFunction.Run(mockContext.Object, mockLogger.Object);

                // Assert
                Assert.That(result.FileType, Is.EqualTo(expected.FileType));
                Assert.That(result.FileStatus, Is.EqualTo(expected.FileStatus));
                Assert.That(result.RowKey, Is.EqualTo(expected.RowKey));
                Assert.That(result.PartitionKey, Is.EqualTo(expected.PartitionKey));
            }
            public async Task Result_Is_Returned_When_Entity_Is_Found()
            {
                // Arrange
                var expected = new OutcomeEntity
                {
                    FileType   = "docx",
                    FileStatus = "rebuilt",
                    RowKey     = "1234567"
                };

                _mockCloudTable.Setup(s => s.ExecuteAsync(It.IsAny <TableOperation>())).ReturnsAsync(new TableResult {
                    Result = expected
                });

                var cacheManager = new TableStorageCacheManager(_mockCacheClient.Object, _mockConfigurationSettings.Object);

                // Act
                var result = await cacheManager.GetEntityAsync("partitionKey", "rowKey");

                // Assert
                Assert.That(result.FileType, Is.EqualTo(expected.FileType));
                Assert.That(result.FileStatus, Is.EqualTo(expected.FileStatus));
                Assert.That(result.RowKey, Is.EqualTo(expected.RowKey));
            }