Beispiel #1
0
        public async void UpdateRoleAsync_Success()
        {
            // Arrange
            var user       = PrincipalHelper.CreateForRole("admin-users");
            var helper     = new TestHelper();
            var controller = helper.CreateController <RoleController>(user);

            var mapper  = helper.GetService <IMapper>();
            var service = helper.GetService <Mock <IPimsKeycloakService> >();
            var erole   = new Entity.PimsRole(Guid.NewGuid(), "test")
            {
                Description = "description"
            };

            service.Setup(m => m.UpdateRoleAsync(It.IsAny <Entity.PimsRole>())).Returns(Task.FromResult(erole));
            var model = mapper.Map <Model.Update.RoleModel>(erole);

            // Act
            var result = await controller.UpdateRoleAsync(erole.RoleUid, model);

            // Assert
            var actionResult   = Assert.IsType <JsonResult>(result);
            var actualResult   = Assert.IsType <Model.RoleModel>(actionResult.Value);
            var expectedResult = mapper.Map <Model.RoleModel>(erole);

            Assert.Equal(expectedResult.Id, actualResult.Id);
            Assert.Equal(expectedResult.Name, actualResult.Name);
            Assert.Equal(expectedResult.Description, actualResult.Description);
            service.Verify(m => m.UpdateRoleAsync(It.IsAny <Entity.PimsRole>()), Times.Once());
        }
Beispiel #2
0
        public void GetRoleCodes()
        {
            // Arrange
            var helper     = new TestHelper();
            var controller = helper.CreateController <LookupController>(Permissions.PropertyView);

            var mapper  = helper.GetService <IMapper>();
            var service = helper.GetService <Mock <IPimsRepository> >();
            var role    = new Entity.PimsRole
            {
                Id          = 1,
                RoleUid     = Guid.NewGuid(),
                Name        = "Ministry of Health",
                Description = "The Ministry of Health"
            };

            service.Setup(m => m.Lookup.GetRoles()).Returns(new[] { role });

            // Act
            var result = controller.GetRoles();

            // Assert
            var actionResult = Assert.IsType <JsonResult>(result);
            var actualResult = Assert.IsType <Model.RoleModel[]>(actionResult.Value);

            Assert.Equal(new[] { mapper.Map <Model.RoleModel>(role) }, actualResult, new DeepPropertyCompare());
            service.Verify(m => m.Lookup.GetRoles(), Times.Once());
        }
Beispiel #3
0
        public void GetRoles_Filtered_Success()
        {
            // Arrange
            var helper     = new TestHelper();
            var controller = helper.CreateController <RoleController>(Permissions.AdminRoles);

            var mapper  = helper.GetService <IMapper>();
            var service = helper.GetService <Mock <IPimsRepository> >();
            var roles   = new Entity.PimsRole[] { EntityHelper.CreateRole("role1"), EntityHelper.CreateRole("role2") };
            var paged   = new Entity.Models.Paged <Entity.PimsRole>(roles);

            service.Setup(m => m.Role.Get(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>())).Returns(paged);

            // Act
            var result = controller.GetRoles(1, 10, "test");

            // Assert
            var actionResult = Assert.IsType <JsonResult>(result);

            Assert.Null(actionResult.StatusCode);
            var actualResult = Assert.IsType <Pims.Api.Models.PageModel <Model.RoleModel> >(actionResult.Value);

            Assert.Equal(mapper.Map <Model.RoleModel[]>(roles), actualResult.Items, new DeepPropertyCompare());
            service.Verify(m => m.Role.Get(1, 10, "test"), Times.Once());
        }
Beispiel #4
0
 /// <summary>
 /// Create a new instance of a UserOrganization class.
 /// </summary>
 /// <param name="user"></param>
 /// <param name="organization"></param>
 /// <param name="role"></param>
 public PimsUserOrganization(PimsUser user, PimsOrganization organization, PimsRole role)
 {
     this.User           = user ?? throw new ArgumentNullException(nameof(user));
     this.UserId         = user.Id;
     this.Organization   = organization ?? throw new ArgumentNullException(nameof(organization));
     this.OrganizationId = organization.Id;
     this.Role           = role ?? throw new ArgumentNullException(nameof(role));
     this.RoleId         = role.RoleId;
 }
