예제 #1
0
        public void Invoke_FromSuperAdminToSuperAdmin_NotSavedInDatabase()
        {
            // Prepare
            var dataUser = new DataAccess.Models.User
            {
                IsSuperAdmin = true
            };
            var dataUserSaved            = dataUser;
            var mockedUserRepository     = new Mock <IUserRepository>();
            var mockedUserAppsRepository = new Mock <IUserAppRepository>();

            mockedUserRepository.Setup(r => r.GetById(It.IsAny <int>()))
            .Returns(dataUser);
            mockedUserRepository.Setup(r => r.Edit(It.IsAny <DataAccess.Models.User>()))
            .Callback <DataAccess.Models.User>(user => dataUserSaved = user);

            var action = new GrantRole(mockedUserAppsRepository.Object, mockedUserRepository.Object);

            // Action
            var actionResult = action.Invoke(1, 1, Enums.UserRole.SuperAdmin);

            // Check
            Assert.False(actionResult);
            Assert.True(dataUserSaved.IsSuperAdmin);
            mockedUserRepository.Verify(r => r.Edit(It.IsAny <DataAccess.Models.User>()), Times.Never);
            mockedUserRepository.Verify(r => r.Save(), Times.Never);
            mockedUserAppsRepository.Verify(r => r.Save(), Times.Never);
        }
예제 #2
0
        public void Verify_AlreadyLocked_SaveNorEditAreCalled()
        {
            // prepare
            DateTime dateNow    = DateTime.UtcNow;
            var      userFromDb = new DataAccess.Models.User()
            {
                Id       = 1,
                LockedOn = dateNow,
            };

            var mockedUserRepo = new Mock <IUserRepository>();

            mockedUserRepo.Setup(r => r.GetById(1))
            .Returns(userFromDb);

            var action = new BusinessLogic.Actions.User.Implementation.LockUser(mockedUserRepo.Object);

            // action
            action.Invoke(1);

            // assert
            Assert.Equal(userFromDb.LockedOn, dateNow);
            mockedUserRepo.Verify(r => r.Edit(It.IsAny <DataAccess.Models.User>()), Times.Never);
            mockedUserRepo.Verify(r => r.Save(), Times.Never);
        }
예제 #3
0
        public void Invoke_ForSuperAdmin_ReturnsSuperAdmin()
        {
            // prepare
            var dataUser = new DataAccess.Models.User
            {
                IsSuperAdmin = true
            };
            var dataUserApp = new UserApps
            {
                Role = UserRole.Manager
            };

            var mockedUserRepository = new Mock <IUserRepository>();

            mockedUserRepository.Setup(r => r.GetById(It.IsAny <int>())).Returns(dataUser);

            var getUserAppResult = new List <UserApps> {
                dataUserApp
            };
            var mockedUserAppRepository = new Mock <IUserAppRepository>();

            mockedUserAppRepository.Setup(r => r.FindBy(It.IsAny <Expression <Func <UserApps, bool> > >()))
            .Returns(getUserAppResult.AsQueryable());
            var action = new BusinessLogic.Actions.User.Implementation
                         .GetAppUserRole(mockedUserAppRepository.Object, mockedUserRepository.Object);

            // action
            var actionResult = action.Invoke(1, 2);

            // check
            Assert.Equal("SuperAdmin", actionResult.ToString());
        }
예제 #4
0
        public void Invoke_NoToken_SaveNorEditAreCalled()
        {
            // prepare
            var guid       = Guid.NewGuid();
            var userFromDb = new DataAccess.Models.User
            {
                Id           = guid,
                Name         = "Name",
                PasswordHash = "hash",
                PasswordSalt = "salt"
            };

            var mockedUserRepository = new Mock <IUserRepository>();

            mockedUserRepository.Setup(r => r.GetById(It.IsAny <Guid>()))
            .Returns(userFromDb);

            var mockedUserTokenRepo = new Mock <IUserTokenRepository>();
            var mockedUnitOfWork    = new Mock <IUnitOfWork>();

            var action = new EditUserPassword(mockedUserTokenRepo.Object, mockedUserRepository.Object, mockedUnitOfWork.Object);

            // action
            var actionResult = action.Invoke(guid, "123");

            // assert
            Assert.False(actionResult);
            mockedUnitOfWork.Verify(r => r.Save(), Times.Never);
            mockedUserRepository.Verify(r => r.Edit(It.IsAny <DataAccess.Models.User>()), Times.Never);

            mockedUserTokenRepo.Verify(r => r.FindBy(It.IsAny <Expression <Func <DataAccess.Models.UserToken, bool> > >()), Times.Once);
            mockedUserTokenRepo.Verify(r => r.Delete(It.IsAny <DataAccess.Models.UserToken>()), Times.Never);
            mockedUnitOfWork.Verify(r => r.Save(), Times.Never);
        }
