Beispiel #1
0
        public void DelegatePermissionTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var u = GetUniqueUserForTesting();
                c.Insert(u);

                var u2 = GetUniqueUserForTesting();
                c.Insert(u2);

                var g = new TblGroups {
                    Name = "delegated group"
                };
                c.Insert(g);

                PermissionsManager.Grand(g, FxGroupOperations.Rename, u.ID, null, DateTimeInterval.Full);

                PermissionsManager.Delegate(u.ID, g, FxGroupOperations.Rename, u2.ID, null, DateTimeInterval.Full);

                var GroupIds = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.GROUP, u2.ID, null, null);
                Assert.AreEqual(1, GroupIds.Count);
                Assert.AreEqual(g.ID, GroupIds[0]);

                var courseIds = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.COURSE, u2.ID, null, null);
                Assert.AreEqual(0, courseIds.Count);
            }
        }
Beispiel #2
0
        public void SafeDeleteAndPermissionManagerTest_GetUsersForObject()
        {
            using (var c = new DataObjectCleaner())
            {
                var u = GetUniqueUserForTesting();
                c.Insert(u);

                var g = new TblGroups {
                    Name = "TestGroup1"
                };
                ServerModel.DB.Insert(g);

                PermissionsManager.Grand(g, FxGroupOperations.View, u.ID, null, DateTimeInterval.Full);
                PermissionsManager.Grand(g, FxGroupOperations.Rename, u.ID, null, DateTimeInterval.Full);

                var res1 = PermissionsManager.GetUsersForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(1, res1.Count);
                Assert.AreEqual(u.ID, res1[0]);

                ServerModel.DB.Delete <TblUsers>(u.ID);

                var res2 = PermissionsManager.GetUsersForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(0, res2.Count);
            }
        }
Beispiel #3
0
        public void SafeDeleteAndPermissionManagerTest_GetGroupsForObject()
        {
            using (var c = new DataObjectCleaner())
            {
                var course = new TblCourses {
                    Name = "TestCourse3"
                };
                ServerModel.DB.Insert(course);

                var g = new TblGroups {
                    Name = "TestGroup3"
                };
                ServerModel.DB.Insert(g);

                PermissionsManager.Grand(course, FxCourseOperations.Use, null, g.ID, DateTimeInterval.Full);
                PermissionsManager.Grand(course, FxCourseOperations.Modify, null, g.ID, DateTimeInterval.Full);

                var res1 = PermissionsManager.GetGroupsForObject(SECURED_OBJECT_TYPE.COURSE, course.ID, null, null);
                Assert.AreEqual(1, res1.Count);
                Assert.AreEqual(g.ID, res1[0]);

                ServerModel.DB.Delete <TblCourses>(course.ID);

                var res2 = PermissionsManager.GetGroupsForObject(SECURED_OBJECT_TYPE.COURSE, course.ID, null, null);
                Assert.AreEqual(0, res2.Count);
            }
        }
Beispiel #4
0
        public void GetGroupPermissionsTest()
        {
            using (var cl = new DataObjectCleaner())
            {
                var c = new TblCourses
                {
                    Name        = "test course",
                    Description = "unit test course"
                };
                cl.Insert(c);

                var g = new TblGroups
                {
                    Name = "test group"
                };
                cl.Insert(g);

                PermissionsManager.Grand(c, FxCourseOperations.Modify, null, g.ID, new DateTimeInterval(DateTime.Now.AddDays(-1), DateTime.Now.AddDays(1)));

                var ids = PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, g.ID, FxCourseOperations.Modify.ID, DateTime.Now);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(c.ID, ids[0]);

                ids = PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, g.ID, null, null);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(c.ID, ids[0]);
            }
        }
Beispiel #5
0
        public void GetUsersAndGroupForObjectTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var g = new TblGroups {
                    Name = "test group"
                };
                c.Insert(g);

                var user = GetUniqueUserForTesting();
                c.Insert(user);

                var group = new TblGroups {
                    Name = "test owner group"
                };
                c.Insert(group);

                PermissionsManager.Grand(g, FxGroupOperations.View, user.ID, null, DateTimeInterval.Full);
                PermissionsManager.Grand(g, FxGroupOperations.ChangeMembers, null, group.ID, DateTimeInterval.Full);

                var ids = PermissionsManager.GetUsersForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(user.ID, ids[0]);

                var gids = PermissionsManager.GetGroupsForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(group.ID, gids[0]);
            }
        }
