Beispiel #1
0
        public async Task UpdateUserAsync_KeycloakUserDoesNotMatch()
        {
            // Arrange
            var helper  = new TestHelper();
            var service = helper.Create <PimsKeycloakService>();

            var euser = EntityHelper.CreateUser("test");

            var keycloakServiceMock = helper.GetMock <Pims.Keycloak.IKeycloakService>();
            var kuser = new Pims.Keycloak.Models.UserModel()
            {
                Id       = euser.Id,
                Username = "******"
            };

            keycloakServiceMock.Setup(m => m.GetUserAsync(It.IsAny <Guid>())).ReturnsAsync(kuser);

            var pimsAdminServiceMock = helper.GetMock <Pims.Dal.Services.Admin.IPimsAdminService>();

            pimsAdminServiceMock.Setup(m => m.User.Get(It.IsAny <Guid>())).Returns(euser);

            // Act
            // Assert
            await Assert.ThrowsAsync <InvalidOperationException>(async() => await service.UpdateUserAsync(euser));
        }
        public async Task UpdateUserAsync_KeycloakUserDoesNotMatch()
        {
            // Arrange
            var helper  = new TestHelper();
            var service = helper.Create <PimsKeycloakService>();

            var euser      = EntityHelper.CreateUser("test");
            var removeRole = euser.GetRoles().First();

            removeRole.RoleId          = 1;
            removeRole.KeycloakGroupId = Guid.NewGuid();

            var keycloakServiceMock = helper.GetMock <Pims.Keycloak.IKeycloakService>();
            var kuser = new Pims.Keycloak.Models.UserModel()
            {
                Id       = euser.GuidIdentifierValue.Value,
                Username = "******",
                Groups   = new[] { euser.GuidIdentifierValue.Value.ToString() }
            };

            keycloakServiceMock.Setup(m => m.GetUserAsync(It.IsAny <Guid>())).ReturnsAsync(kuser);
            keycloakServiceMock.Setup(m => m.GetUserGroupsAsync(euser.GuidIdentifierValue.Value))
            .ReturnsAsync(kuser.Groups.Select(g => new Pims.Keycloak.Models.GroupModel()
            {
                Id = new Guid(g)
            }).ToArray());
            keycloakServiceMock.Setup(m => m.UpdateUserAsync(It.IsAny <Pims.Keycloak.Models.UserModel>()));

            var pimsServiceMock = helper.GetMock <IPimsRepository>();

            pimsServiceMock.Setup(m => m.User.GetTracking(It.IsAny <long>())).Returns(euser);
            pimsServiceMock.Setup(m => m.User.Get(It.IsAny <long>())).Returns(euser);
            pimsServiceMock.Setup(m => m.Role.Find(removeRole.RoleId)).Returns(removeRole);
            pimsServiceMock.Setup(m => m.User.UpdateOnly(It.IsAny <Pims.Dal.Entities.PimsUser>())).Returns(euser);

            var user    = EntityHelper.CreateUser(1, euser.GuidIdentifierValue.Value, euser.BusinessIdentifierValue, "new first name", "new last name");
            var addRole = user.GetRoles().First();

            addRole.RoleId          = 2;
            addRole.KeycloakGroupId = Guid.NewGuid();
            pimsServiceMock.Setup(m => m.Role.Find(addRole.RoleId)).Returns(addRole);
            pimsServiceMock.Setup(m => m.UserOrganization.GetChildren(It.IsAny <long>())).Returns(Array.Empty <Entity.PimsOrganization>());
            pimsServiceMock.Setup(m => m.User.GetOrganizations(It.IsAny <Guid>())).Returns(euser.GetOrganizations().Select(a => a.Id));

            // Act
            var result = await service.UpdateUserAsync(user);

            // Assert
            result.BusinessIdentifierValue.Should().Be("keycloak username");
        }
        public async Task UpdateUserAsync_RemoveRoleDoesNotExistInPims()
        {
            // Arrange
            var helper  = new TestHelper();
            var service = helper.Create <PimsKeycloakService>();

            var euser      = EntityHelper.CreateUser("test");
            var removeRole = euser.GetRoles().First();

            removeRole.RoleId          = 1;
            removeRole.KeycloakGroupId = Guid.NewGuid();

            var keycloakServiceMock = helper.GetMock <Pims.Keycloak.IKeycloakService>();
            var kuser = new Pims.Keycloak.Models.UserModel()
            {
                Id       = euser.GuidIdentifierValue.Value,
                Username = euser.BusinessIdentifierValue,
                Groups   = new string[] { removeRole.KeycloakGroupId.ToString() }
            };

            keycloakServiceMock.Setup(m => m.GetUserAsync(It.IsAny <Guid>())).ReturnsAsync(kuser);
            keycloakServiceMock.Setup(m => m.GetUserGroupsAsync(euser.GuidIdentifierValue.Value))
            .ReturnsAsync(kuser.Groups.Select(g => new Pims.Keycloak.Models.GroupModel()
            {
                Id = new Guid(g)
            }).ToArray());
            keycloakServiceMock.Setup(m => m.UpdateUserAsync(It.IsAny <Pims.Keycloak.Models.UserModel>()));

            var pimsServiceMock = helper.GetMock <IPimsRepository>();

            pimsServiceMock.Setup(m => m.User.GetTracking(It.IsAny <long>())).Returns(euser);
            pimsServiceMock.Setup(m => m.User.UpdateOnly(It.IsAny <Entity.PimsUser>())).Returns(euser);
            pimsServiceMock.Setup(m => m.Role.Find(removeRole.RoleId)).Returns <Entity.PimsRole>(null);
            pimsServiceMock.Setup(m => m.UserOrganization.GetChildren(It.IsAny <long>())).Returns(Array.Empty <Entity.PimsOrganization>());

            var user    = EntityHelper.CreateUser(euser.Id, euser.GuidIdentifierValue.Value, euser.BusinessIdentifierValue, "new first name", "new last name");
            var addRole = user.GetRoles().First();

            addRole.RoleId          = 2;
            addRole.KeycloakGroupId = Guid.NewGuid();
            pimsServiceMock.Setup(m => m.Role.Find(addRole.RoleId)).Returns(addRole);

            // Act
            // Assert
            await Assert.ThrowsAsync <KeyNotFoundException>(async() => await service.UpdateUserAsync(euser));
        }
