public void TestAddPermissionThrowsExceptionIfCurrentUserDoesNotHaveRights1()
        {
            try
            {
                #region Arrange
                Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
                ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
                ControllerRecordFakes.FakeRoles(5, RoleRepository);
                ControllerRecordFakes.FakeUsers(3, UserRepository);
                ControllerRecordFakes.FakePermissions(1, PermissionRepository);

                UserService.Expect(a => a.CanUserManageGivenLogin("Name3", "UserName", "LoginId3")).Return(false).Repeat.Any();
                PermissionRepository.Expect(a => a.EnsurePersistent(Arg <Permission> .Is.Anything)).Repeat.Any();
                #endregion Arrange

                #region Act
                Controller.AddPermission("Name3", "LoginId3", 3);
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("UserName does not have access to manage LoginId3 within the Name3 application", ex.Message);
                UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name3", "UserName", "LoginId3"));
                PermissionRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <Permission> .Is.Anything));
                #endregion Assert
                throw;
            }
        }
        public void TestGetByApplication1()
        {
            #region Arrange
            UserService = new UserService(UnitService, UnitAssociationRepository, PermissionRepository);
            ControllerRecordFakes.FakeUnits(6, UnitRepository);
            ControllerRecordFakes.FakeRoles(6, RoleRepository);
            UnitService.Expect(a => a.GetVisibleByUser("Name1", "UserName")).Return(UnitRepository.Queryable.Where(a => a.Id == 2 || a.Id == 4)).Repeat.Any();
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);

            var users = new List <User>();
            for (int i = 0; i < 5; i++)
            {
                users.Add(CreateValidEntities.User(i + 1));
                users[i].UnitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                users[i].UnitAssociations[0].Unit = UnitRepository.GetNullableById(i + 1);
            }
            ControllerRecordFakes.FakeUsers(0, UserRepository, users);

            var permissions = new List <Permission>();
            for (int i = 0; i < 5; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].User        = UserRepository.GetNullableById(i + 1);
                permissions[i].Application = ApplicationRepository.Queryable.First();
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            ControllerRecordFakes.FakePermissions(0, PermissionRepository, permissions);
            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 5; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                unitAssociations[i].User        = UserRepository.GetNullableById(i + 1);
                unitAssociations[i].Application = ApplicationRepository.Queryable.First();
                unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
            }
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);

            #endregion Arrange

            #region Act
            var result = UserService.GetByApplication("Name1", "UserName");
            //var allowedUnitIds = UnitService.GetVisibleByUser("Name1", "UserName").ToList().Select(x => x.Id).ToList();

            ////Get everyone with perms, possibly filtered by role and unit
            //var usersWithPermissions = from p in PermissionRepository.Queryable
            //                           join u in UnitAssociationRepository.Queryable on
            //                               new { User = p.User.Id, App = p.Application.Id }
            //                               equals new { User = u.User.Id, App = u.Application.Id }
            //                           where p.Application.Name == "Name1"
            //                           where p.User.UnitAssociations.Any(a => allowedUnitIds.Contains(a.Unit.Id))
            //                           select new { Permissions = p, UnitAssociations = u };
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Count());
            Assert.AreEqual("LoginId2", result.ElementAt(0).LoginId);
            Assert.AreEqual("LoginId4", result.ElementAt(1).LoginId);
            #endregion Assert
        }
        public void TestAddPermission()
        {
            #region Arrange
            Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
            ControllerRecordFakes.FakeRoles(5, RoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            ControllerRecordFakes.FakePermissions(1, PermissionRepository);

            UserService.Expect(a => a.CanUserManageGivenLogin("Name3", "UserName", "LoginId3")).Return(true).Repeat.Any();
            RoleService.Expect(a => a.GetVisibleByUser("Name3", "UserName")).Return(RoleRepository.Queryable).Repeat.Any();
            PermissionRepository.Expect(a => a.EnsurePersistent(Arg <Permission> .Is.Anything)).Repeat.Any();
            #endregion Arrange

            #region Act
            Controller.AddPermission("Name3", "LoginId3", 2);
            #endregion Act

            #region Assert
            UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name3", "UserName", "LoginId3"));
            RoleService.AssertWasCalled(a => a.GetVisibleByUser("Name3", "UserName"));
            PermissionRepository.AssertWasCalled(a => a.EnsurePersistent(Arg <Permission> .Is.Anything));
            var args = (Permission)PermissionRepository.GetArgumentsForCallsMadeOn(a => a.EnsurePersistent(Arg <Permission> .Is.Anything))[0][0];
            Assert.IsNotNull(args);
            Assert.AreEqual("Name2", args.Role.Name);
            Assert.AreEqual("LoginId3", args.User.LoginId);
            Assert.AreEqual("Name3", args.Application.ToString());
            Assert.IsFalse(args.Inactive);
            #endregion Assert
        }
        public void TestAddUnitThrowsExceptionIfCurrentUserDoesNotHaveRights2()
        {
            try
            {
                #region Arrange
                Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
                ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
                ControllerRecordFakes.FakeUnits(5, UnitRepository);
                ControllerRecordFakes.FakeUsers(3, UserRepository);
                ControllerRecordFakes.FakeUnitAssociations(1, UnitAssociationRepository);

                UnitService.Expect(a => a.GetVisibleByUser("Name2", "UserName")).Return(UnitRepository.Queryable.Where(a => a.Id >= 4)).Repeat.Any();

                UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(true).Repeat.Any();
                UnitAssociationRepository.Expect(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything)).Repeat.Any();
                #endregion Arrange

                #region Act
                Controller.AddUnit("Name2", "LoginId1", 3);
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("UserName does not have access to manage the given unit", ex.Message);
                UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
                UnitAssociationRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything));
                #endregion Assert
                throw;
            }
        }
        public void TestCanUserManageGivenLogin3()
        {
            #region Arrange
            UserService = new UserService(UnitService, UnitAssociationRepository, PermissionRepository);
            ControllerRecordFakes.FakeUnits(6, UnitRepository);
            ControllerRecordFakes.FakeRoles(6, RoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(6, UserRepository);

            //These are the units that the current user has if he has the correct access
            UnitService.Expect(a => a.GetVisibleByUser("Name1", "UserName")).Return(UnitRepository.Queryable.Where(a => a.Id == 2 || a.Id == 4)).Repeat.Any();

            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 5; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                unitAssociations[i].User        = UserRepository.GetNullableById(3); //Different LoginId
                unitAssociations[i].Application = ApplicationRepository.Queryable.First();
                unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
            }
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);
            #endregion Arrange

            #region Act
            var result = UserService.CanUserManageGivenLogin("Name1", "UserName", "LoginId2");
            #endregion Act

            #region Assert
            Assert.IsFalse(result);
            #endregion Assert
        }
        public void TestAddPermissionThrowsExceptionIfloginIdDuplicate()
        {
            try
            {
                #region Arrange
                Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
                ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
                ControllerRecordFakes.FakeRoles(5, RoleRepository);
                var users = new List <User> {
                    CreateValidEntities.User(1), CreateValidEntities.User(1)
                };
                ControllerRecordFakes.FakeUsers(3, UserRepository, users);
                ControllerRecordFakes.FakePermissions(1, PermissionRepository);

                RoleService.Expect(a => a.GetVisibleByUser("Name2", "UserName")).Return(RoleRepository.Queryable).Repeat.Any();
                UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(true).Repeat.Any();
                PermissionRepository.Expect(a => a.EnsurePersistent(Arg <Permission> .Is.Anything)).Repeat.Any();
                #endregion Arrange

                #region Act
                Controller.AddPermission("Name2", "LoginId1", 3);
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("Sequence contains more than one element", ex.Message);
                UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
                RoleService.AssertWasCalled(a => a.GetVisibleByUser("Name2", "UserName"));
                PermissionRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <Permission> .Is.Anything));
                #endregion Assert
                throw;
            }
        }
        public void TestAddUnitWhereUnitAssociationAlreadyExists()
        {
            #region Arrange
            Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUnits(3, UnitRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            var unitAssociations = new List <UnitAssociation>();
            unitAssociations.Add(CreateValidEntities.UnitAssociation(1));
            unitAssociations[0].Application = ApplicationRepository.GetNullableById(2);
            unitAssociations[0].User        = UserRepository.GetNullableById(1);
            unitAssociations[0].Unit        = UnitRepository.GetNullableById(3);
            ControllerRecordFakes.FakeUnitAssociations(1, UnitAssociationRepository, unitAssociations);

            UnitService.Expect(a => a.GetVisibleByUser("Name2", "UserName")).Return(UnitRepository.Queryable).Repeat.Any();
            UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(true).Repeat.Any();
            UnitAssociationRepository.Expect(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything)).Repeat.Any();
            #endregion Arrange

            #region Act
            Controller.AddUnit("Name2", "LoginId1", 3);
            #endregion Act

            #region Assert
            UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
            UnitAssociationRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything));
            UnitService.AssertWasCalled(a => a.GetVisibleByUser("Name2", "UserName"));
            #endregion Assert
        }
        public void TestAddPermissionWhenPermissionAlreadyExists()
        {
            #region Arrange
            Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
            ControllerRecordFakes.FakeRoles(5, RoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            var permissions = new List <Permission> {
                CreateValidEntities.Permission(1)
            };
            permissions[0].Application = ApplicationRepository.GetNullableById(3);
            permissions[0].User        = UserRepository.GetNullableById(3);
            permissions[0].Role        = RoleRepository.GetNullableById(2);

            ControllerRecordFakes.FakePermissions(1, PermissionRepository, permissions);

            UserService.Expect(a => a.CanUserManageGivenLogin("Name3", "UserName", "LoginId3")).Return(true).Repeat.Any();
            RoleService.Expect(a => a.GetVisibleByUser("Name3", "UserName")).Return(RoleRepository.Queryable).Repeat.Any();
            PermissionRepository.Expect(a => a.EnsurePersistent(Arg <Permission> .Is.Anything)).Repeat.Any();
            #endregion Arrange

            #region Act
            Controller.AddPermission("Name3", "LoginId3", 2);
            #endregion Act

            #region Assert
            UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name3", "UserName", "LoginId3"));
            RoleService.AssertWasCalled(a => a.GetVisibleByUser("Name3", "UserName"));
            PermissionRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <Permission> .Is.Anything));

            #endregion Assert
        }
        public void TestRoleServiceGetVisibleByUserReturnsExpectedResults3()
        {
            #region Arrange
            var applicationRoleRepository = FakeRepository <ApplicationRole>();
            RoleService = new RoleService(PermissionRepository, applicationRoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            ControllerRecordFakes.FakeRoles(10, RoleRepository);
            var permissions = new List <Permission>();
            for (int i = 0; i < 7; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].Application = ApplicationRepository.Queryable.First();
                permissions[i].User        = UserRepository.GetNullableById(2);
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            permissions[1].Application = ApplicationRepository.GetNullableById(2);
            permissions[2].User        = UserRepository.GetNullableById(1);
            ControllerRecordFakes.FakePermissions(0, PermissionRepository, permissions);

            applicationRoleRepository.Expect(a => a.Queryable).Return(new List <ApplicationRole>().AsQueryable()).Repeat.Any();

            #endregion Arrange

            #region Act
            var result = RoleService.GetVisibleByUser("Name2", "LoginId2");
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IQueryable <Role>));
            Assert.AreEqual(1, result.Count());
            Assert.AreEqual("Name2", result.ElementAt(0).Name);
            #endregion Assert
        }
        public void TestAddUnitThrowsExceptionIfApplicationNotFound()
        {
            try
            {
                #region Arrange
                Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
                ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
                ControllerRecordFakes.FakeUnits(3, UnitRepository);
                ControllerRecordFakes.FakeUsers(3, UserRepository);
                ControllerRecordFakes.FakeUnitAssociations(1, UnitAssociationRepository);
                UnitService.Expect(a => a.GetVisibleByUser("Name4", "UserName")).Return(UnitRepository.Queryable).Repeat.Any();
                UserService.Expect(a => a.CanUserManageGivenLogin("Name4", "UserName", "LoginId1")).Return(true).Repeat.Any();
                UnitAssociationRepository.Expect(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything)).Repeat.Any();
                #endregion Arrange

                #region Act
                Controller.AddUnit("Name4", "LoginId1", 3);
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("Sequence contains no elements", ex.Message);
                UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name4", "UserName", "LoginId1"));
                UnitService.AssertWasCalled(a => a.GetVisibleByUser("Name4", "UserName"));
                UnitAssociationRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything));
                #endregion Assert
                throw;
            }
        }
        public void TestRoleServiceGetVisibleByUserReturnsExpectedResults4()
        {
            #region Arrange
            var applicationRoleRepository = FakeRepository <ApplicationRole>();
            RoleService = new RoleService(PermissionRepository, applicationRoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            ControllerRecordFakes.FakeRoles(10, RoleRepository);
            var permissions = new List <Permission>();
            for (int i = 0; i < 10; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].Application = ApplicationRepository.Queryable.First();
                permissions[i].User        = UserRepository.GetNullableById(3);
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            permissions[4].User = UserRepository.GetNullableById(2);
            ControllerRecordFakes.FakePermissions(0, PermissionRepository, permissions);

            var applicationRoles = new List <ApplicationRole>();
            for (int i = 0; i < 10; i++)
            {
                applicationRoles.Add(CreateValidEntities.ApplicationRole(i + 1));
                applicationRoles[i].Role        = RoleRepository.GetNullableById(i + 1);
                applicationRoles[i].Application = ApplicationRepository.GetNullableById(1);
            }
            ControllerRecordFakes.FakeApplicationRoles(0, applicationRoleRepository, applicationRoles);

            #endregion Arrange

            #region Act
            //var manageableRoles = from ar in applicationRoleRepository.Queryable
            //                      where ar.Application.Name == "Name1" &&
            //                            ar.Level > (
            //                                           (from p in PermissionRepository.Queryable
            //                                            join a in applicationRoleRepository.Queryable on
            //                                                new { Role = p.Role.Id, App = p.Application.Id }
            //                                                equals new { Role = a.Role.Id, App = a.Application.Id }
            //                                            where p.Application.Name ==  "Name1" &&
            //                                                  p.User.LoginId == "LoginId2" &&
            //                                                  a.Level != null
            //                                            select a.Level).Max()
            //                                       )
            //                      select ar.Role;


            var result = RoleService.GetVisibleByUser("Name1", "LoginId2");
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IQueryable <Role>));
            Assert.AreEqual(6, result.Count());
            for (int i = 1; i < 6; i++)
            {
                Assert.AreEqual(string.Format("Name{0}", (i + 4)), result.ElementAt(i).Name);
            }

            #endregion Assert
        }