Beispiel #6
0
        public void DelegatePermissionTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var u = GetUniqueUserForTesting();
                c.Insert(u);

                var u2 = GetUniqueUserForTesting();
                c.Insert(u2);

                var g = new TblGroups {Name = "delegated group"};
                c.Insert(g);

                PermissionsManager.Grand(g, FxGroupOperations.Rename, u.ID, null, DateTimeInterval.Full);

                PermissionsManager.Delegate(u.ID, g, FxGroupOperations.Rename, u2.ID, null, DateTimeInterval.Full);

                var GroupIds = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.GROUP, u2.ID, null, null);
                Assert.AreEqual(1, GroupIds.Count);
                Assert.AreEqual(g.ID, GroupIds[0]);

                var courseIds = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.COURSE, u2.ID, null, null);
                Assert.AreEqual(0, courseIds.Count);
            }
        }
Beispiel #7
0
        public void LookupIDsTest()
        {
            using (var c = new DataObjectCleaner())
            {
                TblUsers u = GetUniqueUserForTesting();
                c.Insert(u);

                var a1 = new TblUserAnswers
                {
                    UserRef       = u.ID,
                    AnswerTypeRef = FxAnswerType.EmptyAnswer.ID
                };
                var a2 = (TblUserAnswers)a1.Clone();
                var a3 = (TblUserAnswers)a1.Clone();
                ServerModel.DB.Insert <TblUserAnswers>(new[] { a1, a2, a3 });

                var ids = ServerModel.DB.LookupIds <TblUserAnswers>(u, null);
                Assert.AreEqual(ids, new[] { a1.ID, a2.ID, a3.ID });

                var g1 = new TblGroups
                {
                    Name = "TestGroup1"
                };
                var g2 = (TblGroups)g1.Clone();
                c.Insert <TblGroups>(new[] { g1, g2 });

                ServerModel.DB.Link(u, g1);
                ServerModel.DB.Link(g2, u);

                var uIds = ServerModel.DB.LookupMany2ManyIds <TblGroups>(u, null);
                Assert.AreEqual(new[] { g1.ID, g2.ID }, uIds);

                var g1Ids = ServerModel.DB.LookupMany2ManyIds <TblUsers>(g1, null);
                Assert.AreEqual(new[] { u.ID }, g1Ids);

                var g2Ids = ServerModel.DB.LookupMany2ManyIds <TblUsers>(g2, null);
                Assert.AreEqual(new[] { u.ID }, g2Ids);

                ServerModel.DB.UnLink(g1, u);
                var newIds = ServerModel.DB.LookupMany2ManyIds <TblGroups>(u, null);
                Assert.AreEqual(new[] { g2.ID }, newIds);
            }
        }
Beispiel #8
0
        public void SimpleDBOperationsTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var r = new TblPermissions
                            {
                                CanBeDelagated = false
                            };
                var r2 = new TblPermissions
                             {
                                 CanBeDelagated = false
                             };
                var r3 = new TblPermissions
                             {
                                 CanBeDelagated = false
                             };
                c.Insert(r);
                c.Insert<TblPermissions>(new[] {r2, r3});
                var id1 = r.ID;
                var id2 = r2.ID;
                var id3 = r3.ID;

                r = ServerModel.DB.Load<TblPermissions>(id1);
                Assert.IsNotNull(r);
                Assert.IsFalse(r.CanBeDelagated);
                var dt1 = DateTime.Now;
                r.DateTill = dt1;
                ServerModel.DB.Update(r);

                r = ServerModel.DB.Load<TblPermissions>(id1);
                AreEqual(r.DateTill, dt1);

                IList<TblPermissions> ls = ServerModel.DB.Load<TblPermissions>(new[] {id2, id3});
                ls[0].DateSince = dt1;
                ls[1].DateTill = dt1;
                ServerModel.DB.Update(ls);

                ls = ServerModel.DB.Load<TblPermissions>(new[] {id2, id3});
                AreEqual(ls[0].DateSince, dt1);
                AreEqual(ls[1].DateTill, dt1);
            }
        }
Beispiel #9
0
        public void SimpleDBOperationsTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var r = new TblPermissions
                {
                    CanBeDelagated = false
                };
                var r2 = new TblPermissions
                {
                    CanBeDelagated = false
                };
                var r3 = new TblPermissions
                {
                    CanBeDelagated = false
                };
                c.Insert(r);
                c.Insert <TblPermissions>(new[] { r2, r3 });
                var id1 = r.ID;
                var id2 = r2.ID;
                var id3 = r3.ID;

                r = ServerModel.DB.Load <TblPermissions>(id1);
                Assert.IsNotNull(r);
                Assert.IsFalse(r.CanBeDelagated);
                var dt1 = DateTime.Now;
                r.DateTill = dt1;
                ServerModel.DB.Update(r);

                r = ServerModel.DB.Load <TblPermissions>(id1);
                AreEqual(r.DateTill, dt1);

                IList <TblPermissions> ls = ServerModel.DB.Load <TblPermissions>(new[] { id2, id3 });
                ls[0].DateSince = dt1;
                ls[1].DateTill  = dt1;
                ServerModel.DB.Update(ls);

                ls = ServerModel.DB.Load <TblPermissions>(new[] { id2, id3 });
                AreEqual(ls[0].DateSince, dt1);
                AreEqual(ls[1].DateTill, dt1);
            }
        }