Beispiel #4
0
        public async Task UpdateUserAsync_RemoveRoleDoesNotExistInPims()
        {
            // Arrange
            var helper  = new TestHelper();
            var service = helper.Create <PimsKeycloakService>();

            var euser      = EntityHelper.CreateUser("test");
            var removeRole = euser.Roles.First().Role;

            removeRole.KeycloakGroupId = Guid.NewGuid();

            var keycloakServiceMock = helper.GetMock <Pims.Keycloak.IKeycloakService>();
            var kuser = new Pims.Keycloak.Models.UserModel()
            {
                Id       = euser.Id,
                Username = euser.Username,
                Groups   = new string[] { removeRole.KeycloakGroupId.ToString() }
            };

            keycloakServiceMock.Setup(m => m.GetUserAsync(It.IsAny <Guid>())).ReturnsAsync(kuser);
            keycloakServiceMock.Setup(m => m.GetUserGroupsAsync(euser.Id))
            .ReturnsAsync(kuser.Groups.Select(g => new Pims.Keycloak.Models.GroupModel()
            {
                Id = new Guid(g)
            }).ToArray());
            keycloakServiceMock.Setup(m => m.UpdateUserAsync(It.IsAny <Pims.Keycloak.Models.UserModel>()));

            var pimsAdminServiceMock = helper.GetMock <Pims.Dal.Services.Admin.IPimsAdminService>();

            pimsAdminServiceMock.Setup(m => m.User.Get(It.IsAny <Guid>())).Returns(euser);
            pimsAdminServiceMock.Setup(m => m.Role.Find(removeRole.Id)).Returns <Entity.Role>(null);

            var user    = EntityHelper.CreateUser(euser.Id, euser.Username, "new first name", "new last name");
            var addRole = user.Roles.First().Role;

            addRole.KeycloakGroupId = Guid.NewGuid();
            pimsAdminServiceMock.Setup(m => m.Role.Find(addRole.Id)).Returns(addRole);

            // Act
            // Assert
            await Assert.ThrowsAsync <KeyNotFoundException>(async() => await service.UpdateUserAsync(euser));
        }
        public async Task UpdateUserAsync_Success()
        {
            // Arrange
            var helper  = new TestHelper();
            var service = helper.Create <PimsKeycloakService>();

            var euser      = EntityHelper.CreateUser("test");
            var removeRole = euser.PimsUserRoles.First().Role;

            removeRole.RoleId          = 1;
            removeRole.KeycloakGroupId = Guid.NewGuid();

            var keycloakServiceMock = helper.GetMock <Pims.Keycloak.IKeycloakService>();
            var kuser = new Pims.Keycloak.Models.UserModel()
            {
                Id       = euser.GuidIdentifierValue.Value,
                Username = euser.BusinessIdentifierValue,
                Groups   = new string[] { removeRole.KeycloakGroupId.ToString() }
            };

            keycloakServiceMock.Setup(m => m.GetUserAsync(It.IsAny <Guid>())).ReturnsAsync(kuser);
            keycloakServiceMock.Setup(m => m.GetUserGroupsAsync(euser.GuidIdentifierValue.Value))
            .ReturnsAsync(kuser.Groups.Select(g => new Pims.Keycloak.Models.GroupModel()
            {
                Id = new Guid(g)
            }).ToArray());
            keycloakServiceMock.Setup(m => m.UpdateUserAsync(It.IsAny <Pims.Keycloak.Models.UserModel>()));

            var pimsServiceMock = helper.GetMock <IPimsRepository>();

            pimsServiceMock.Setup(m => m.User.GetTracking(It.IsAny <long>())).Returns(euser);
            pimsServiceMock.Setup(m => m.User.Get(It.IsAny <long>())).Returns(euser);
            pimsServiceMock.Setup(m => m.User.UpdateOnly(It.IsAny <Pims.Dal.Entities.PimsUser>())).Returns(euser);
            pimsServiceMock.Setup(m => m.User.RemoveRole(It.IsAny <Pims.Dal.Entities.PimsUser>(), removeRole.RoleId)).Returns((Pims.Dal.Entities.PimsUser eUser, long roleId) =>
            {
                var userRole = eUser.PimsUserRoles.FirstOrDefault(r => r.RoleId == roleId);
                eUser.PimsUserRoles.Remove(userRole);
                return(eUser);
            });
            pimsServiceMock.Setup(m => m.Role.Find(removeRole.RoleId)).Returns(removeRole);

            var user        = EntityHelper.CreateUser(euser.Id, euser.GuidIdentifierValue.Value, euser.BusinessIdentifierValue, "new first name", "new last name");
            var addUserRole = user.PimsUserRoles.First();

            addUserRole.RoleId               = 2;
            addUserRole.Role.RoleId          = 2;
            addUserRole.Role.KeycloakGroupId = Guid.NewGuid();
            pimsServiceMock.Setup(m => m.Role.Find(addUserRole.Role.RoleId)).Returns(addUserRole.Role);
            pimsServiceMock.Setup(m => m.UserOrganization.GetChildren(It.IsAny <long>())).Returns(Array.Empty <Entity.PimsOrganization>());

            // Act
            var result = await service.UpdateUserAsync(user);

            // Assert
            result.Id.Should().Be(user.Id);
            result.BusinessIdentifierValue.Should().Be(user.BusinessIdentifierValue);
            result.Person.FirstName.Should().Be(user.Person.FirstName);
            result.Person.Surname.Should().Be(user.Person.Surname);
            result.GetOrganizations().Count.Should().Be(euser.GetOrganizations().Count);
            result.PimsUserRoles.Count.Should().Be(1);
            result.PimsUserRoles.First().Role.KeycloakGroupId.Should().Be(user.GetRoles().First().KeycloakGroupId);

            keycloakServiceMock.Verify(m => m.GetUserGroupsAsync(euser.GuidIdentifierValue.Value), Times.Once);
            keycloakServiceMock.Verify(m => m.RemoveGroupFromUserAsync(euser.GuidIdentifierValue.Value, new Guid(kuser.Groups.First())), Times.Once);
            keycloakServiceMock.Verify(m => m.AddGroupToUserAsync(euser.GuidIdentifierValue.Value, addUserRole.Role.KeycloakGroupId.Value), Times.Once);
            pimsServiceMock.Verify(m => m.User.UpdateOnly(It.IsAny <Entity.PimsUser>()), Times.Once);
            pimsServiceMock.Verify(m => m.User.RemoveRole(It.IsAny <Entity.PimsUser>(), removeRole.RoleId), Times.Once);
            keycloakServiceMock.Verify(m => m.UpdateUserAsync(It.IsAny <Pims.Keycloak.Models.UserModel>()), Times.Once);
        }