Пример #12
0
        public void TestInsertNewUserThrowsExceptionIfNewUserIsNotValid()
        {
            const string applicationName = "SomeApp";

            ControllerRecordFakes.FakeUsers(3, UserRepository);
            AutomapperConfig.Configure();
            try
            {
                #region Arrange
                var serviceUser = new ServiceUser();
                serviceUser.Login     = null;
                serviceUser.LastName  = null;
                serviceUser.FirstName = "FirstName";
                #endregion Arrange

                #region Act
                Controller.InsertNewUser(applicationName, serviceUser, 1, 1);
                #endregion Act
            }
            catch (Exception ex)
            {
                Assert.IsNotNull(ex);
                Assert.AreEqual("User not valid: may not be null or empty", ex.Message);
                throw;
            }
        }
        public void TestGetVisibleByUserReturnsExpectedResults1()
        {
            #region Arrange
            IRepository <School> schoolRepository = FakeRepository <School>();
            Controller.Repository.Expect(a => a.OfType <School>()).Return(schoolRepository).Repeat.Any();
            UnitService = new UnitService(RoleService, schoolRepository, UnitRepository, UnitAssociationRepository);
            var roles = new List <Role>();
            roles.Add(CreateValidEntities.Role(1));
            roles[0].Name = "ManageAll";
            roles.Add(CreateValidEntities.Role(2));
            roles[1].Name = "ManageSchool";
            ControllerRecordFakes.FakeRoles(5, RoleRepository, roles);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUnits(3, UnitRepository);
            RoleService.Expect(a => a.GetManagementRolesForUserInApplication("Name2", "UserName")).Return(RoleRepository.Queryable.Select(a => a.Name).ToList()).Repeat.Any();
            #endregion Arrange

            #region Act
            var result = UnitService.GetVisibleByUser("Name2", "UserName");
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IQueryable <Unit>));
            Assert.AreEqual(3, result.Count());
            Assert.AreEqual("ShortName2", result.ElementAt(1).ShortName);
            #endregion Assert
        }
