Example #1
0
        void CleanUp()
        {
            DynamoMetadata.Reset();
            var db = CreatePocoDynamo();

            db.DeleteAllTables(TimeSpan.FromMinutes(1));
        }
        public void Does_store_FlagsEnum_and_EnumAsInt_as_integers()
        {
            db.RegisterTable <ModelWithEnums>();
            db.InitSchema();

            var request = new ModelWithEnums
            {
                Id          = 1,
                DefaultEnum = DefaultEnum.Value2,
                EnumsAsInt  = EnumsAsInt.Value2,
                FlagsEnum   = FlagsEnum.FlagOne | FlagsEnum.FlagThree,
            };

            var attrValues = db.Converters.ToAttributeValues(db, request, DynamoMetadata.GetTable <ModelWithEnums>());

            Assert.That(attrValues["DefaultEnum"].S, Is.EqualTo("Value2"));
            Assert.That(attrValues["EnumsAsInt"].N, Is.EqualTo("2"));
            Assert.That(attrValues["FlagsEnum"].N, Is.EqualTo("5"));

            db.PutItem(request);

            var dto = db.GetItem <ModelWithEnums>(1);

            Assert.That(dto.DefaultEnum, Is.EqualTo(DefaultEnum.Value2));
            Assert.That(dto.EnumsAsInt, Is.EqualTo(EnumsAsInt.Value2));
            Assert.That(dto.FlagsEnum, Is.EqualTo(FlagsEnum.FlagOne | FlagsEnum.FlagThree));
        }
Example #3
0
        public void OneTimeSetUp()
        {
            DynamoMetadata.Reset();
            var db = CreatePocoDynamo();

            db.DeleteAllTables(TimeSpan.FromMinutes(1));

            appHost = new BasicAppHost()
                      .Init();
        }
        public void Does_create_table_with_ProvisionedThroughput()
        {
            var db = CreatePocoDynamo();

            db.RegisterTable <TableWithProvision>();

            var table = DynamoMetadata.GetTable <TableWithProvision>();

            Assert.That(table.HashKey.Name, Is.EqualTo("Id"));
            Assert.That(table.ReadCapacityUnits, Is.EqualTo(100));
            Assert.That(table.WriteCapacityUnits, Is.EqualTo(50));
        }
        public void Does_create_table_using_convention_names()
        {
            var db = CreatePocoDynamo();

            db.RegisterTable <TableWithConventionNames>();

            var table = DynamoMetadata.GetTable <TableWithConventionNames>();

            Assert.That(table.HashKey.Name, Is.EqualTo("HashKey"));
            Assert.That(table.RangeKey.Name, Is.EqualTo("RangeKey"));
            Assert.That(table.Fields.Length, Is.EqualTo(3));
        }
        public void Does_create_table_using_composite_index()
        {
            var db = CreatePocoDynamo();

            db.RegisterTable <TableWithCompositeKey>();

            var table = DynamoMetadata.GetTable <TableWithCompositeKey>();

            Assert.That(table.HashKey.Name, Is.EqualTo("D"));
            Assert.That(table.RangeKey.Name, Is.EqualTo("C"));
            Assert.That(table.Fields.Length, Is.EqualTo(5));
        }
        public void Does_create_table_using_dynamodb_attributes()
        {
            var db = CreatePocoDynamo();

            db.RegisterTable <TableWithDynamoAttributes>();

            var table = DynamoMetadata.GetTable <TableWithDynamoAttributes>();

            Assert.That(table.HashKey.Name, Is.EqualTo("D"));
            Assert.That(table.RangeKey.Name, Is.EqualTo("C"));
            Assert.That(table.Fields.Length, Is.EqualTo(5));
        }
        public void Does_create_table_and_index_using_Interface_attrs()
        {
            var db = CreatePocoDynamo();

            db.RegisterTable <TableWithTypedGlobalIndex>();

            var table = DynamoMetadata.GetTable <TableWithTypedGlobalIndex>();

            Assert.That(table.HashKey.Name, Is.EqualTo("D"));
            Assert.That(table.RangeKey.Name, Is.EqualTo("C"));
            Assert.That(table.Fields.Length, Is.EqualTo(5));

            Assert.That(table.GlobalIndexes.Count, Is.EqualTo(1));
            Assert.That(table.GlobalIndexes[0].HashKey.Name, Is.EqualTo("B"));
            Assert.That(table.GlobalIndexes[0].RangeKey.Name, Is.EqualTo("D"));
        }