예제 #5
0
        public void Verify_ForDoubledAction_UpdatesLockedOnOnce()
        {
            // prepare
            var userFromDb = new DataAccess.Models.User()
            {
                Id       = 1,
                LockedOn = null,
            };

            DataAccess.Models.User userSaved = null;

            var mockedUserRepo = new Mock <IUserRepository>();

            mockedUserRepo.Setup(r => r.GetById(1))
            .Returns(userFromDb);
            mockedUserRepo.Setup(r => r.Edit(It.IsAny <DataAccess.Models.User>()))
            .Callback <DataAccess.Models.User>(u => userSaved = u);

            var action = new BusinessLogic.Actions.User.Implementation.LockUser(mockedUserRepo.Object);

            // action
            action.Invoke(1);
            action.Invoke(1);

            // assert
            Assert.NotNull(userSaved.LockedOn);
            mockedUserRepo.Verify(r => r.Edit(It.IsAny <DataAccess.Models.User>()), Times.Once);
            mockedUserRepo.Verify(r => r.Save(), Times.Once());
        }
예제 #6
0
        public void Invoke_ValidData_UpdatesEmailConfirmedOn()
        {
            // prepare
            var userFromDb = new DataAccess.Models.User()
            {
                Id = 1,
                EmailConfirmedOn = null,
            };

            DataAccess.Models.User userSaved = null;

            var mockedUserRepo = new Mock <IUserRepository>();

            mockedUserRepo.Setup(r => r.GetById(1))
            .Returns(userFromDb);
            mockedUserRepo.Setup(r => r.Edit(It.IsAny <DataAccess.Models.User>()))
            .Callback <DataAccess.Models.User>(u => userSaved = u);
            var action = new BusinessLogic.Actions.User.Implementation.ConfirmUserEmail(mockedUserRepo.Object);

            // action
            action.Invoke(1);

            // assert
            Assert.NotNull(userSaved.EmailConfirmedOn);
        }
예제 #7
0
        public void Invoke_EmptyDomain_EditNorSaveAreCalled()
        {
            // prepare
            var userId     = Guid.NewGuid();
            var userFromDb = new DataAccess.Models.User
            {
                Id = userId
            };

            var mockedDomainRepository = new Mock <IDomainRepository>();

            var mockedUserRepository = new Mock <IUserRepository>();

            mockedUserRepository.Setup(r => r.GetById(userId)).Returns(userFromDb);
            var mockedUnitOfWork = new Mock <IUnitOfWork>();

            var action = new SetDomainOwner(mockedDomainRepository.Object, mockedUserRepository.Object, mockedUnitOfWork.Object);

            // action
            var result = action.Invoke(userId, Guid.NewGuid());

            // assert
            Assert.False(result);
            mockedUserRepository.Verify(r => r.GetById(It.IsAny <Guid>()), Times.Once);
            mockedDomainRepository.Verify(r => r.GetById(It.IsAny <Guid>()), Times.Once);
            mockedDomainRepository.Verify(r => r.Edit(It.IsAny <DataAccess.Models.Domain>()), Times.Never);
            mockedUnitOfWork.Verify(r => r.Save(), Times.Never);
        }