Пример #14
0
        public void TestInsertNewUserReturnsExpectedValue1()
        {
            #region Arrange
            const string applicationName = "Name2";
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            AutomapperConfig.Configure();
            var serviceUser = CreateValidEntities.ServiceUser(4);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeRoles(3, RoleRepository);
            ControllerRecordFakes.FakeUnits(3, UnitRepository);
            ControllerRecordFakes.FakePermissions(3, PermissionRepository);
            ControllerRecordFakes.FakeUnitAssociations(3, UnitAssociationRepository);
            #endregion Arrange

            #region Act
            var result = Controller.InsertNewUser(applicationName, serviceUser, 3, 2)
                         .AssertResultIs <JsonResult>();
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            var result2 = (ServiceUser)result.Data;
            Assert.IsNotNull(result2);
            Assert.AreEqual("*****@*****.**", result2.Email);
            Assert.AreEqual("FirstName4", result2.FirstName);
            Assert.AreEqual("LastName4", result2.LastName);
            Assert.AreEqual("LoginId4", result2.Login);
            Assert.AreEqual("+1 530 755 7777", result2.Phone);

            UserRepository.AssertWasCalled(a => a.EnsurePersistent(Arg <User> .Is.Anything));
            var userArgs = (User)UserRepository.GetArgumentsForCallsMadeOn(a => a.EnsurePersistent(Arg <User> .Is.Anything))[0][0];
            Assert.AreEqual("*****@*****.**", userArgs.Email);
            Assert.AreEqual("FirstName4", userArgs.FirstName);
            Assert.IsFalse(userArgs.Inactive);
            Assert.AreEqual("LastName4", userArgs.LastName);
            Assert.AreEqual("LoginId4", userArgs.LoginId);
            Assert.AreEqual("+1 530 755 7777", userArgs.Phone);

            PermissionRepository.AssertWasCalled(a => a.EnsurePersistent(Arg <Permission> .Is.Anything));
            var permissionArgs = (Permission)PermissionRepository.GetArgumentsForCallsMadeOn(a => a.EnsurePersistent(Arg <Permission> .Is.Anything))[0][0];
            Assert.IsNotNull(permissionArgs);
            Assert.AreEqual(applicationName, permissionArgs.Application.ToString());
            Assert.AreEqual("Name3", permissionArgs.Role.Name);
            Assert.IsFalse(permissionArgs.Inactive);
            Assert.AreEqual(userArgs.LoginId, permissionArgs.User.LoginId);

            UnitAssociationRepository.AssertWasCalled(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything));
            var unitAssociationArgs = (UnitAssociation)UnitAssociationRepository.GetArgumentsForCallsMadeOn(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything))[0][0];
            Assert.IsNotNull(unitAssociationArgs);
            Assert.AreEqual(applicationName, unitAssociationArgs.Application.ToString());
            Assert.AreEqual("ShortName2", unitAssociationArgs.Unit.ShortName);
            Assert.IsFalse(unitAssociationArgs.Inactive);
            Assert.AreEqual(userArgs.LoginId, unitAssociationArgs.User.LoginId);

            #endregion Assert
        }
        public void TestManageReturnsView4()
        {
            #region Arrange
            Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
            ControllerRecordFakes.FakeUnits(3, UnitRepository);
            UnitService.Expect(a => a.GetVisibleByUser("appName", "UserName")).Return(UnitRepository.GetAll().AsQueryable()).Repeat.Any();
            ControllerRecordFakes.FakeRoles(3, RoleRepository);
            RoleService.Expect(a => a.GetVisibleByUser("appName", "UserName")).Return(RoleRepository.GetAll().AsQueryable()).Repeat.Any();
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            UserService.Expect(a => a.GetByApplication("appName", "UserName")).Return(UserRepository.Queryable).Repeat.Any();
            var application = CreateValidEntities.Application(1);
            application.Name = "appName";
            var permissions = new List <Permission>();
            for (int i = 0; i < 4; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].Application = application;
                permissions[i].User        = UserRepository.Queryable.First();
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            permissions[1].User        = UserRepository.GetNullableById(2);
            permissions[2].User        = UserRepository.GetNullableById(3);
            permissions[3].Role        = RoleRepository.GetNullableById(1);
            permissions[3].Application = CreateValidEntities.Application(9); // This will cause these permissions to be filtered out
            ControllerRecordFakes.FakePermissions(0, PermissionRepository, permissions);
            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 4; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                unitAssociations[i].Application = application;
                unitAssociations[i].User        = UserRepository.Queryable.First();
                unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
            }
            unitAssociations[1].User        = UserRepository.GetNullableById(2);
            unitAssociations[2].User        = UserRepository.GetNullableById(3);
            unitAssociations[2].Application = CreateValidEntities.Application(9); //This one is filtered out
            unitAssociations[3].Unit        = UnitRepository.GetNullableById(1);
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);
            #endregion Arrange

            #region Act
            Controller.Manage("appName")
            .AssertViewRendered()
            .WithViewData <UserManagementViewModel>();
            #endregion Act

            #region Assert
            UnitService.AssertWasCalled(a => a.GetVisibleByUser("appName", "UserName"));
            RoleService.AssertWasCalled(a => a.GetVisibleByUser("appName", "UserName"));
            UserService.AssertWasCalled(a => a.GetByApplication("appName", "UserName"));
            #endregion Assert
        }