Beispiel #5
0
 /// <summary>
 /// Create a new instance of a RoleClaim class.
 /// </summary>
 /// <param name="role"></param>
 /// <param name="claim"></param>
 public PimsRoleClaim(PimsRole role, PimsClaim claim)
 {
     this.Role   = role;
     this.RoleId = role?.RoleId ??
                   throw new ArgumentNullException(nameof(role));
     this.Claim   = claim;
     this.ClaimId = claim?.ClaimId ??
                    throw new ArgumentNullException(nameof(claim));
 }
Beispiel #6
0
 /// <summary>
 /// Create a new instance of a AccessRequest class.
 /// </summary>
 /// <param name="user"></param>
 /// <param name="role"></param>
 /// <param name="status"></param>
 public PimsAccessRequest(PimsUser user, PimsRole role, PimsAccessRequestStatusType status) : this()
 {
     this.User   = user ?? throw new ArgumentNullException(nameof(user));
     this.UserId = user.Id;
     this.Role   = role ?? throw new ArgumentNullException(nameof(role));
     this.RoleId = role.RoleId;
     this.AccessRequestStatusTypeCodeNavigation = status ?? throw new ArgumentNullException(nameof(status));
     this.AccessRequestStatusTypeCode           = status.Id;
 }
Beispiel #7
0
 /// <summary>
 /// Create a new instance of a UserRole class.
 /// </summary>
 /// <param name="user"></param>
 /// <param name="role"></param>
 public PimsUserRole(PimsUser user, PimsRole role)
 {
     this.User   = user;
     this.UserId = user?.Id ??
                   throw new ArgumentNullException(nameof(user));
     this.Role   = role;
     this.RoleId = role?.RoleId ??
                   throw new ArgumentNullException(nameof(role));
 }
        /// <summary>
        /// Update the specified role in keycloak and PIMS.
        /// This will add the role to PIMS if it does not current exist.
        /// </summary>
        /// <param name="role"></param>
        /// <exception type="KeyNotFoundException">User does not exist in keycloak or PIMS.</exception>
        /// <returns></returns>
        public async Task <Entity.PimsRole> UpdateRoleAsync(Entity.PimsRole role)
        {
            if (await _keycloakService.GetGroupAsync(role.RoleUid) == null)
            {
                throw new KeyNotFoundException();
            }

            // Role does not exist in PIMS, it needs to be added.
            if (_pimsRepository.Role.Find(role.RoleId) == null)
            {
                _pimsRepository.Role.Add(role);
            }
            else
            {
                _pimsRepository.Role.Update(role);
            }

            var kmodel = _mapper.Map <KModel.GroupModel>(role);
            await _keycloakService.UpdateGroupAsync(kmodel);

            return(role);
        }
Beispiel #9
0
        public async void GetRoleAsync_Success()
        {
            // Arrange
            var user       = PrincipalHelper.CreateForRole("admin-users");
            var helper     = new TestHelper();
            var controller = helper.CreateController <RoleController>(user);

            var mapper  = helper.GetService <IMapper>();
            var service = helper.GetService <Mock <IPimsKeycloakService> >();
            var erole   = new Entity.PimsRole(Guid.NewGuid(), "test");

            service.Setup(m => m.GetRoleAsync(It.IsAny <Guid>())).Returns(Task.FromResult(erole));

            // Act
            var result = await controller.GetRoleAsync(erole.RoleUid);

            // Assert
            var actionResult = Assert.IsType <JsonResult>(result);
            var actualResult = Assert.IsType <Model.RoleModel>(actionResult.Value);

            Assert.Equal(mapper.Map <Model.RoleModel>(erole), actualResult, new DeepPropertyCompare());
            service.Verify(m => m.GetRoleAsync(It.IsAny <Guid>()), Times.Once());
        }