Beispiel #10
0
        public void SoftDeleteLookupCascadeDeleteTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var u = GetUniqueUserForTesting();
                var g = new TblGroups {
                    Name = "test group"
                };

                ServerModel.DB.Insert(u);
                c.Insert(g);

                ServerModel.DB.Link(u, g);

                ServerModel.DB.Delete <TblUsers>(u.ID);

                var ids = ServerModel.DB.LookupMany2ManyIds <TblUsers>(g, null);
                Assert.AreEqual(0, ids.Count);
            }
        }
Beispiel #11
0
        public void SubSelectConditionTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var user = GetUniqueUserForTesting();
                c.Insert(user);

                var group1 = new TblGroups
                {
                    Name = user.Email + "_g1"
                };
                var group2 = new TblGroups
                {
                    Name = user.Email + "_g2"
                };
                ServerModel.DB.Insert((IList <TblGroups>) new[] { group1, group2 });

                ServerModel.DB.Link(user, group1);

                var groupIds = ServerModel.DB.LookupMany2ManyIds <TblGroups>(user, null);
                Assert.AreEqual(1, groupIds.Count);
                Assert.Contains(group1.ID, groupIds);

                var groups = ServerModel.DB.Query <TblGroups>(new InCondition <int>(
                                                                  DataObject.Schema.ID,
                                                                  new SubSelectCondition <RelUserGroups>("GroupRef",
                                                                                                         new CompareCondition <int>(
                                                                                                             DataObject.Schema.UserRef,
                                                                                                             new ValueCondition <int>(user.ID),
                                                                                                             COMPARE_KIND.EQUAL
                                                                                                             )
                                                                                                         ),
                                                                  IN_CONDITION_KIND.NOT_IN
                                                                  ));

                Assert.Greater(groups.Count, 0);
                Assert.IsNotNull(groups.Find(p => p.ID == group2.ID));
            }
        }
Beispiel #12
0
        public void BinaryDataOperationsTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var fileContent = new byte[] { 13, 13, 13, 13 };
                var file = new TblFiles
                               {
                                   File = new Binary(fileContent),
                               };
                c.Insert(file);
                var id1 = file.ID;

                var loadedFile = ServerModel.DB.Load<TblFiles>(id1);
                Assert.AreEqual(loadedFile.File.ToArray(), fileContent);

                loadedFile.File = null;
                ServerModel.DB.Update(loadedFile);

                loadedFile = ServerModel.DB.Load<TblFiles>(id1);
                Assert.IsNull(loadedFile.File);
            }
        }
Beispiel #13
0
        public void BinaryDataOperationsTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var fileContent = new byte[] { 13, 13, 13, 13 };
                var file        = new TblFiles
                {
                    File = new Binary(fileContent),
                };
                c.Insert(file);
                var id1 = file.ID;

                var loadedFile = ServerModel.DB.Load <TblFiles>(id1);
                Assert.AreEqual(loadedFile.File.ToArray(), fileContent);

                loadedFile.File = null;
                ServerModel.DB.Update(loadedFile);

                loadedFile = ServerModel.DB.Load <TblFiles>(id1);
                Assert.IsNull(loadedFile.File);
            }
        }
Beispiel #14
0
        public void GetObjectForUserIncludedInGroupTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var user = GetUniqueUserForTesting();
                c.Insert(user);

                var group = new TblGroups {
                    Name = "test group with user"
                };
                c.Insert(group);
                ServerModel.DB.Link(user, group);

                var course = new TblCourses
                {
                    Name        = "test_course",
                    Description = "test description"
                };
                c.Insert(course);

                PermissionsManager.Grand(course, FxCourseOperations.Use, null, group.ID, DateTimeInterval.Full);
                Assert.AreEqual(0, PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, group.ID, FxCourseOperations.Modify.ID, null).Count);

                var ids1 = PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, group.ID, FxCourseOperations.Use.ID, null);
                Assert.AreEqual(1, ids1.Count);
                Assert.AreEqual(course.ID, ids1[0]);

                var ids2 = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.COURSE, user.ID, null, null);
                Assert.AreEqual(1, ids2.Count);
                Assert.AreEqual(course.ID, ids2[0]);

                var ids3 = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.COURSE, user.ID, FxCourseOperations.Use.ID, null);
                Assert.AreEqual(1, ids3.Count);
                Assert.AreEqual(course.ID, ids3[0]);
            }
        }