Пример #16
0
        public void TestRemoveUnitThrowsExceptionIfRecordNotFound4()
        {
            try
            {
                #region Arrange
                Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
                ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
                ControllerRecordFakes.FakeUnits(3, UnitRepository);
                ControllerRecordFakes.FakeUsers(3, UserRepository);

                var unitAssociations = new List <UnitAssociation>();
                for (int i = 0; i < 3; i++)
                {
                    unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                    unitAssociations[i].Application = ApplicationRepository.GetNullableById(2);
                    unitAssociations[i].User        = UserRepository.GetNullableById(1);
                    unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
                }
                unitAssociations.Add(CreateValidEntities.UnitAssociation(4));
                unitAssociations[3].Application = ApplicationRepository.GetNullableById(2);
                unitAssociations[3].User        = UserRepository.GetNullableById(1);
                unitAssociations[3].Unit        = UnitRepository.GetNullableById(2); //Duplicate

                ControllerRecordFakes.FakeUnitAssociations(2, UnitAssociationRepository, unitAssociations);
                UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(true).Repeat.Any();
                UnitService.Expect(a => a.GetVisibleByUser("Name2", "UserName")).Return(UnitRepository.Queryable).Repeat.Any();
                #endregion Arrange

                #region Act
                Controller.RemoveUnit("Name2", "LoginId1", 2);
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("Sequence contains more than one element", ex.Message);
                UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
                UnitService.AssertWasCalled(a => a.GetVisibleByUser("Name2", "UserName"));
                UnitAssociationRepository.AssertWasNotCalled(a => a.Remove(Arg <UnitAssociation> .Is.Anything));
                #endregion Assert
                throw;
            }
        }
        public void TestGetManagementRolesForUserInApplicationReturnsExpectedValue1()
        {
            #region Arrange
            var applicationRoleRepository = FakeRepository <ApplicationRole>();
            RoleService = new RoleService(PermissionRepository, applicationRoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);

            var roles = new List <Role>();
            roles.Add(CreateValidEntities.Role(1));
            roles.Add(CreateValidEntities.Role(2));
            roles.Add(CreateValidEntities.Role(3));
            roles.Add(CreateValidEntities.Role(4));
            roles[0].Name = "ManageAll";
            roles[1].Name = "ManageSchool";
            roles[2].Name = "ManageUnit";
            roles[3].Name = "ManageMe"; //Not special
            ControllerRecordFakes.FakeRoles(5, RoleRepository, roles);

            var permissions = new List <Permission>();
            for (int i = 0; i < 6; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].Application = ApplicationRepository.GetNullableById(1);
                permissions[i].User        = UserRepository.GetNullableById(2);
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            ControllerRecordFakes.FakePermissions(6, PermissionRepository, permissions);
            #endregion Arrange

            #region Act
            var result = RoleService.GetManagementRolesForUserInApplication("Name1", "LoginId2");
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(4, result.Count);
            Assert.AreEqual("ManageAll", result.ElementAt(0));
            Assert.AreEqual("ManageSchool", result.ElementAt(1));
            Assert.AreEqual("ManageUnit", result.ElementAt(2));
            Assert.AreEqual("ManageMe", result.ElementAt(3));
            #endregion Assert
        }
        public void TestRemovePermissionThrowsExceptionPermissionNotUnique()
        {
            try
            {
                #region Arrange
                Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
                ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
                ControllerRecordFakes.FakeUsers(3, UserRepository);
                ControllerRecordFakes.FakeRoles(5, RoleRepository);
                var permissions = new List <Permission>();
                for (int i = 0; i < 3; i++)
                {
                    permissions.Add(CreateValidEntities.Permission(i + 1));
                    permissions[i].User        = UserRepository.GetNullableById(1);
                    permissions[i].Application = ApplicationRepository.GetNullableById(2);
                    permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
                }
                permissions[1].Role = RoleRepository.GetNullableById(1);

                ControllerRecordFakes.FakePermissions(1, PermissionRepository, permissions);
                UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(true).Repeat.Any();
                RoleService.Expect(a => a.GetVisibleByUser("Name2", "UserName")).Return(RoleRepository.Queryable).Repeat.Any();
                PermissionRepository.Expect(a => a.Remove(Arg <Permission> .Is.Anything)).Repeat.Any();
                #endregion Arrange

                #region Act
                Controller.RemovePermission("Name2", "LoginId1", 1);
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("Sequence contains more than one element", ex.Message);
                UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
                RoleService.AssertWasCalled(a => a.GetVisibleByUser("Name2", "UserName"));
                PermissionRepository.AssertWasNotCalled(a => a.Remove(Arg <Permission> .Is.Anything));
                #endregion Assert
                throw;
            }
        }