예제 #8
0
        public void Invoke_ValidData_AddsUserToDatabaseWithCorrectValues()
        {
            // prepare
            var userData = new UserModel()
            {
                Email    = "email",
                Password = "******",
                Name     = "Ryszard"
            };

            DataAccess.Models.User userSaved = null;

            var mockedUserRepo = new Mock <IUserRepository>();

            mockedUserRepo.Setup(r => r.Add(It.IsAny <DataAccess.Models.User>()))
            .Callback <DataAccess.Models.User>(u => userSaved = u);

            var mockedHasher = new Mock <IHasher>();

            mockedHasher.Setup(h => h.GenerateRandomSalt()).Returns("salt-generated");
            mockedHasher.Setup(h => h.CreateHash("plain", "salt-generated")).Returns("plain-hashed");

            var action = new AddNewUser(mockedUserRepo.Object, mockedHasher.Object);

            // action
            action.Invoke(userData);

            // assert
            Assert.Equal("plain-hashed", userSaved.PasswordHash);
            Assert.Equal("salt-generated", userSaved.PasswordSalt);
            Assert.Equal("Ryszard", userSaved.Name);
            mockedUserRepo.Verify(r => r.Add(It.IsAny <DataAccess.Models.User>()), Times.Once());
            mockedUserRepo.Verify(r => r.Save(), Times.Once());
        }
예제 #9
0
        public void Invoke_ValidData_ReturnsCorrectModel()
        {
            var userFromDb = new DataAccess.Models.User()
            {
                Id               = 1,
                Name             = "Name",
                Email            = "*****@*****.**",
                EmailConfirmedOn = DateTime.MinValue,
                LockedOn         = null,
                CreatedOn        = DateTime.MinValue,
                ModifiedOn       = DateTime.MinValue,
                DeletedOn        = null,
            };

            // prepare
            var mockedUserRepository = new Mock <IUserRepository>();

            mockedUserRepository.Setup(r => r.GetById(It.IsAny <int>()))
            .Returns(userFromDb);
            var action = new GetUserById(mockedUserRepository.Object);

            // action
            var user = action.Invoke(1);

            // check
            Assert.Equal(1, user.Id);
            Assert.Equal("Name", user.Name);
            Assert.Equal("*****@*****.**", user.Email);
            Assert.Equal(DateTime.MinValue, user.EmailConfirmedOn);
            Assert.Null(user.LockedOn);
            Assert.Equal(DateTime.MinValue, user.CreatedOn);
            Assert.Equal(DateTime.MinValue, user.ModifiedOn);
            Assert.Null(user.DeletedOn);
        }
예제 #10
0
        public void Invoke_InvalidData_SaveNorEditAreCalled()
        {
            // prepare
            var userFromDb = new DataAccess.Models.User()
            {
                Id = 1
            };
            var userUpdated = new UserModel()
            {
                Id = 1
            };
            var mockedUserRepo = new Mock <IUserRepository>();

            mockedUserRepo.Setup(r => r.GetById(1))
            .Returns(userFromDb);
            var action = new EditUser(mockedUserRepo.Object);

            // action
            var actionResult = action.Invoke(userUpdated);

            // assert
            Assert.False(actionResult);
            mockedUserRepo.Verify(r => r.Save(), Times.Never);
            mockedUserRepo.Verify(r => r.Edit(It.IsAny <DataAccess.Models.User>()), Times.Never);
        }
예제 #11
0
        public void Invoke_ValidData_UpdatesName()
        {
            // prepare
            var userFromDb = new DataAccess.Models.User()
            {
                Id   = 1,
                Name = "Name",
            };
            var userUpdated = new UserModel()
            {
                Id   = 1,
                Name = "Name2", // updated value
            };

            DataAccess.Models.User userSaved = null;

            var mockedUserRepo = new Mock <IUserRepository>();

            mockedUserRepo.Setup(r => r.GetById(1))
            .Returns(userFromDb);
            mockedUserRepo.Setup(r => r.Edit(It.IsAny <DataAccess.Models.User>()))
            .Callback <DataAccess.Models.User>(u => userSaved = u);
            var action = new EditUser(mockedUserRepo.Object);

            // action
            var actionResult = action.Invoke(userUpdated);

            // assert
            Assert.True(actionResult);
            Assert.Equal("Name2", userSaved.Name);
        }
