public void RoomPermissionsUpdatedTest() { // Arrange var roomVm = viewModelFactory.GetViewModel <RoomViewModel>(); roomVm.Model = room; var originalGrants = DesignTimeHelper.GetRoomPermissionGrants(); var goodGrant1 = new RoomPermissionGrant { RoomPermissionGrantId = Guid.NewGuid(), RoomPermissionTag = Guid.NewGuid().ToString(), UserId = user.UserId, User = user, RoomId = room.RoomId }; var goodGrant2 = new RoomPermissionGrant { RoomPermissionGrantId = Guid.NewGuid(), RoomPermissionTag = Guid.NewGuid().ToString(), UserId = user.UserId, User = user, RoomId = room.RoomId }; var badGrant1 = new RoomPermissionGrant { RoomPermissionGrantId = Guid.NewGuid(), RoomPermissionTag = Guid.NewGuid().ToString(), UserId = Guid.NewGuid(), User = null, RoomId = room.RoomId }; var badGrant2 = new RoomPermissionGrant { RoomPermissionGrantId = Guid.NewGuid(), RoomPermissionTag = Guid.NewGuid().ToString(), UserId = user.UserId, User = user, RoomId = Guid.NewGuid() }; var newGrants = new ObservableCollection <RoomPermissionGrant> { goodGrant1, goodGrant2, badGrant1, badGrant2 }; var localPerms = viewModelFactory.GetViewModel <SecurityPrincipalRoomPermissionGrantCollectionViewModel>(); localPerms.SecurityPrincipalId = user.UserId; localPerms.Models = originalGrants; // Act mockRoomService.Raise(rs => rs.RoomPermissionsForUserUpdated += null, new EventArgs <ObservableCollection <RoomPermissionGrant> >(newGrants)); // Assert Assert.AreEqual(2, localPerms.ViewModelCount); Assert.AreEqual(2, localPerms.ViewModels.Count); Assert.IsTrue(localPerms.ViewModels.Any(vm => vm.Model.RoomPermissionGrantId == goodGrant1.RoomPermissionGrantId)); Assert.IsTrue(localPerms.ViewModels.Any(vm => vm.Model.RoomPermissionGrantId == goodGrant2.RoomPermissionGrantId)); }
public void RoomPermissionGrantCollectionSavePermissionsTest() { // Setup the mock room service mockRoomService.Setup(rs => rs.GetRoomPermissions(It.IsAny <OperationCallback <ObservableCollection <RoomPermission> > >())) .Callback((OperationCallback <ObservableCollection <RoomPermission> > callback) => callback(null, DesignTimeHelper.GetRoomPermissions())); // Setup the room and various users. var localUserVm = viewModelFactory.GetViewModel <LocalUserViewModel>(); localUserVm.Model = user; var roomVm = viewModelFactory.GetViewModel <RoomViewModel>(); roomVm.Model = room; var user1 = user; var user1Vm = viewModelFactory.GetViewModel <UserViewModel>(u => u.UserId == user1.UserId); user1Vm.Model = user1; var user2 = new RegisteredUser { AuthenticationGroupId = user1.AuthenticationGroupId, UserId = Guid.NewGuid(), UserTag = Guid.NewGuid().ToString(), UserName = "******" }; var user2Vm = viewModelFactory.GetViewModel <UserViewModel>(u => u.UserId == user2.UserId); user2Vm.Model = user2; var user3 = new RegisteredUser { AuthenticationGroupId = user1.AuthenticationGroupId, UserId = Guid.NewGuid(), UserTag = Guid.NewGuid().ToString(), UserName = "******" }; var user3Vm = viewModelFactory.GetViewModel <UserViewModel>(u => u.UserId == user3.UserId); user3Vm.Model = user3; // Load the users into the grants container var grantsVm = viewModelFactory.GetViewModel <RoomPermissionGrantCollectionViewModel>(); grantsVm.SecurityPrincipals.Add(user1Vm); grantsVm.SecurityPrincipals.Add(user2Vm); grantsVm.SecurityPrincipals.Add(user3Vm); // Establish their permissions. user1Vm.RoomPermissionGrants.Models = DesignTimeHelper.GetRoomPermissionGrants(user1).Where(g => g.UserId == user1.UserId).ToObservableCollection(); user2Vm.RoomPermissionGrants.Models = DesignTimeHelper.GetRoomPermissionGrants(user2).Where(g => g.UserId == user2.UserId).ToObservableCollection(); user3Vm.RoomPermissionGrants.Models = DesignTimeHelper.GetRoomPermissionGrants(user3).Where(g => g.UserId == user3.UserId).ToObservableCollection(); // Confirm stuff is looking good so far and update grants // When this is done, each Join and Chat should be selected, and Administer and Share should not be. foreach (var userVm in grantsVm.SecurityPrincipals) { ConfirmGrantSynchronization(userVm.RoomPermissionGrants); userVm.RoomPermissionGrants.PossibleGrants.First(g => g.Model.RoomPermissionTag == "Administer").IsSelected = false; userVm.RoomPermissionGrants.PossibleGrants.First(g => g.Model.RoomPermissionTag == "Chat").IsSelected = true; ConfirmGrantSynchronization(userVm.RoomPermissionGrants); } // Setup the mock room service so we can handle validations. mockRoomService.Setup(rs => rs.UpdateRoomPermissions(It.IsAny <LoginSession>(), It.IsAny <Guid>(), It.IsAny <bool>(), It.IsAny <ObservableCollection <RoomPermissionGrant> >(), It.IsAny <OperationCallback>())) .Callback((LoginSession loginSession, Guid roomId, bool isPublic, ObservableCollection <RoomPermissionGrant> grants, OperationCallback callback) => { Assert.AreEqual(6, grants.Count); Assert.AreEqual(0, grants.Count(g => g.RoomPermissionTag == "Administer")); Assert.AreEqual(0, grants.Count(g => g.RoomPermissionTag == "Share")); Assert.AreEqual(3, grants.Count(g => g.RoomPermissionTag == "Join")); Assert.AreEqual(3, grants.Count(g => g.RoomPermissionTag == "Chat")); callback(null); }); // Save it and trigger the validation grantsVm.Save(); mockRoomService.VerifyAll(); }