Пример #19
0
        public void TestLoadUserThrowsExceptionIfUserNotFound()
        {
            try
            {
                #region Arrange
                ControllerRecordFakes.FakeUsers(3, UserRepository);
                #endregion Arrange

                #region Act
                Controller.LoadUser("blah", "LoginId4");
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("Sequence contains no elements", ex.Message);
                #endregion Assert
                throw;
            }
        }
        public void TestCanUserManageGivenLogin1()
        {
            #region Arrange
            UserService = new UserService(UnitService, UnitAssociationRepository, PermissionRepository);
            ControllerRecordFakes.FakeUnits(6, UnitRepository);
            ControllerRecordFakes.FakeRoles(6, RoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(6, UserRepository);

            //These are the units that the current user has if he has the correct access
            UnitService.Expect(a => a.GetVisibleByUser("Name1", "UserName")).Return(UnitRepository.Queryable.Where(a => a.Id == 2 || a.Id == 4)).Repeat.Any();

            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 5; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                unitAssociations[i].User        = UserRepository.GetNullableById(i + 1);
                unitAssociations[i].Application = ApplicationRepository.Queryable.First();
                unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
            }
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);
            #endregion Arrange

            #region Act
            var result = UserService.CanUserManageGivenLogin("Name1", "UserName", "LoginId2");

            //var unitsForLoginToManage = from u in UnitAssociationRepository.Queryable
            //                            where u.Application.Name == "Name1"
            //                                  && u.User.LoginId == "LoginId2"
            //                            select u.Unit;
            //var numIntersectingUnits1 = unitsForLoginToManage.ToFuture();
            ////The linq provider can't handle Intersect() so we need to turn them into Enumerable first.
            ////Using to future does this and makes the queries more efficient by batching them
            //var numIntersectingUnits = unitsForLoginToManage.ToFuture().Intersect(UnitRepository.Queryable.Where(a => a.Id == 2 || a.Id == 4).ToFuture()).Count();
            #endregion Act

            #region Assert
            Assert.IsTrue(result);
            #endregion Assert
        }
        public void TestRemovePermissionThrowsExceptionIfCurrentUserDoesNotHaveRights1()
        {
            try
            {
                #region Arrange
                Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
                ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
                ControllerRecordFakes.FakeUsers(3, UserRepository);
                ControllerRecordFakes.FakeRoles(5, RoleRepository);
                var permissions = new List <Permission>();
                for (int i = 0; i < 3; i++)
                {
                    permissions.Add(CreateValidEntities.Permission(i + 1));
                    permissions[i].User        = UserRepository.GetNullableById(1);
                    permissions[i].Application = ApplicationRepository.GetNullableById(2);
                    permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
                }
                permissions[1].Role = RoleRepository.GetNullableById(4);
                ControllerRecordFakes.FakePermissions(1, PermissionRepository, permissions);
                UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(false).Repeat.Any();
                PermissionRepository.Expect(a => a.Remove(Arg <Permission> .Is.Anything)).Repeat.Any();
                #endregion Arrange

                #region Act
                Controller.RemovePermission("Name2", "LoginId1", 4);
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("UserName does not have access to manage LoginId1 within the Name2 application", ex.Message);
                UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
                PermissionRepository.AssertWasNotCalled(a => a.Remove(Arg <Permission> .Is.Anything));
                #endregion Assert
                throw;
            }
        }
Пример #22
0
        public void TestLoadUserThrowsExceptionIfTwoUsersFound()
        {
            try
            {
                #region Arrange
                var users = new List <User>();
                users.Add(CreateValidEntities.User(2));
                ControllerRecordFakes.FakeUsers(3, UserRepository, users);
                #endregion Arrange

                #region Act
                Controller.LoadUser("blah", "LoginId2");
                #endregion Act
            }
            catch (Exception ex)
            {
                #region Assert
                Assert.IsNotNull(ex);
                Assert.AreEqual("Sequence contains more than one element", ex.Message);
                #endregion Assert
                throw;
            }
        }
        public void TestRemovePermission()
        {
            #region Arrange
            Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            ControllerRecordFakes.FakeRoles(5, RoleRepository);
            var permissions = new List <Permission>();
            for (int i = 0; i < 3; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].User        = UserRepository.GetNullableById(1);
                permissions[i].Application = ApplicationRepository.GetNullableById(2);
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            permissions[1].Role = RoleRepository.GetNullableById(4);
            ControllerRecordFakes.FakePermissions(1, PermissionRepository, permissions);
            UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(true).Repeat.Any();
            RoleService.Expect(a => a.GetVisibleByUser("Name2", "UserName")).Return(RoleRepository.Queryable).Repeat.Any();
            PermissionRepository.Expect(a => a.Remove(Arg <Permission> .Is.Anything)).Repeat.Any();
            #endregion Arrange

            #region Act
            Controller.RemovePermission("Name2", "LoginId1", 4);
            #endregion Act

            #region Assert
            UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
            RoleService.AssertWasCalled(a => a.GetVisibleByUser("Name2", "UserName"));
            PermissionRepository.AssertWasCalled(a => a.Remove(Arg <Permission> .Is.Anything));
            var args = (Permission)PermissionRepository.GetArgumentsForCallsMadeOn(a => a.Remove(Arg <Permission> .Is.Anything))[0][0];
            Assert.IsNotNull(args);
            Assert.AreEqual("Name4", args.Role.Name);
            Assert.AreEqual("LoginId1", args.User.LoginId);
            Assert.AreEqual("Name2", args.Application.ToString());
            #endregion Assert
        }