Beispiel #6
0
        public async Task UpdateUserAsync_Success()
        {
            // Arrange
            var helper  = new TestHelper();
            var service = helper.Create <PimsKeycloakService>();

            var euser      = EntityHelper.CreateUser("test");
            var removeRole = euser.Roles.First().Role;

            removeRole.KeycloakGroupId = Guid.NewGuid();

            var keycloakServiceMock = helper.GetMock <Pims.Keycloak.IKeycloakService>();
            var kuser = new Pims.Keycloak.Models.UserModel()
            {
                Id       = euser.Id,
                Username = euser.Username,
                Groups   = new string[] { removeRole.KeycloakGroupId.ToString() }
            };

            keycloakServiceMock.Setup(m => m.GetUserAsync(It.IsAny <Guid>())).ReturnsAsync(kuser);
            keycloakServiceMock.Setup(m => m.GetUserGroupsAsync(euser.Id))
            .ReturnsAsync(kuser.Groups.Select(g => new Pims.Keycloak.Models.GroupModel()
            {
                Id = new Guid(g)
            }).ToArray());
            keycloakServiceMock.Setup(m => m.UpdateUserAsync(It.IsAny <Pims.Keycloak.Models.UserModel>()));

            var pimsAdminServiceMock = helper.GetMock <Pims.Dal.Services.Admin.IPimsAdminService>();

            pimsAdminServiceMock.Setup(m => m.User.Get(It.IsAny <Guid>())).Returns(euser);
            pimsAdminServiceMock.Setup(m => m.Role.Find(removeRole.Id)).Returns(removeRole);

            var user    = EntityHelper.CreateUser(euser.Id, euser.Username, "new first name", "new last name");
            var addRole = user.Roles.First().Role;

            addRole.KeycloakGroupId = Guid.NewGuid();
            pimsAdminServiceMock.Setup(m => m.Role.Find(addRole.Id)).Returns(addRole);

            var pimsServiceMock = helper.GetMock <IPimsService>();

            pimsServiceMock.Setup(m => m.User.GetAgencies(It.IsAny <Guid>())).Returns(euser.Agencies.Select(a => a.AgencyId));

            // Act
            var result = await service.UpdateUserAsync(user);

            // Assert
            result.Id.Should().Be(user.Id);
            result.Username.Should().Be(user.Username);
            result.FirstName.Should().Be(user.FirstName);
            result.LastName.Should().Be(user.LastName);
            result.Agencies.Count.Should().Be(euser.Agencies.Count);
            result.Roles.Count.Should().Be(1);
            result.Roles.First().Role.KeycloakGroupId.Should().Be(user.Roles.First().Role.KeycloakGroupId);

            keycloakServiceMock.Verify(m => m.GetUserGroupsAsync(euser.Id), Times.Once);
            keycloakServiceMock.Verify(m => m.RemoveGroupFromUserAsync(euser.Id, new Guid(kuser.Groups.First())), Times.Once);
            keycloakServiceMock.Verify(m => m.AddGroupToUserAsync(euser.Id, addRole.KeycloakGroupId.Value), Times.Once);
            pimsAdminServiceMock.Verify(m => m.User.Update(It.IsAny <Entity.User>()), Times.Once);
            pimsServiceMock.Verify(m => m.User.GetAgencies(It.IsAny <Guid>()), Times.Once);
            keycloakServiceMock.Verify(m => m.UpdateUserAsync(It.IsAny <Pims.Keycloak.Models.UserModel>()), Times.Once);
        }