Example #9
0
        public async Task Can_Create_Typed_GlobalIndex()
        {
            var db = CreatePocoDynamo();

            db.RegisterTable <OrderWithGlobalTypedIndex>();

            var customer = await CreateCustomerAsync(db);

            var table = DynamoMetadata.GetTable <OrderWithGlobalTypedIndex>();

            Assert.That(table.GlobalIndexes.Count, Is.EqualTo(1));
            Assert.That(table.GlobalIndexes[0].Name, Is.EqualTo(nameof(OrderGlobalCostIndex)));
            Assert.That(table.GlobalIndexes[0].HashKey.Name, Is.EqualTo("ProductId"));
            Assert.That(table.GlobalIndexes[0].RangeKey.Name, Is.EqualTo("Cost"));

            var orders = 10.Times(i => new OrderWithGlobalTypedIndex
            {
                ProductId = 1,
                Qty       = i + 2,
                Cost      = (i + 2) * 2,
                LineItem  = "Item " + (i + 1),
            });

            await db.PutRelatedItemsAsync(customer.Id, orders);

            var expensiveOrders = await db.QueryAsync(db.FromQueryIndex <OrderGlobalCostIndex>(x => x.ProductId == 1 && x.Cost > 10)).ToListAsync();

            Assert.That(expensiveOrders.Count, Is.EqualTo(orders.Count(x => x.ProductId == 1 && x.Cost > 10)));
            Assert.That(expensiveOrders.All(x => x.Cost > 10 && x.Id > 0 && x.Qty > 0));

            //Note: Local DynamoDb supports projecting attributes not in GlobalIndex, AWS DynamoDB Doesn't
            var dbOrders = (await db.QueryIntoAsync <OrderWithGlobalTypedIndex>(db.FromQueryIndex <OrderGlobalCostIndex>(x => x.ProductId == 1 && x.Cost > 10))).ToList();

            Assert.That(dbOrders.All(x => x.Cost > 10 && x.Id > 0 && x.Qty > 0 && x.LineItem != null));
            dbOrders = (await db.FromQueryIndex <OrderGlobalCostIndex>(x => x.ProductId == 1 && x.Cost > 10).ExecIntoAsync <OrderWithGlobalTypedIndex>()).ToList();
            Assert.That(dbOrders.All(x => x.Cost > 10 && x.Id > 0 && x.Qty > 0 && x.LineItem != null));

            expensiveOrders = await db.ScanAsync(db.FromScanIndex <OrderGlobalCostIndex>(x => x.Cost > 10)).ToListAsync();

            Assert.That(expensiveOrders.All(x => x.Cost > 10 && x.Id > 0 && x.Qty > 0));

            var indexOrders = (await db.ScanIntoAsync <OrderWithGlobalTypedIndex>(db.FromScanIndex <OrderGlobalCostIndex>(x => x.Cost > 10))).ToList();

            Assert.That(indexOrders.Count, Is.GreaterThan(0));
            Assert.That(indexOrders.All(x => x.Cost > 10 && x.Id > 0 && x.Qty > 0 && x.LineItem != null));
        }
        public void Does_generate_correct_metadata_for_Related_Order_Table()
        {
            var db = CreatePocoDynamo();

            var types = new List <Type>()
                        .Add <Customer>()
                        .Add <Order>();

            db.RegisterTables(types);

            var tables        = DynamoMetadata.GetTables();
            var customerTable = tables.First(x => x.Type == typeof(Customer));
            var orderTable    = tables.First(x => x.Type == typeof(Order));

            Assert.That(customerTable.HashKey.Name, Is.EqualTo("Id"));
            Assert.That(customerTable.RangeKey, Is.Null);

            Assert.That(orderTable.HashKey.Name, Is.EqualTo("CustomerId"));
            Assert.That(orderTable.RangeKey.Name, Is.EqualTo("Id"));
        }
        public void Does_ignore_fields()
        {
            var db = CreatePocoDynamo();

            db.RegisterTable <TableWithIgnoredFields>();
            db.InitSchema();

            db.PutItem(new TableWithIgnoredFields
            {
                Id        = 1,
                FirstName = "Foo",
                LastName  = "Bar",
                IsIgnored = 10,
            });

            var row = db.GetItem <TableWithIgnoredFields>(1);

            Assert.That(row.DisplayName, Is.EqualTo("Foo Bar"));
            Assert.That(row.IsIgnored, Is.EqualTo(0));

            var table   = DynamoMetadata.GetTable <TableWithIgnoredFields>();
            var request = new GetItemRequest
            {
                TableName = table.Name,
                Key       = db.Converters.ToAttributeKeyValue(db, table.HashKey, 1),
            };

            var raw = db.DynamoDb.GetItem(request);

            Assert.That(raw.Item.ContainsKey("Id"));
            Assert.That(raw.Item.ContainsKey("FirstName"));
            Assert.That(raw.Item.ContainsKey("LastName"));
            Assert.That(!raw.Item.ContainsKey("DisplayName"));
            Assert.That(!raw.Item.ContainsKey("IsIgnored"));

            var json = row.ToJson();

            Assert.That(json, Is.Not.Contains("LastName"));
        }
Example #12
0
        public async Task Can_Create_RangeTest_Async()
        {
            var db = CreatePocoDynamo();

            await db.CreateTableIfMissingAsync(DynamoMetadata.RegisterTable <RangeTest>());

            var createdDate = DateTime.UtcNow;
            await db.PutItemAsync(new RangeTest {
                Id          = "test",
                CreatedDate = createdDate,
                Data        = "Data",
            });

            var dto = await db.GetItemAsync <RangeTest>("test", createdDate);

            dto.PrintDump();

            Assert.That(dto.Id, Is.EqualTo("test"));
            Assert.That(dto.Data, Is.EqualTo("Data"));
            Assert.That(dto.CreatedDate, Is.EqualTo(createdDate)
                        .Within(TimeSpan.FromMinutes(1)));
        }
 public DynamoDbSequenceSource(IPocoDynamo db)
 {
     this.db    = db;
     this.table = DynamoMetadata.RegisterTable <Seq>();
 }
        public static void Reset <T>(this ISequenceSource seq, int startingAt = 0)
        {
            var tableName = DynamoMetadata.GetType <T>().Name;

            seq.Reset(tableName, startingAt);
        }
        public static long Increment <T>(this ISequenceSource seq, int amount = 1)
        {
            var tableName = DynamoMetadata.GetType <T>().Name;

            return(seq.Increment(tableName, amount));
        }
        public static long Current <T>(this ISequenceSource seq)
        {
            var tableName = DynamoMetadata.GetType <T>().Name;

            return(seq.Increment(tableName, 0));
        }
 public static long[] GetNextSequences <T>(this ISequenceSource seq, int noOfSequences)
 {
     return(GetNextSequences(seq, DynamoMetadata.GetType <T>(), noOfSequences));
 }