Пример #24
0
        public void TestRemoveUnit()
        {
            #region Arrange
            Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeUnits(3, UnitRepository);
            ControllerRecordFakes.FakeUsers(3, UserRepository);

            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 3; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                unitAssociations[i].Application = ApplicationRepository.GetNullableById(2);
                unitAssociations[i].User        = UserRepository.GetNullableById(1);
                unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
            }
            ControllerRecordFakes.FakeUnitAssociations(2, UnitAssociationRepository, unitAssociations);
            UserService.Expect(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1")).Return(true).Repeat.Any();
            UnitService.Expect(a => a.GetVisibleByUser("Name2", "UserName")).Return(UnitRepository.Queryable).Repeat.Any();
            #endregion Arrange

            #region Act
            Controller.RemoveUnit("Name2", "LoginId1", 2);
            #endregion Act

            #region Assert
            UserService.AssertWasCalled(a => a.CanUserManageGivenLogin("Name2", "UserName", "LoginId1"));
            UnitService.AssertWasCalled(a => a.GetVisibleByUser("Name2", "UserName"));
            UnitAssociationRepository.AssertWasCalled(a => a.Remove(Arg <UnitAssociation> .Is.Anything));
            var args = (UnitAssociation)UnitAssociationRepository.GetArgumentsForCallsMadeOn(a => a.Remove(Arg <UnitAssociation> .Is.Anything))[0][0];
            Assert.AreEqual(2, args.Id);
            Assert.AreEqual("ShortName2", args.Unit.ShortName);
            Assert.AreEqual("LoginId1", args.User.LoginId);
            Assert.AreEqual("Name2", args.Application.ToString());
            #endregion Assert
        }
        public void TestManageReturnsView2()
        {
            #region Arrange
            Controller.ControllerContext.HttpContext = new MockHttpContext(1, new[] { "" });
            ControllerRecordFakes.FakeUnits(3, UnitRepository);
            UnitService.Expect(a => a.GetVisibleByUser("appName", "UserName")).Return(UnitRepository.GetAll().AsQueryable()).Repeat.Any();
            ControllerRecordFakes.FakeRoles(3, RoleRepository);
            RoleService.Expect(a => a.GetVisibleByUser("appName", "UserName")).Return(RoleRepository.GetAll().AsQueryable()).Repeat.Any();
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            UserService.Expect(a => a.GetByApplication("appName", "UserName")).Return(UserRepository.Queryable).Repeat.Any();
            var application = CreateValidEntities.Application(1);
            application.Name = "appName";
            var permissions = new List <Permission>();
            for (int i = 0; i < 4; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].Application = application;
                permissions[i].User        = UserRepository.Queryable.First();
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            permissions[1].User = UserRepository.GetNullableById(2);
            permissions[2].User = UserRepository.GetNullableById(3);
            permissions[3].Role = RoleRepository.GetNullableById(1);
            ControllerRecordFakes.FakePermissions(0, PermissionRepository, permissions);
            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 4; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                unitAssociations[i].Application = application;
                unitAssociations[i].User        = UserRepository.Queryable.First();
                unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
            }
            unitAssociations[1].User = UserRepository.GetNullableById(2);
            unitAssociations[2].User = UserRepository.GetNullableById(3);
            unitAssociations[3].Unit = UnitRepository.GetNullableById(1);
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);
            #endregion Arrange

            #region Act
            var result = Controller.Manage("appName")
                         .AssertViewRendered()
                         .WithViewData <UserManagementViewModel>();
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.AreEqual("appName", result.Application);
            Assert.AreEqual(3, result.Roles.Count);
            Assert.AreEqual("Name2", result.Roles[1].Value);
            Assert.AreEqual(3, result.Units.Count);
            Assert.AreEqual("ShortName2", result.Units[1].Value);
            Assert.AreEqual(3, result.UserShowModel.Count);
            Assert.AreEqual("FirstName2", result.UserShowModel[1].FirstName);
            Assert.AreEqual("LastName2", result.UserShowModel[1].LastName);
            Assert.AreEqual("*****@*****.**", result.UserShowModel[1].Email);
            Assert.AreEqual("LoginId2", result.UserShowModel[1].Login);
            Assert.AreEqual(null, result.UserShowModel[1].Phone);

            Assert.AreEqual(2, result.UserShowModel[0].Permissions.Count);
            Assert.AreEqual("Name1", result.UserShowModel[0].Permissions[1].RoleName);
            Assert.AreEqual("Name1", result.UserShowModel[0].Permissions[0].RoleName);
            Assert.AreEqual(2, result.UserShowModel[0].UnitAssociations.Count);
            Assert.AreEqual("ShortName1", result.UserShowModel[0].UnitAssociations[1].UnitName);
            Assert.AreEqual("ShortName1", result.UserShowModel[0].UnitAssociations[0].UnitName);

            Assert.AreEqual(1, result.UserShowModel[1].Permissions.Count);
            Assert.AreEqual("Name2", result.UserShowModel[1].Permissions[0].RoleName);
            Assert.AreEqual(1, result.UserShowModel[1].UnitAssociations.Count);
            Assert.AreEqual("ShortName2", result.UserShowModel[1].UnitAssociations[0].UnitName);

            Assert.AreEqual(1, result.UserShowModel[2].Permissions.Count);
            Assert.AreEqual("Name3", result.UserShowModel[2].Permissions[0].RoleName);
            Assert.AreEqual(1, result.UserShowModel[2].UnitAssociations.Count);
            Assert.AreEqual("ShortName3", result.UserShowModel[2].UnitAssociations[0].UnitName);

            #endregion Assert
        }
