Пример #1
0
        public void ThrowsNotFoundExceptionWhenUserDoesNotExists()
        {
            var usersStub = new User[0].AsQueryable().BuildMock();

            var userRepositoryStub = new Mock <IEfRepository <User> >();

            userRepositoryStub.Setup(r => r.All(It.IsAny <bool>()))
            .Returns(usersStub.Object);

            var roleRepositoryStub     = new Mock <IEfRepository <Role> >();
            var contextSaveChangesStub = new Mock <MusicZoneDbContext>(
                new[] { "Fake Connection string" });

            DemoteUserFromRole command = new DemoteUserFromRole()
            {
                UserId = "InvalidUserId"
            };

            // Arrange
            DemoteUserFromRoleCommandService sut =
                new DemoteUserFromRoleCommandService(
                    userRepository: userRepositoryStub.Object,
                    roleRepository: roleRepositoryStub.Object,
                    contextSaveChanges: contextSaveChangesStub.Object);

            // Act && Assert
            Assert.ThrowsAsync <NotFoundException>(async() => await sut.ExecuteAsync(command));
        }
Пример #2
0
        public void ThrowsNotFoundExceptionWhenTheRoleDoesNotExists()
        {
            const string roleName = "RoleName";
            const string userId   = "UserId";

            var usersStub = new[]
            {
                new User()
                {
                    Id = userId
                }
            }
            .AsQueryable()
            .BuildMock();

            var userRepositoryStub = new Mock <IEfRepository <User> >();

            userRepositoryStub.Setup(r => r.All(It.IsAny <bool>()))
            .Returns(usersStub.Object);

            var rolesStub = new[]
            {
                new Role()
                {
                    Name = roleName
                }
            }
            .AsQueryable()
            .BuildMock();

            var roleRepositoryStub = new Mock <IEfRepository <Role> >();

            roleRepositoryStub.Setup(r => r.All(It.IsAny <bool>()))
            .Returns(rolesStub.Object);

            var contextSaveChangesStub = new Mock <MusicZoneDbContext>(
                new[] { "Fake Connection string" });

            DemoteUserFromRole command = new DemoteUserFromRole()
            {
                UserId       = userId,
                LoggedUserId = "AnotherUserId",
                RoleName     = "AnotherRoleName"
            };

            // Arrange
            DemoteUserFromRoleCommandService sut =
                new DemoteUserFromRoleCommandService(
                    userRepository: userRepositoryStub.Object,
                    roleRepository: roleRepositoryStub.Object,
                    contextSaveChanges: contextSaveChangesStub.Object);

            // Act && Assert
            var ex = Assert.ThrowsAsync <NotFoundException>(
                async() => await sut.ExecuteAsync(command));

            StringAssert.Contains("does not exists", ex.Message);
        }
Пример #3
0
        public void ThrowsInvalidOperationExceptionWhenTheUserTriesToDemoteUserWithAdministratorRoleFromAnotherRole()
        {
            const string userId = "UserId";

            var usersStub = new[]
            {
                new User()
                {
                    Id    = userId,
                    Roles = new List <Role>()
                    {
                        new Role()
                        {
                            Name = "Administrator"
                        }
                    }
                }
            }
            .AsQueryable()
            .BuildMock();

            var userRepositoryStub = new Mock <IEfRepository <User> >();

            userRepositoryStub.Setup(r => r.All(It.IsAny <bool>()))
            .Returns(usersStub.Object);

            var roleRepositoryStub     = new Mock <IEfRepository <Role> >();
            var contextSaveChangesStub = new Mock <MusicZoneDbContext>(
                new[] { "Fake Connection string" });

            DemoteUserFromRole command = new DemoteUserFromRole()
            {
                UserId       = userId,
                LoggedUserId = "AnotherUserId",
                RoleName     = RoleType.Uploader.ToString()
            };

            // Arrange
            DemoteUserFromRoleCommandService sut =
                new DemoteUserFromRoleCommandService(
                    userRepository: userRepositoryStub.Object,
                    roleRepository: roleRepositoryStub.Object,
                    contextSaveChanges: contextSaveChangesStub.Object);

            // Act && Assert
            Assert.ThrowsAsync <InvalidOperationException>(
                async() => await sut.ExecuteAsync(command));
        }
Пример #4
0
        public async Task <IActionResult> DemoteUser(UserRoleViewModel model)
        {
            string loggedUserId = this.User.FindFirst(ClaimTypes.NameIdentifier).Value;

            DemoteUserFromRole command = new DemoteUserFromRole()
            {
                UserId       = model.UserId,
                RoleName     = model.RoleName,
                LoggedUserId = loggedUserId
            };

            string message = await this.CallServiceAsync(
                async() => await this.demoteUser.ExecuteAsync(command));

            if (message != null)
            {
                return(RedirectToAction(nameof(this.Index))
                       .WithErrorMessage(message));
            }

            return(RedirectToAction(nameof(this.Index))
                   .WithSuccessMessage($"User {model.Username} successfully demoted from {model.RoleName} role."));
        }
Пример #5
0
        public async Task RemoveRoleFromUserRolesWhenCommandContainsValidData()
        {
            const string roleName = "RoleName";
            const string userId   = "UserId";

            List <Role> userRoles = new List <Role>()
            {
                new Role()
                {
                    Name = roleName
                }
            };

            var usersStub = new[]
            {
                new User()
                {
                    Id    = userId,
                    Roles = userRoles
                }
            }
            .AsQueryable()
            .BuildMock();

            var userRepositoryStub = new Mock <IEfRepository <User> >();

            userRepositoryStub.Setup(r => r.All(It.IsAny <bool>()))
            .Returns(usersStub.Object);

            var rolesStub = new[]
            {
                new Role()
                {
                    Name = roleName
                }
            }
            .AsQueryable()
            .BuildMock();

            var roleRepositoryStub = new Mock <IEfRepository <Role> >();

            roleRepositoryStub.Setup(r => r.All(It.IsAny <bool>()))
            .Returns(rolesStub.Object);

            var contextSaveChangesStub = new Mock <MusicZoneDbContext>(
                new[] { "Fake Connection string" });

            DemoteUserFromRole command = new DemoteUserFromRole()
            {
                UserId       = userId,
                LoggedUserId = "AnotherUserId",
                RoleName     = roleName
            };

            // Arrange
            DemoteUserFromRoleCommandService sut =
                new DemoteUserFromRoleCommandService(
                    userRepository: userRepositoryStub.Object,
                    roleRepository: roleRepositoryStub.Object,
                    contextSaveChanges: contextSaveChangesStub.Object);

            // Act
            await sut.ExecuteAsync(command);

            // Assert
            Assert.AreEqual(0, userRoles.Count);
        }