Beispiel #15
0
        public void GetObjectForUserIncludedInGroupTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var user = GetUniqueUserForTesting();
                c.Insert(user);

                var group = new TblGroups {Name = "test group with user"};
                c.Insert(group);
                ServerModel.DB.Link(user, group);

                var course = new TblCourses
                {
                    Name = "test_course",
                    Description = "test description"
                };
                c.Insert(course);

                PermissionsManager.Grand(course, FxCourseOperations.Use, null, group.ID, DateTimeInterval.Full);
                Assert.AreEqual(0, PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, group.ID, FxCourseOperations.Modify.ID, null).Count);

                var ids1 = PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, group.ID, FxCourseOperations.Use.ID, null);
                Assert.AreEqual(1, ids1.Count);
                Assert.AreEqual(course.ID, ids1[0]);

                var ids2 = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.COURSE, user.ID, null, null);                
                Assert.AreEqual(1, ids2.Count);
                Assert.AreEqual(course.ID, ids2[0]);

                var ids3 = PermissionsManager.GetObjectsForUser(SECURED_OBJECT_TYPE.COURSE, user.ID, FxCourseOperations.Use.ID, null);
                Assert.AreEqual(1, ids3.Count);
                Assert.AreEqual(course.ID, ids3[0]);
            }
        }
Beispiel #16
0
        public void SafeDeleteAndPermissionManagerTest_GetGroupsForObject()
        {
            using (var c = new DataObjectCleaner())
            {
                var course = new TblCourses { Name = "TestCourse3" };
                ServerModel.DB.Insert(course);

                var g = new TblGroups { Name = "TestGroup3" };
                ServerModel.DB.Insert(g);

                PermissionsManager.Grand(course, FxCourseOperations.Use, null, g.ID, DateTimeInterval.Full);
                PermissionsManager.Grand(course, FxCourseOperations.Modify, null, g.ID, DateTimeInterval.Full);

                var res1 = PermissionsManager.GetGroupsForObject(SECURED_OBJECT_TYPE.COURSE, course.ID, null, null);
                Assert.AreEqual(1, res1.Count);
                Assert.AreEqual(g.ID, res1[0]);

                ServerModel.DB.Delete<TblCourses>(course.ID);

                var res2 = PermissionsManager.GetGroupsForObject(SECURED_OBJECT_TYPE.COURSE, course.ID, null, null);
                Assert.AreEqual(0, res2.Count);
            }
        }
Beispiel #17
0
        public void SafeDeleteAndPermissionManagerTest_GetUsersForObject()
        {
            using (var c = new DataObjectCleaner())
            {
                var u = GetUniqueUserForTesting();
                c.Insert(u);

                var g = new TblGroups { Name = "TestGroup1" };
                ServerModel.DB.Insert(g);

                PermissionsManager.Grand(g, FxGroupOperations.View, u.ID, null, DateTimeInterval.Full);
                PermissionsManager.Grand(g, FxGroupOperations.Rename, u.ID, null, DateTimeInterval.Full);

                var res1 = PermissionsManager.GetUsersForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(1, res1.Count);
                Assert.AreEqual(u.ID, res1[0]);

                ServerModel.DB.Delete<TblUsers>(u.ID);

                var res2 = PermissionsManager.GetUsersForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(0, res2.Count);
            }
        }
Beispiel #18
0
        public void GetUsersAndGroupForObjectTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var g = new TblGroups {Name = "test group"};
                c.Insert(g);
                
                var user = GetUniqueUserForTesting();
                c.Insert(user);

                var group = new TblGroups {Name = "test owner group"};
                c.Insert(group);

                PermissionsManager.Grand(g, FxGroupOperations.View, user.ID, null, DateTimeInterval.Full);
                PermissionsManager.Grand(g, FxGroupOperations.ChangeMembers, null, group.ID, DateTimeInterval.Full);

                var ids = PermissionsManager.GetUsersForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(user.ID, ids[0]);

                var gids = PermissionsManager.GetGroupsForObject(SECURED_OBJECT_TYPE.GROUP, g.ID, null, null);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(group.ID, gids[0]);
            }
        }