Пример #26
0
        public void TestInsertNewUserReturnsExpectedValue3()
        {
            #region Arrange
            const string applicationName = "Name2";
            var          users           = new List <User>();
            users.Add(CreateValidEntities.User(4));
            ControllerRecordFakes.FakeUsers(0, UserRepository, users);

            AutomapperConfig.Configure();
            var serviceUser = CreateValidEntities.ServiceUser(4);

            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeRoles(3, RoleRepository);
            ControllerRecordFakes.FakeUnits(3, UnitRepository);

            var permissions = new List <Permission>();
            permissions.Add(CreateValidEntities.Permission(1));
            permissions[0].Application = ApplicationRepository.GetNullableById(2);
            permissions[0].User        = users[0];
            permissions[0].Role        = RoleRepository.GetNullableById(3);
            permissions.Add(CreateValidEntities.Permission(2));
            permissions[1].Application = ApplicationRepository.GetNullableById(2);
            permissions[1].User        = users[0];
            permissions[1].Role        = RoleRepository.GetNullableById(1);
            ControllerRecordFakes.FakePermissions(0, PermissionRepository, permissions);

            var unitAssociations = new List <UnitAssociation>();
            unitAssociations.Add(CreateValidEntities.UnitAssociation(1));
            unitAssociations[0].Application = ApplicationRepository.GetNullableById(2);
            unitAssociations[0].User        = users[0];
            unitAssociations[0].Unit        = UnitRepository.GetNullableById(2);
            unitAssociations.Add(CreateValidEntities.UnitAssociation(2));
            unitAssociations[1].Application = ApplicationRepository.GetNullableById(2);
            unitAssociations[1].User        = users[0];
            unitAssociations[1].Unit        = UnitRepository.GetNullableById(1);
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);
            #endregion Arrange

            #region Act
            var result = Controller.InsertNewUser(applicationName, serviceUser, 3, 2)
                         .AssertResultIs <JsonResult>();
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            var result2 = (ServiceUser)result.Data;
            Assert.IsNotNull(result2);
            Assert.AreEqual("*****@*****.**", result2.Email);
            Assert.AreEqual("FirstName4", result2.FirstName);
            Assert.AreEqual("LastName4", result2.LastName);
            Assert.AreEqual("LoginId4", result2.Login);
            Assert.AreEqual("+1 530 755 7777", result2.Phone);
            Assert.AreEqual("Name1, Name3", result2.Roles);
            Assert.AreEqual("ShortName1, ShortName2", result2.Units);

            UserRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <User> .Is.Anything));
            PermissionRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <Permission> .Is.Anything));
            UnitAssociationRepository.AssertWasNotCalled(a => a.EnsurePersistent(Arg <UnitAssociation> .Is.Anything));


            #endregion Assert
        }
        public void TestGetVisibleByUserReturnsExpectedResults4()
        {
            #region Arrange
            var schoolRepository = FakeRepository <School>();
            Controller.Repository.Expect(a => a.OfType <School>()).Return(schoolRepository).Repeat.Any();
            UnitService = new UnitService(RoleService, schoolRepository, UnitRepository, UnitAssociationRepository);
            var roles = new List <Role>();
            roles.Add(CreateValidEntities.Role(1));
            roles[0].Name = "ManageNot";
            roles.Add(CreateValidEntities.Role(2));
            roles[1].Name = "ManageUnit";
            ControllerRecordFakes.FakeRoles(5, RoleRepository, roles);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);

            var schools = new List <School>();
            schools.Add(CreateValidEntities.School(1));
            schools[0].Units = new List <Unit>();
            schools[0].Units.Add(CreateValidEntities.Unit(1));
            schools[0].Units[0].SetIdTo(1);
            schools[0].Units.Add(CreateValidEntities.Unit(2));
            schools[0].Units[0].SetIdTo(2);
            ControllerRecordFakes.FakeSchools(3, schoolRepository, schools);

            var units = new List <Unit>();
            units.Add(CreateValidEntities.Unit(1));
            units.Add(CreateValidEntities.Unit(2));
            units.Add(CreateValidEntities.Unit(3));
            units[0].School = schoolRepository.Queryable.First();
            units[1].School = schoolRepository.GetNullableById(2);
            units[2].School = schoolRepository.Queryable.First();

            var unitAssociations = new List <UnitAssociation>();
            unitAssociations.Add(CreateValidEntities.UnitAssociation(1));
            unitAssociations.Add(CreateValidEntities.UnitAssociation(2));
            unitAssociations.Add(CreateValidEntities.UnitAssociation(3));
            unitAssociations[0].Application = ApplicationRepository.GetNullableById(2);
            unitAssociations[0].Unit        = units[0];
            unitAssociations[0].Unit.School = CreateValidEntities.School(1);
            unitAssociations[0].Unit.School.SetId("1");
            unitAssociations[0].User         = CreateValidEntities.User(1);
            unitAssociations[0].User.LoginId = "UserName";

            unitAssociations[1].Application = ApplicationRepository.GetNullableById(1);
            unitAssociations[1].Unit        = units[1];
            unitAssociations[1].Unit.School = CreateValidEntities.School(1);
            unitAssociations[1].Unit.School.SetId("1");
            unitAssociations[1].User         = CreateValidEntities.User(1);
            unitAssociations[1].User.LoginId = "UserName";

            unitAssociations[2].Application = ApplicationRepository.GetNullableById(2);
            unitAssociations[2].Unit        = units[2];
            unitAssociations[2].Unit.School = CreateValidEntities.School(1);
            unitAssociations[2].Unit.School.SetId("1");
            unitAssociations[2].User         = CreateValidEntities.User(1);
            unitAssociations[2].User.LoginId = "UserNameNot";

            units[0].UnitAssociations = new List <UnitAssociation>();
            units[1].UnitAssociations = new List <UnitAssociation>();
            units[2].UnitAssociations = new List <UnitAssociation>();
            units[0].UnitAssociations.Add(unitAssociations[0]);
            units[1].UnitAssociations.Add(unitAssociations[1]);
            units[1].UnitAssociations.Add(unitAssociations[2]);

            ControllerRecordFakes.FakeUnits(2, UnitRepository, units);
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);
            RoleService.Expect(a => a.GetManagementRolesForUserInApplication("Name2", "UserName")).Return(RoleRepository.Queryable.Select(a => a.Name).ToList()).Repeat.Any();
            #endregion Arrange

            #region Act
            var result = UnitService.GetVisibleByUser("Name2", "UserName");
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(IQueryable <Unit>));
            Assert.AreEqual(1, result.Count());
            Assert.AreEqual("ShortName1", result.ElementAt(0).ShortName);
            #endregion Assert
        }
        public void TestGetByApplication2()
        {
            #region Arrange
            UserService = new UserService(UnitService, UnitAssociationRepository, PermissionRepository);
            ControllerRecordFakes.FakeUnits(6, UnitRepository);
            ControllerRecordFakes.FakeRoles(6, RoleRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);

            //These are the units that the current user has if he has the correct access
            UnitService.Expect(a => a.GetVisibleByUser("Name1", "UserName")).Return(UnitRepository.Queryable.Where(a => a.Id == 2 || a.Id == 4)).Repeat.Any();
            var users = new List <User>();
            //User 1 has Unit 1, unit 3 -- no match
            users.Add(CreateValidEntities.User(1));
            users[0].UnitAssociations.Add(CreateValidEntities.UnitAssociation(1));
            users[0].UnitAssociations.Add(CreateValidEntities.UnitAssociation(2));
            users[0].UnitAssociations[0].Unit = UnitRepository.GetNullableById(1);
            users[0].UnitAssociations[1].Unit = UnitRepository.GetNullableById(3);

            //User2 has unit1, 2, 3, and 4 //Match
            users.Add(CreateValidEntities.User(2));
            users[1].UnitAssociations.Add(CreateValidEntities.UnitAssociation(3));
            users[1].UnitAssociations.Add(CreateValidEntities.UnitAssociation(4));
            users[1].UnitAssociations.Add(CreateValidEntities.UnitAssociation(5));
            users[1].UnitAssociations.Add(CreateValidEntities.UnitAssociation(6));
            users[1].UnitAssociations[0].Unit = UnitRepository.GetNullableById(1);
            users[1].UnitAssociations[1].Unit = UnitRepository.GetNullableById(2);
            users[1].UnitAssociations[2].Unit = UnitRepository.GetNullableById(3);
            users[1].UnitAssociations[3].Unit = UnitRepository.GetNullableById(4);

            //User3 has unit 4 //Match
            users.Add(CreateValidEntities.User(3));
            users[2].UnitAssociations.Add(CreateValidEntities.UnitAssociation(7));
            users[2].UnitAssociations[0].Unit = UnitRepository.GetNullableById(4);

            //user4 has unit2 //match
            users.Add(CreateValidEntities.User(4));
            users[3].UnitAssociations.Add(CreateValidEntities.UnitAssociation(8));
            users[3].UnitAssociations[0].Unit = UnitRepository.GetNullableById(2);

            //user5 has unit 5 and 1, no match
            users.Add(CreateValidEntities.User(5));
            users[4].UnitAssociations.Add(CreateValidEntities.UnitAssociation(9));
            users[4].UnitAssociations.Add(CreateValidEntities.UnitAssociation(10));
            users[4].UnitAssociations[0].Unit = UnitRepository.GetNullableById(5);
            users[4].UnitAssociations[1].Unit = UnitRepository.GetNullableById(1);

            ControllerRecordFakes.FakeUsers(0, UserRepository, users);

            var permissions = new List <Permission>();
            var count       = 0;
            for (int i = 0; i < 5; i++)
            {
                for (int x = 0; x < 5; x++)
                {
                    count++;
                    permissions.Add(CreateValidEntities.Permission(count));
                    permissions[count - 1].User        = UserRepository.GetNullableById(x + 1);
                    permissions[count - 1].Application = ApplicationRepository.Queryable.First();
                    permissions[count - 1].Role        = RoleRepository.GetNullableById(x + 1);
                }
            }
            ControllerRecordFakes.FakePermissions(0, PermissionRepository, permissions);
            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 10; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
            }
            unitAssociations[0].User        = UserRepository.GetNullableById(1);
            unitAssociations[0].Application = ApplicationRepository.Queryable.First();
            unitAssociations[0].Unit        = UnitRepository.GetNullableById(1);
            unitAssociations[1].User        = UserRepository.GetNullableById(1);
            unitAssociations[1].Application = ApplicationRepository.Queryable.First();
            unitAssociations[1].Unit        = UnitRepository.GetNullableById(3);

            unitAssociations[2].User        = UserRepository.GetNullableById(2);
            unitAssociations[2].Application = ApplicationRepository.Queryable.First();
            unitAssociations[2].Unit        = UnitRepository.GetNullableById(1);
            unitAssociations[3].User        = UserRepository.GetNullableById(2);
            unitAssociations[3].Application = ApplicationRepository.Queryable.First();
            unitAssociations[3].Unit        = UnitRepository.GetNullableById(2);
            unitAssociations[4].User        = UserRepository.GetNullableById(2);
            unitAssociations[4].Application = ApplicationRepository.Queryable.First();
            unitAssociations[4].Unit        = UnitRepository.GetNullableById(3);
            unitAssociations[5].User        = UserRepository.GetNullableById(2);
            unitAssociations[5].Application = ApplicationRepository.Queryable.First();
            unitAssociations[5].Unit        = UnitRepository.GetNullableById(4);

            unitAssociations[6].User        = UserRepository.GetNullableById(3);
            unitAssociations[6].Application = ApplicationRepository.Queryable.First();
            unitAssociations[6].Unit        = UnitRepository.GetNullableById(4);

            unitAssociations[7].User        = UserRepository.GetNullableById(4);
            unitAssociations[7].Application = ApplicationRepository.Queryable.First();
            unitAssociations[7].Unit        = UnitRepository.GetNullableById(2);

            unitAssociations[8].User        = UserRepository.GetNullableById(5);
            unitAssociations[8].Application = ApplicationRepository.Queryable.First();
            unitAssociations[8].Unit        = UnitRepository.GetNullableById(5);
            unitAssociations[9].User        = UserRepository.GetNullableById(5);
            unitAssociations[9].Application = ApplicationRepository.Queryable.First();
            unitAssociations[9].Unit        = UnitRepository.GetNullableById(1);
            ControllerRecordFakes.FakeUnitAssociations(0, UnitAssociationRepository, unitAssociations);

            #endregion Arrange

            #region Act
            var result = UserService.GetByApplication("Name1", "UserName");
            //var allowedUnitIds = UnitService.GetVisibleByUser("Name1", "UserName").ToList().Select(x => x.Id).ToList();

            ////Get everyone with perms, possibly filtered by role and unit
            //var usersWithPermissions = from p in PermissionRepository.Queryable
            //                           join u in UnitAssociationRepository.Queryable on
            //                               new { User = p.User.Id, App = p.Application.Id }
            //                               equals new { User = u.User.Id, App = u.Application.Id }
            //                           where p.Application.Name == "Name1"
            //                           where p.User.UnitAssociations.Any(a => allowedUnitIds.Contains(a.Unit.Id))
            //                           select new { Permissions = p, UnitAssociations = u };
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(3, result.Count());
            Assert.AreEqual("LoginId2", result.ElementAt(0).LoginId);
            Assert.AreEqual("LoginId3", result.ElementAt(1).LoginId);
            Assert.AreEqual("LoginId4", result.ElementAt(2).LoginId);
            #endregion Assert
        }
