public void SaveModifiedMockEntitiesTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();

            // load mock data
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);

            var myMockEntityQuery = DataModel <MockPoco>
                                    .NewQuery()
                                    .WhereColumn["customentity_id"].IsGreaterThan(-1);

            var entities = mockRepos.LoadModels(myMockEntityQuery);

            entities[0].Entity.MockStringValue = "jkl";
            entities[1].Entity.MockStringValue = "mno";
            entities[2].Entity.MockStringValue = "pqr";
            entities.Save();

            entities = mockRepos.LoadModels(myMockEntityQuery);
            Assert.IsTrue(entities[0].Entity.MockStringValue == "jkl");
            Assert.IsTrue(entities[1].Entity.MockStringValue == "mno");
            Assert.IsTrue(entities[2].Entity.MockStringValue == "pqr");
        }
        public void DeepLoadEntityManyToManyTest()
        {
            var usersTable     = CreateAndPopulateMockTable("User");
            var groupsTable    = CreateAndPopulateMockTable("Group");
            var groupUserTable = CreateAndPopulateMockTable("GroupUser");

            var memProvider = new MemoryDataProvider();

            memProvider.AddTable(usersTable);
            memProvider.AddTable(groupsTable);
            memProvider.AddTable(groupUserTable);
            var query   = new DataModelQuery <DataModel <Group> >();
            var egroups = memProvider.DeepLoadModels(query);
            var groups  = new DataModelCollection <DataModel <Group> >(egroups);

            Assert.IsTrue(groups.Count == 2, "Groups did not load");
            Assert.IsNotNull(groups[0].Entity, "Group 0 Entity was not set");
            Assert.IsNotNull(groups[0].Entity.Users, "Group 0 Users were not set");
            Assert.IsTrue(groups[0].Entity.Users.Count == 2, "Users count (group 0 of 0,1) is not 2");
            Assert.IsNotNull(groups[1].Entity, "Group 1 Entity was not set");
            Assert.IsNotNull(groups[0].Entity.Users, "Group 1 Users were not set");
            Assert.IsTrue(groups[1].Entity.Users.Count == 2, "Users count (group 1 of 0,1) is not 2");

            Assert.IsTrue(groups[0].Entity.Users[0].ID
                          != groups[1].Entity.Users[0].ID, "Same user loaded between groups");
            Assert.IsTrue(groups[0].Entity.Users[0].ID
                          != groups[1].Entity.Users[1].ID, "Same user loaded between groups");
            Assert.IsTrue(groups[1].Entity.Users[0].ID
                          != groups[0].Entity.Users[0].ID, "Same user loaded between groups");
        }
        public void RepositoryStart_DataProviderExtensions_OverrideDefault()
        {
            var dbProvider         = new InMemoryDataProvider();
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            // switch this ON here for testing purposes (to check that repo start does not override it)
            SnTrace.Custom.Enabled = true;

            // switch this ON here for testing purposes (to check that repo start does not override it)
            SnTrace.Custom.Enabled = true;

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .UseAccessTokenDataProviderExtension(new TestAccessTokenDataProvider()) // ACTION: set test provider
                              .UseSecurityDataProvider(securityDbProvider)
                              .UseSearchEngine(searchEngine)
                              .UseAccessProvider(accessProvider)
                              .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.AreEqual(typeof(TestAccessTokenDataProvider), DataStore.GetDataProviderExtension <IAccessTokenDataProviderExtension>().GetType());
            }
        }
        public void SaveItem_AddedTwoObjects_TrueWithCrossReferenceAssert()
        {
            //Arrange
            MemoryDataProvider memoryDataProvider = new MemoryDataProvider();
            string             className          = "testKeyClassName";
            string             key1  = $"{className}_1";
            List <string>      item1 = new List <string>()
            {
                "item1", "item2", "item3"
            };

            string        key2  = $"{className}_2";
            List <string> item2 = new List <string>()
            {
                "item1", "item2", "item3"
            };

            //Act2
            bool result1 = memoryDataProvider.SaveItem(key1, item1);
            bool result2 = memoryDataProvider.SaveItem(key2, item2);

            //Assert
            Assert.IsTrue(result1, "SaveItem is returning a False in item 1 when have to return a True");
            Assert.IsTrue(result2, "SaveItem is returning a False in item 2 when have to return a True");
            Assert.ReferenceEquals(item1, memoryDataProvider.GetItem <List <string> >(key1));
            Assert.AreNotEqual(item1, memoryDataProvider.GetItem <List <string> >(key2));
            Assert.ReferenceEquals(item2, memoryDataProvider.GetItem <List <string> >(key2));
            Assert.AreNotEqual(item2, memoryDataProvider.GetItem <List <string> >(key1));
            Assert.AreEqual(memoryDataProvider.GetItems <List <List <string> > >(className).Count, 2);
        }
        public void SaveModifiedEntityTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();

            // load mock data
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);

            var myMockEntityQuery = DataModel <MockPoco>
                                    .NewQuery()
                                    .WhereColumn["string_value"].IsEqualTo("abc");

            var entity = mockRepos.LoadModel(myMockEntityQuery);

            entity.Entity.MockStringValue = "xyz";
            entity.Save();

            myMockEntityQuery = DataModel <MockPoco>
                                .NewQuery()
                                .WhereColumn["string_value"].IsEqualTo("xyz");

            entity = mockRepos.LoadModel(myMockEntityQuery);

            Assert.IsNotNull(entity);
            Assert.AreEqual("xyz", entity.Entity.MockStringValue);
            Assert.IsTrue(entity.DataProvider == mockRepos);
        }
        public void DeepLoadEntityOneToManyTest()
        {
            var companyTable = CreateAndPopulateMockTable("Company");
            var contactTable = CreateAndPopulateMockTable("Contact");

            var memProvider = new MemoryDataProvider();

            memProvider.AddTable(companyTable);
            memProvider.AddTable(contactTable);
            var query = new DataModelQuery <DataModel <Company> >()
                        .WhereProperty["ID"].IsEqualTo(1);
            var decompany = memProvider.DeepLoadModel(query) as DataModel <Company>;

            Assert.IsNotNull(decompany);
            Company company = decompany.Entity;

            Assert.IsNotNull(company);
            Assert.IsNotNull(company.Contacts, "Contacts not populated");
            Assert.IsTrue(company.Contacts.Count == 2, company.Contacts.Count
                          + " loaded (expected 2).");
            Assert.IsTrue(company.Contacts[0].Name == "Betty Sue" ||
                          company.Contacts[0].Name == "John Doe");
            Assert.IsTrue(company.Contacts[1].Name == "Betty Sue" ||
                          company.Contacts[1].Name == "John Doe");
        }
        public void LoadMockEntitiesTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();

            // load mock data
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);

            var myMockEntityQuery = DataModel <MockPoco>
                                    .NewQuery()
                                    .WhereColumn["customentity_id"].IsGreaterThan(-1)
                                    .AddSortItem("customentity_id");

            var entities = myMockEntityQuery.SelectMany(mockRepos); // mockRepos.LoadModels(myMockEntityQuery);

            Assert.IsNotNull(entities);
            Assert.IsTrue(entities.Count > 0);
            Assert.IsTrue(entities.DataProvider == mockRepos);

            var objects = entities.Unwrap();

            /*always true:
             * Assert.IsTrue(entities[0] is DataModel<MockPoco>);*/
            Assert.IsTrue(objects[0] is MockPoco);

            Assert.IsNotNull(objects);
            Assert.IsTrue(objects.Count > 0);
        }
        public void RepositoryStart_NamedProviders()
        {
            var dbProvider         = new InMemoryDataProvider();
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            // switch this ON here for testing purposes (to check that repo start does not override it)
            SnTrace.Custom.Enabled = true;

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .AddBlobProvider(new InMemoryBlobProvider())
                              .UseSecurityDataProvider(securityDbProvider)
                              .UseSecurityMessageProvider(new DefaultMessageProvider(new MessageSenderManager()))
                              .UseSearchEngine(searchEngine)
                              .UseAccessProvider(accessProvider)
                              .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.AreSame(dbProvider, Providers.Instance.DataStore.DataProvider);
                Assert.AreEqual(searchEngine, SearchManager.SearchEngine);
                Assert.AreEqual(accessProvider, AccessProvider.Current);
                Assert.AreEqual(emvrProvider, Providers.Instance.ElevatedModificationVisibilityRuleProvider);

                // Currently this does not work, because the property below re-creates the security
                // db provider from the prototype, so it cannot be ref equal with the original.
                // Assert.AreEqual(securityDbProvider, SecurityHandler.SecurityContext.DataProvider);
                Assert.AreEqual(securityDbProvider, Providers.Instance.SecurityDataProvider);

                // Check a few trace categories that were switched ON above.
                Assert.IsTrue(SnTrace.Custom.Enabled);
                Assert.IsTrue(SnTrace.Test.Enabled);
                Assert.IsTrue(SnTrace.Web.Enabled);
                Assert.IsTrue(SnTrace.System.Enabled);
                Assert.IsFalse(SnTrace.TaskManagement.Enabled);
                Assert.IsFalse(SnTrace.Workflow.Enabled);
            }
        }
        public void SaveItem_NewObject_False()
        {
            //Arrange
            MemoryDataProvider memoryDataProvider = new MemoryDataProvider();
            string             key  = null;
            List <string>      item = new List <string>()
            {
                "item1", "item2", "item3"
            };


            //Act
            bool result = memoryDataProvider.SaveItem(key, item);

            //Assert
            Assert.IsFalse(result, "SaveItem is returning a True when have to return a False");
        }
        public void SaveItem_NewObject_TrueWithAsserts()
        {
            //Arrange
            MemoryDataProvider memoryDataProvider = new MemoryDataProvider();
            string             key  = "testKey";
            List <string>      item = new List <string>()
            {
                "item1", "item2", "item3"
            };


            //Act
            bool result = memoryDataProvider.SaveItem(key, item);

            //Assert
            Assert.IsTrue(result, "SaveItem is returning a False when have to return a True");
            Assert.ReferenceEquals(item, memoryDataProvider.GetItem <List <string> >(key));
        }
        public void DeepLoadEntityManyToOneTest3()
        {
            var companyTable = CreateAndPopulateMockTable("Company");
            var contactTable = CreateAndPopulateMockTable("Contact");

            var memProvider = new MemoryDataProvider();

            memProvider.AddTable(companyTable);
            memProvider.AddTable(contactTable);
            var query = new DataModelQuery <Contact>()
                        .WhereProperty["ID"].IsEqualTo(3);
            var contact = memProvider.DeepLoadModel(query) as Contact;

            Assert.IsNotNull(contact);
            Assert.IsTrue(contact.Name == "John Doe");
            Assert.IsNotNull(contact.Company);
            Assert.IsTrue(contact.Company.CompanyName == "Acme, Inc.");
        }
        public void RepositoryStart_NullPopulator()
        {
            var dbProvider2 = new InMemoryDataProvider();

            Providers.Instance.DataProvider = dbProvider2;
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider2)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider2))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .AddBlobProvider(new InMemoryBlobProvider())
                              .UseSecurityDataProvider(securityDbProvider)
                              .UseSecurityMessageProvider(new DefaultMessageProvider(new MessageSenderManager()))
                              .UseSearchEngine(searchEngine)
                              .UseAccessProvider(accessProvider)
                              .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            var originalIsOuterSearchEngineEnabled = Indexing.IsOuterSearchEngineEnabled;

            Indexing.IsOuterSearchEngineEnabled = false;
            try
            {
                using (Repository.Start(repoBuilder))
                {
                    Assert.IsFalse(SearchManager.IsOuterEngineEnabled);
                    Assert.AreEqual(typeof(InternalSearchEngine), SearchManager.SearchEngine.GetType());
                    var populator = SearchManager.GetIndexPopulator();
                    Assert.AreEqual(typeof(NullPopulator), populator.GetType());
                }
            }
            finally
            {
                Indexing.IsOuterSearchEngineEnabled = originalIsOuterSearchEngineEnabled;
            }
        }
        public void RepositoryStart_AuditEventWriter_Database()
        {
            var originalWriter = SnLog.AuditEventWriter;
            var auditWriter    = new DatabaseAuditEventWriter();

            var dbProvider         = new InMemoryDataProvider();
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            try
            {
                // Clear the slot to ensure a real test.
                Providers.Instance.AuditEventWriter = null;

                var repoBuilder = new RepositoryBuilder()
                                  .UseAccessProvider(new DesktopAccessProvider())
                                  .UseDataProvider(dbProvider)
                                  .UseAuditEventWriter(auditWriter) // <-- The important line
                                  .UseInitialData(GetInitialData())
                                  .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                                  .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                                  .AddBlobProvider(new InMemoryBlobProvider())
                                  .UseSecurityDataProvider(securityDbProvider)
                                  .UseSecurityMessageProvider(new DefaultMessageProvider(new MessageSenderManager()))
                                  .UseSearchEngine(searchEngine)
                                  .UseAccessProvider(accessProvider)
                                  .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                                  .StartIndexingEngine(false)
                                  .StartWorkflowEngine(false)
                                  .UseTraceCategories("Test", "Web", "System");

                using (Repository.Start(repoBuilder))
                {
                    Assert.AreSame(auditWriter, Providers.Instance.AuditEventWriter);
                    Assert.AreSame(auditWriter, SnLog.AuditEventWriter);
                }
            }
            finally
            {
                SnLog.AuditEventWriter = originalWriter;
            }
        }
        public void LoadMockEntityTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();

            // load mock data
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);

            var myMockEntityQuery = DataModel <MockPoco>
                                    .NewQuery()
                                    .WhereProperty["ID"].IsEqualTo(2);

            var entity = myMockEntityQuery.SelectFirst(mockRepos); // mockRepos.LoadModel(myMockEntityQuery);

            Assert.IsNotNull(entity);
            Assert.AreEqual("ghi", entity.Entity.MockStringValue);
            Assert.IsTrue(entity.DataProvider == mockRepos);
        }
        public void DeepLoadEntityManyToOneTest4()
        {
            var companyTable = CreateAndPopulateMockTable("Company");
            var contactTable = CreateAndPopulateMockTable("Contact");

            var memProvider = new MemoryDataProvider();

            memProvider.AddTable(companyTable);
            memProvider.AddTable(contactTable);
            var query = new DataModelQuery <Contact>()
                        .WhereProperty["ID"].IsEqualTo(4);
            var contact = memProvider.DeepLoadModel(query) as Contact;

            Assert.IsNotNull(contact);
            Assert.IsTrue(contact.Name == "Jane Lane");
            Assert.IsNotNull(contact.Company);
            Assert.IsTrue(contact.Company.CompanyName == "Foobar, Ltd.");
            Assert.IsTrue(contact.Company.Contacts != null);
            Assert.IsTrue(contact.Company.Contacts.Count > 0);
        }
        public void DeepLoadEntityTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);
            var table2 = ((MemoryDataProvider)mockRepos).AddTable("mock_table2");

            PopulateMockTable(table2);

            var query = new DataModelQuery <DataModel <DataModelRelationshipMetadataTest.MockPocoChild> >()
                        .WhereProperty["ID"].IsEqualTo(2);
            var e = mockRepos.DeepLoadModel(query)
                    as DataModel <DataModelRelationshipMetadataTest.MockPocoChild>;

            Assert.IsNotNull(e, "Nothing was returned from DeepLoad query.");
            Assert.IsNotNull(e.Entity.MockPoco, "Child object not assigned in DeepLoad");
            Assert.IsTrue(e.Entity.MockPoco.MockDecimalValue == e.Entity.MockDecimalValue,
                          "Child object field value mismatch");
        }
        public void DeepLoadEntitiesTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);
            var table2 = ((MemoryDataProvider)mockRepos).AddTable("mock_table2");

            PopulateMockTable(table2);
            var query = DataModel <DataModelRelationshipMetadataTest.MockPocoChild> .NewQuery();

            DataModelCollection <DataModel <DataModelRelationshipMetadataTest.MockPocoChild> >
            entities = mockRepos.DeepLoadModels(query);

            Assert.IsNotNull(entities);
            Assert.IsTrue(entities.Count == 4);
            Assert.IsTrue(entities[0].Entity.MockPoco != null);
            Assert.IsTrue(entities[3].Entity.MockPoco != null);
            Assert.IsTrue(entities[2].Entity.MockPoco.MockDecimalValue
                          .Equals(entities[2].Entity.MockDecimalValue));
        }
        public void DeleteEntityTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();

            // load mock data
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);

            var myMockEntityQuery = DataModel <MockPoco>
                                    .NewQuery()
                                    .WhereColumn["string_value"].IsEqualTo("abc");

            var entity = mockRepos.LoadModel(myMockEntityQuery);

            entity.MarkDeleted = true;
            entity.Save();

            entity = mockRepos.LoadModel(myMockEntityQuery);
            Assert.IsNull(entity);
        }
        public void DeleteEntitiesTest()
        {
            DataProviderBase mockRepos = new MemoryDataProvider();

            // load mock data
            var table = ((MemoryDataProvider)mockRepos).AddTable("mock_table");

            PopulateMockTable(table);

            var myMockEntityQuery = DataModel <MockPoco>
                                    .NewQuery()
                                    .WhereColumn["customentity_id"].IsGreaterThan(-1);

            var entities = mockRepos.LoadModels(myMockEntityQuery);

            entities[0].MarkDeleted = true;
            entities[2].MarkDeleted = true;
            entities.Save();

            entities = mockRepos.LoadModels(myMockEntityQuery);
            Assert.IsTrue(entities.Count == 2);
        }
        public void DeepSaveEntityTest()
        {
            // todo: test all four relationship types

            var companyTable = CreateAndPopulateMockTable("Company");
            var contactTable = CreateAndPopulateMockTable("Contact");

            var memProvider = new MemoryDataProvider();

            memProvider.AddTable(companyTable);
            memProvider.AddTable(contactTable);
            var query = new DataModelQuery <DataModel <Company> >()
                        .WhereProperty["ID"].IsEqualTo(1);
            var decompany = memProvider.DeepLoadModel(query);
            var company   = decompany.Entity;

            company.CompanyName += "_";
            foreach (var c in company.Contacts)
            {
                c.Name += "_";
            }
            decompany.Save(true);

            query = new DataModelQuery <DataModel <Company> >()
                    .WhereProperty["ID"].IsEqualTo(1);
            decompany = memProvider.DeepLoadModel(query);
            company   = decompany.Entity;
            Assert.IsTrue(company.CompanyName.Length > 1 &&
                          company.CompanyName.EndsWith("_"));
            Assert.IsTrue(company.Contacts[0]
                          .Name.Length > 1 &&
                          company.Contacts[0]
                          .Name.EndsWith("_"));
            Assert.IsTrue(company.Contacts[company.Contacts.Count - 1]
                          .Name.Length > 1 &&
                          company.Contacts[company.Contacts.Count - 1]
                          .Name.EndsWith("_"));
        }
        public void DeepSaveEntitiesTest()
        {
            var companyTable = CreateAndPopulateMockTable("Company");
            var contactTable = CreateAndPopulateMockTable("Contact");

            var memProvider = new MemoryDataProvider();

            memProvider.AddTable(companyTable);
            memProvider.AddTable(contactTable);

            var query = new DataModelQuery <DataModel <Company> >()
                        .WhereProperty["ID"].IsEqualTo(1);
            var decompany = memProvider.DeepLoadModel(query);
            var company   = decompany.Entity;

            company.CompanyName += "_";
            foreach (var c in company.Contacts)
            {
                c.Name += "_";
            }

            var query2 = new DataModelQuery <DataModel <Company> >()
                         .WhereProperty["ID"].IsEqualTo(2);
            var decompany2 = memProvider.DeepLoadModel(query2);
            var company2   = decompany2.Entity;

            company2.CompanyName = "_" + company2.CompanyName;
            foreach (var c in company2.Contacts)
            {
                c.Name = "_" + c.Name;
            }

            var col = new DataModelCollection <DataModel <Company> >();

            col.Add(decompany);
            col.Add(decompany2);
            col.DataProvider = memProvider;

            col.Save(true);

            query = new DataModelQuery <DataModel <Company> >()
                    .WhereProperty["ID"].IsEqualTo(1);
            decompany = memProvider.DeepLoadModel(query);
            company   = decompany.Entity;
            Assert.IsTrue(company.CompanyName.Length > 1 &&
                          company.CompanyName.EndsWith("_"));
            Assert.IsTrue(company.Contacts[0]
                          .Name.Length > 1 &&
                          company.Contacts[0]
                          .Name.EndsWith("_"));
            Assert.IsTrue(company.Contacts[company.Contacts.Count - 1]
                          .Name.Length > 1 &&
                          company.Contacts[company.Contacts.Count - 1]
                          .Name.EndsWith("_"));

            query = new DataModelQuery <DataModel <Company> >()
                    .WhereProperty["ID"].IsEqualTo(2);
            decompany = memProvider.DeepLoadModel(query);
            company   = decompany.Entity;
            Assert.IsTrue(company.CompanyName.Length > 1 &&
                          company.CompanyName.StartsWith("_"));
            Assert.IsTrue(company.Contacts[0]
                          .Name.Length > 1 &&
                          company.Contacts[0]
                          .Name.StartsWith("_"));
            Assert.IsTrue(company.Contacts[company.Contacts.Count - 1]
                          .Name.Length > 1 &&
                          company.Contacts[company.Contacts.Count - 1]
                          .Name.StartsWith("_"));
        }