public void ShouldHaveQueryForEachKeyComparisonType()
        {
            var context = new MockModelAContext();
            var query = context.Query;

            foreach (KeyQueryType keyQueryType in typeof(KeyQueryType).GetEnumValues())
            {
                query.WhereKeysMatch(keyQueryType, "P1", "R1").ShouldNotBe(null);
            }
        }
        public void ShouldCreateNewInstanceWhenLookupNotFound()
        {
            var context = new MockModelAContext();
            context.DeleteTable();
            context.CreateTable();

            var propManager = TablePropertyManager<MockModelA, MockModelATableEntity>.LookupOrCreate(context, "P1", "R1");
            propManager.GetValue<string>(m => m.Text).ShouldBe(null);
            propManager.GetValue<string>(m => m.Partition).ShouldBe("P1");
            propManager.GetValue<string>(m => m.Id).ShouldBe("R1");
        }
        public void ShouldLookupWithPartialKeys()
        {
            var context = new MockModelAContext();
            context.DeleteTable();
            var entity = new MockModelATableEntity("P1", "R1");
            var mock = new MockModelA(entity) { Text = "FooBar", Number = 42 };
            mock.Property.Save(context);

            // ---

            context = new MockModelAContext();

            var propManager = TablePropertyManager<MockModelA, MockModelATableEntity>.Lookup(context, "Z", "X", KeyQueryType.StartsWith);
            propManager.ShouldBe(null);

            propManager = TablePropertyManager<MockModelA, MockModelATableEntity>.Lookup(context, "P", "R", KeyQueryType.StartsWith);
            propManager.GetValue<string>(m => m.Text).ShouldBe("FooBar");

            propManager = TablePropertyManager<MockModelA, MockModelATableEntity>.Lookup(context, "P1", "R", KeyQueryType.StartsWith);
            propManager.GetValue<string>(m => m.Text).ShouldBe("FooBar");

            propManager = TablePropertyManager<MockModelA, MockModelATableEntity>.Lookup(context, "P", "R1", KeyQueryType.StartsWith);
            propManager.GetValue<string>(m => m.Text).ShouldBe("FooBar");

            propManager = TablePropertyManager<MockModelA, MockModelATableEntity>.Lookup(context, "P1", "R1", KeyQueryType.StartsWith);
            propManager.GetValue<string>(m => m.Text).ShouldBe("FooBar");
        }
        public void ShouldReturnNullFromLookup()
        {
            var context = new MockModelAContext();
            context.DeleteTable();
            var entity = new MockModelATableEntity("P1", "R1");
            var mock = new MockModelA(entity) { Text = "FooBar", Number = 42 };
            mock.Property.Save(context);

            // ---

            context = new MockModelAContext();
            var propManager = TablePropertyManager<MockModelA, MockModelATableEntity>.Lookup(context, "P1", "R-2-NEW-ID");
            propManager.ShouldBe(null);
        }
        public void ShouldCreateFromLookup()
        {
            var context = new MockModelAContext();
            context.DeleteTable();
            var entity = new MockModelATableEntity("P1", "R1");
            var mock = new MockModelA(entity) { Text = "FooBar", Number = 42 };
            mock.Property.Save(context);

            // ---
            // Lookup
            context = new MockModelAContext();
            var propManager1 = TablePropertyManager<MockModelA, MockModelATableEntity>.Lookup(context, "P1", "R1");
            propManager1.GetValue<string>(m => m.Text).ShouldBe("FooBar");
            propManager1.GetValue<string>(m => m.Partition).ShouldBe("P1");
            propManager1.GetValue<string>(m => m.Id).ShouldBe("R1");

            // ---
            // LookupOrCreate
            var propManager3 = TablePropertyManager<MockModelA, MockModelATableEntity>.LookupOrCreate(context, "P1", "R1");
            propManager3.GetValue<string>(m => m.Text).ShouldBe("FooBar");
            propManager3.GetValue<string>(m => m.Partition).ShouldBe("P1");
            propManager3.GetValue<string>(m => m.Id).ShouldBe("R1");
        }
        public void ShouldSaveChangesToTable()
        {
            var client = CloudSettings.CreateTableClient();
            var context = new MockModelAContext();
            client.DeleteTableIfExist(context.TableName);

            // ---

            var entity = new MockModelATableEntity("P1", "R1");
            var mock = new MockModelA(entity) {Text = "FooBar", Number = 42};
            mock.Property.Save(context);

            // ---

            var query = context.CreateQuery().Where(m => m.PartitionKey == "P1" && m.RowKey == "R1");
            query.ToList().Count.ShouldBe(1);

            query = context.CreateQuery().Where(m => m.PartitionKey == "P1" && m.RowKey == "R2");
            query.ToList().Count.ShouldBe(0);

            // ---

            client.DeleteTableIfExist(context.TableName);
        }