Пример #29
0
        public void TestLoadUserReturnsExpectedResult()
        {
            #region Arrange
            AutomapperConfig.Configure();
            ControllerRecordFakes.FakeUsers(3, UserRepository);
            ControllerRecordFakes.FakeApplications(3, ApplicationRepository);
            ControllerRecordFakes.FakeRoles(5, RoleRepository);
            ControllerRecordFakes.FakeUnits(6, UnitRepository);

            var permissions = new List <Permission>();
            for (int i = 0; i < 3; i++)
            {
                permissions.Add(CreateValidEntities.Permission(i + 1));
                permissions[i].Application = ApplicationRepository.GetNullableById(1);
                permissions[i].User        = UserRepository.GetNullableById(2);
                permissions[i].Role        = RoleRepository.GetNullableById(i + 1);
            }
            permissions[2].Role = RoleRepository.Queryable.Last();
            ControllerRecordFakes.FakePermissions(4, PermissionRepository, permissions); //Total of 7, but only 3 that match

            var unitAssociations = new List <UnitAssociation>();
            for (int i = 0; i < 3; i++)
            {
                unitAssociations.Add(CreateValidEntities.UnitAssociation(i + 1));
                unitAssociations[i].Application = ApplicationRepository.GetNullableById(1);
                unitAssociations[i].User        = UserRepository.GetNullableById(2);
                unitAssociations[i].Unit        = UnitRepository.GetNullableById(i + 1);
            }
            unitAssociations[0].Unit = UnitRepository.Queryable.Last();
            ControllerRecordFakes.FakeUnitAssociations(2, UnitAssociationRepository, unitAssociations); //Total of 5, 3 that match

            #endregion Arrange

            #region Act
            var result = Controller.LoadUser("Name1", "LoginId2")
                         .AssertResultIs <JsonResult>();
            #endregion Act

            #region Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(JsonRequestBehavior.AllowGet, result.JsonRequestBehavior);

            var result2 = (UserShowModel)result.Data;
            Assert.IsNotNull(result2);
            Assert.AreEqual("*****@*****.**", result2.Email);
            Assert.AreEqual("FirstName2", result2.FirstName);
            Assert.AreEqual("FirstName2 LastName2 (LoginId2)", result2.FullNameAndLogin);
            Assert.AreEqual("LastName2", result2.LastName);
            Assert.AreEqual("LoginId2", result2.Login);
            Assert.AreEqual("+1 530 763 0395", result2.Phone);

            #region Permissions Asserts
            Assert.AreEqual(3, result2.Permissions.Count);

            Assert.AreEqual(1, result2.Permissions[0].Id);
            //Assert.AreEqual(null, result2.Permissions[0].ApplicationName);
            Assert.AreEqual(1, result2.Permissions[0].RoleId);
            Assert.AreEqual("Name1", result2.Permissions[0].RoleName);

            Assert.AreEqual(2, result2.Permissions[1].Id);
            //Assert.AreEqual(null, result2.Permissions[1].ApplicationName);
            Assert.AreEqual(2, result2.Permissions[1].RoleId);
            Assert.AreEqual("Name2", result2.Permissions[1].RoleName);

            Assert.AreEqual(3, result2.Permissions[2].Id);
            //Assert.AreEqual(null, result2.Permissions[2].ApplicationName);
            Assert.AreEqual(5, result2.Permissions[2].RoleId);
            Assert.AreEqual("Name5", result2.Permissions[2].RoleName);
            #endregion Permissions Asserts

            #region UnitAssociations Asserts
            Assert.AreEqual(3, result2.UnitAssociations.Count);

            Assert.AreEqual(1, result2.UnitAssociations[0].Id);
            //Assert.AreEqual(null, result2.UnitAssociations[0].ApplicationName);
            Assert.AreEqual(6, result2.UnitAssociations[0].UnitId);
            Assert.AreEqual("ShortName6", result2.UnitAssociations[0].UnitName);

            Assert.AreEqual(2, result2.UnitAssociations[1].Id);
            //Assert.AreEqual(null, result2.UnitAssociations[1].ApplicationName);
            Assert.AreEqual(2, result2.UnitAssociations[1].UnitId);
            Assert.AreEqual("ShortName2", result2.UnitAssociations[1].UnitName);

            Assert.AreEqual(3, result2.UnitAssociations[2].Id);
            //Assert.AreEqual(null, result2.UnitAssociations[2].ApplicationName);
            Assert.AreEqual(3, result2.UnitAssociations[2].UnitId);
            Assert.AreEqual("ShortName3", result2.UnitAssociations[2].UnitName);
            #endregion UnitAssociations Asserts
            #endregion Assert
        }