예제 #12
0
        public void Invoke_ValidData_SavedAndEditAreCalled()
        {
            // prepare
            var guid       = new Guid();
            var userFromDb = new DataAccess.Models.User
            {
                Id           = guid,
                Name         = "Name",
                PasswordHash = "hash",
                PasswordSalt = "salt"
            };

            var userToken = new DataAccess.Models.UserToken
            {
                SecretToken = "123"
            };

            var findByResult = new List <DataAccess.Models.UserToken> {
                userToken
            };

            DataAccess.Models.User userSaved = null;
            var mockedUserRepository         = new Mock <IUserRepository>();

            mockedUserRepository.Setup(r => r.GetById(It.IsAny <Guid>())).Returns(userFromDb);
            mockedUserRepository.Setup(r => r.Edit(It.IsAny <DataAccess.Models.User>()))
            .Callback <DataAccess.Models.User>(u => userSaved = u);

            var mockedUserTokenRepo = new Mock <IUserTokenRepository>();

            mockedUserTokenRepo.Setup(r => r.FindBy(It.IsAny <Expression <Func <DataAccess.Models.UserToken, bool> > >()))
            .Returns(findByResult.AsQueryable);

            var mockedHasher = new Mock <IHasher>();

            mockedHasher.Setup(h => h.GenerateRandomSalt()).Returns("salt-generated");
            mockedHasher.Setup(h => h.CreatePasswordHash("plain", "salt-generated")).Returns("plain-hashed");
            var mockedUnitOfWork = new Mock <IUnitOfWork>();

            var action = new EditUserPassword(mockedUserTokenRepo.Object, mockedUserRepository.Object, mockedUnitOfWork.Object, mockedHasher.Object);

            // action
            var actionResult = action.Invoke(Guid.NewGuid(), "plain");

            // assert
            Assert.True(actionResult);
            Assert.Equal("plain-hashed", userSaved.PasswordHash);
            Assert.Equal("salt-generated", userSaved.PasswordSalt);
            Assert.Equal("Name", userSaved.Name);
            Assert.Equal("123", userToken.SecretToken);

            mockedHasher.Verify(r => r.GenerateRandomSalt(), Times.Once);
            mockedHasher.Verify(r => r.CreatePasswordHash(It.IsAny <string>(), It.IsAny <string>()), Times.Once);

            mockedUserRepository.Verify(r => r.Edit(It.IsAny <DataAccess.Models.User>()), Times.Once());

            mockedUserTokenRepo.Verify(r => r.Delete(It.IsAny <DataAccess.Models.UserToken>()), Times.Once());
            mockedUnitOfWork.Verify(r => r.Save(), Times.Once());
        }
예제 #13
0
        public void Delete(int id)
        {
            var user = new DataAccess.Models.User {
                Id = id
            };

            _activityContext.Users.Remove(user);
            _activityContext.SaveChanges();
        }
예제 #14
0
        public void Invoke_ValidData_EditAndSaveAreCalled()
        {
            // prepare
            var user = new DataAccess.Models.User
            {
                Name = "TestUser"
            };

            var role = new DataAccess.Models.Role
            {
                Name = "TestRole"
            };

            var message = new DataAccess.Models.Message
            {
                Text = "TestMessage"
            };

            var room = new DataAccess.Models.Room();

            var userRoomInDb = new List <DataAccess.Models.UserRoom>
            {
                new DataAccess.Models.UserRoom
                {
                    Messages = new List <DataAccess.Models.Message> {
                        message
                    },
                    LastMessage = message,
                    Room        = room,
                    User        = user,
                    Role        = role,
                    LockedUntil = DateTime.MaxValue
                }
            };

            var mockedUserRoomRepository = new Mock <IUserRoomRepository>();

            mockedUserRoomRepository.Setup(r => r.FindBy(It.IsAny <Expression <Func <DataAccess.Models.UserRoom, bool> > >()))
            .Returns(userRoomInDb.AsQueryable());

            var action = new GetUserRoomByIds(mockedUserRoomRepository.Object);

            // action
            var result = action.Invoke(Guid.NewGuid(), Guid.NewGuid());

            // assert
            Assert.NotNull(result);
            Assert.Equal("TestMessage", result.Messages[0].Text);
            //Assert.Equal("TestUser", result.Room.Users[0].Name);
            Assert.Equal("TestUser", result.User.Name);
            Assert.Equal("TestRole", result.Role.Name);
            Assert.Equal(DateTime.MaxValue, result.LockedUntil);
            mockedUserRoomRepository.Verify(r => r.FindBy(It.IsAny <Expression <Func <DataAccess.Models.UserRoom, bool> > >()), Times.Once);
        }