Beispiel #10
0
        public async void GetRolesAsync_Success()
        {
            // Arrange
            var user       = PrincipalHelper.CreateForRole("admin-users");
            var helper     = new TestHelper();
            var controller = helper.CreateController <RoleController>(user);

            var mapper  = helper.GetService <IMapper>();
            var service = helper.GetService <Mock <IPimsKeycloakService> >();
            var erole   = new Entity.PimsRole(Guid.NewGuid(), "test");
            var eroles  = new[] { erole };

            service.Setup(m => m.GetRolesAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>())).Returns(Task.FromResult((IEnumerable <Entity.PimsRole>)eroles));

            // Act
            var result = await controller.GetRolesAsync(1, 10);

            // Assert
            var actionResult = Assert.IsType <JsonResult>(result);
            var data         = Assert.IsType <Model.RoleModel[]>(actionResult.Value);

            Assert.Equal(mapper.Map <Model.RoleModel[]>(eroles), data, new DeepPropertyCompare());
            service.Verify(m => m.GetRolesAsync(1, 10, It.IsAny <string>()), Times.Once());
        }
Beispiel #11
0
        /// <summary>
        /// Create a new instance of an AccessRequest for a default user.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="keycloakUserId"></param>
        /// <param name="username"></param>
        /// <param name="firstName"></param>
        /// <param name="lastName"></param>
        /// <param name="person"></param>
        /// <param name="role"></param>
        /// <param name="organization"></param>
        /// <returns></returns>
        public static Entity.PimsUser CreateUser(long id, Guid keycloakUserId, string username, string firstName = "given name", string lastName = "surname", Entity.PimsRole role = null, Entity.PimsOrganization organization = null, Entity.PimsAddress address = null)
        {
            organization ??= EntityHelper.CreateOrganization(id, "Organization 1");
            role ??= EntityHelper.CreateRole("Real Estate Manager");
            var person = new Entity.PimsPerson(lastName, firstName, address);

            person.PimsContactMethods = new List <Entity.PimsContactMethod>();
            var user = new Entity.PimsUser(keycloakUserId, username, person)
            {
                Id        = id,
                IssueDate = DateTime.UtcNow,
                ConcurrencyControlNumber = 1
            };

            user.PimsUserRoles.Add(new Entity.PimsUserRole()
            {
                Role = role, RoleId = role.Id, User = user, UserId = user.Id
            });
            user.PimsUserOrganizations.Add(new Entity.PimsUserOrganization()
            {
                Organization = organization, OrganizationId = organization.Id, User = user, UserId = user.Id
            });

            return(user);
        }
Beispiel #12
0
        /// <summary>
        /// Create a new instance of an AccessRequest for the specified user.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="user"></param>
        /// <param name="role"></param>
        /// <param name="organization"></param>
        /// <returns></returns>
        public static Entity.PimsAccessRequest CreateAccessRequest(long id, Entity.PimsUser user, Entity.PimsRole role, Entity.PimsOrganization organization)
        {
            user ??= EntityHelper.CreateUser("test");
            role ??= EntityHelper.CreateRole("Real Estate Manager");
            var accessRequest = new Entity.PimsAccessRequest()
            {
                AccessRequestId = id,
                UserId          = user.Id,
                User            = user,
                RoleId          = role.Id,
                Role            = role
            };

            organization ??= EntityHelper.CreateOrganization(id, "test", EntityHelper.CreateOrganizationType("Type 1"), EntityHelper.CreateOrganizationIdentifierType("Identifier 1"), EntityHelper.CreateAddress(id));
            accessRequest.PimsAccessRequestOrganizations.Add(new Entity.PimsAccessRequestOrganization()
            {
                AccessRequestId = id,
                AccessRequest   = accessRequest,
                OrganizationId  = organization.Id,
                Organization    = organization
            });

            return(accessRequest);
        }