Beispiel #19
0
        public void SoftDeleteLookupCascadeDeleteTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var u = GetUniqueUserForTesting();
                var g = new TblGroups {Name = "test group"};

                ServerModel.DB.Insert(u);
                c.Insert(g);

                ServerModel.DB.Link(u, g);

                ServerModel.DB.Delete<TblUsers>(u.ID);

                var ids = ServerModel.DB.LookupMany2ManyIds<TblUsers>(g, null);
                Assert.AreEqual(0, ids.Count);
            }
        }
Beispiel #20
0
        public void GetGroupPermissionsTest()
        {
            using (var cl = new DataObjectCleaner())
            {
                var c = new TblCourses
                            {
                                Name = "test course",
                                Description = "unit test course"
                            };
                cl.Insert(c);

                var g = new TblGroups
                            {
                                Name = "test group"
                            };
                cl.Insert(g);

                PermissionsManager.Grand(c, FxCourseOperations.Modify, null, g.ID, new DateTimeInterval(DateTime.Now.AddDays(-1), DateTime.Now.AddDays(1)));

                var ids = PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, g.ID, FxCourseOperations.Modify.ID, DateTime.Now);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(c.ID, ids[0]);

                ids = PermissionsManager.GetObjectsForGroup(SECURED_OBJECT_TYPE.COURSE, g.ID, null, null);
                Assert.AreEqual(1, ids.Count);
                Assert.AreEqual(c.ID, ids[0]);
            }
        }
Beispiel #21
0
        public void SubSelectConditionTest()
        {
            using (var c = new DataObjectCleaner())
            {
                var user = GetUniqueUserForTesting();
                c.Insert(user);

                var group1 = new TblGroups
                                 {
                                     Name = user.Email + "_g1"
                                 };
                var group2 = new TblGroups
                                 {
                                     Name = user.Email + "_g2"
                                 };
                ServerModel.DB.Insert((IList<TblGroups>)new[] {group1, group2});

                ServerModel.DB.Link(user, group1);

                var groupIds = ServerModel.DB.LookupMany2ManyIds<TblGroups>(user, null);
                Assert.AreEqual(1, groupIds.Count);
                Assert.Contains(group1.ID, groupIds);

                var groups = ServerModel.DB.Query<TblGroups>(new InCondition<int>(
                     DataObject.Schema.ID,
                     new SubSelectCondition<RelUserGroups>("GroupRef", 
                                                           new CompareCondition<int>(
                                                               DataObject.Schema.UserRef,
                                                               new ValueCondition<int>(user.ID),
                                                               COMPARE_KIND.EQUAL
                                                               )
                         ),
                     IN_CONDITION_KIND.NOT_IN
                     ));

                Assert.Greater(groups.Count, 0);
                Assert.IsNotNull(groups.Find(p => p.ID == group2.ID));
            }
        }
Beispiel #22
0
        public void LookupIDsTest()
        {
            using (var c = new DataObjectCleaner())
            {
                TblUsers u = GetUniqueUserForTesting();
                c.Insert(u);

                var a1 = new TblUserAnswers 
                { 
                    UserRef = u.ID, 
                    AnswerTypeRef = FxAnswerType.EmptyAnswer.ID 
                };
                var a2 = (TblUserAnswers)a1.Clone();
                var a3 = (TblUserAnswers)a1.Clone();
                ServerModel.DB.Insert<TblUserAnswers>(new[] {a1, a2, a3});

                var ids = ServerModel.DB.LookupIds<TblUserAnswers>(u, null);
                Assert.AreEqual(ids, new[] { a1.ID, a2.ID, a3.ID });

                var g1 = new TblGroups
                             {
                                 Name = "TestGroup1"
                             };
                var g2 = (TblGroups) g1.Clone();
                c.Insert<TblGroups>(new[] {g1, g2});

                ServerModel.DB.Link(u, g1);
                ServerModel.DB.Link(g2, u);

                var uIds = ServerModel.DB.LookupMany2ManyIds<TblGroups>(u, null);
                Assert.AreEqual(new[] { g1.ID, g2.ID }, uIds);

                var g1Ids = ServerModel.DB.LookupMany2ManyIds<TblUsers>(g1, null);
                Assert.AreEqual(new[] {u.ID}, g1Ids);

                var g2Ids = ServerModel.DB.LookupMany2ManyIds<TblUsers>(g2, null);
                Assert.AreEqual(new[] {u.ID}, g2Ids);

                ServerModel.DB.UnLink(g1, u);
                var newIds = ServerModel.DB.LookupMany2ManyIds<TblGroups>(u, null);
                Assert.AreEqual(new[] {g2.ID}, newIds);
            }
        }