Context MakeContext(string path = "/", string query = "?query=query")
        {
            var context = new Context();

            var configurationMock = new Mock <IConfiguration>();

            configurationMock.Setup(m => m[DefaultPasswordKey])
            .Returns(DefaultPassword);
            context.Configuration = configurationMock.Object;

            context.Roles.Add(new Role {
                Id = 1, Name = Role.Names.Admin
            });
            context.Roles.Add(new Role {
                Id = 2, Name = Role.Names.Operator
            });
            context.Roles.Add(new Role {
                Id = 3, Name = Role.Names.Manager
            });

            var rolesDaoMock = new Mock <IRolesDao>();

            rolesDaoMock.Setup(m => m.GetAllAsync(It.IsAny <bool>()))
            .ReturnsAsync((bool includeAdmin) => {
                var roles = context.Roles.AsEnumerable();
                if (!includeAdmin)
                {
                    roles = roles.ExceptAdmin();
                }
                return(roles);
            });
            rolesDaoMock.Setup(m => m.GetByIdAsync(It.IsAny <long>()))
            .ReturnsAsync((long id) => context.Roles.First(r => r.Id == id));
            context.RolesDao = rolesDaoMock.Object;

            var usersDaoMock = new Mock <IUsersDao>();

            usersDaoMock.Setup(m => m.GetAllAsync(
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <string>(),
                                   It.IsAny <SortOrder>()))
            .ReturnsAsync((
                              string filterUserName,
                              string filterEmail,
                              string filterFistName,
                              string filterLastName,
                              string filterRoleName,
                              string sortKey,
                              SortOrder sortOrder) =>
            {
                return(context.Users
                       .Where(u => u.UserName.Contains(filterUserName))
                       .Where(u => u.Email.Contains(filterEmail))
                       .Where(u => u.FirstName.Contains(filterFistName))
                       .Where(u => u.LastName.Contains(filterLastName))
                       .Where(u => u.Role.Name.Contains(filterRoleName))
                       .Order(sortKey, sortOrder));
            });
            usersDaoMock.Setup(m => m.GetByIdWithRoleAsync(It.IsAny <long>()))
            .ReturnsAsync((long id) => context.Users.First(u => u.Id == id));

            usersDaoMock.Setup(m => m.CreateAsync(
                                   It.IsAny <User>(),
                                   It.IsAny <string>(),
                                   It.IsAny <string>()))
            .Callback((User user, string password, string roleName) =>
            {
                user.PasswordHash = password;
                user.UserRoles    = new List <UserRole>
                {
                    new UserRole
                    {
                        User = user,
                        Role = new Role
                        {
                            Name = roleName
                        }
                    }
                };
                context.Users.Add(user);
            });
            usersDaoMock.Setup(m => m.UpdateAsync(It.IsAny <User>(), It.IsAny <long>()))
            .Callback((User user, long roleId) =>
            {
                var contextUser       = context.Users.First(u => u.Id == user.Id);
                contextUser.UserName  = user.UserName;
                contextUser.Email     = user.Email;
                contextUser.FirstName = user.FirstName;
                contextUser.LastName  = user.LastName;
                contextUser.UserRoles.First().RoleId = roleId;
            });
            usersDaoMock.Setup(m => m.ResetPasswordAsync(It.IsAny <long>(), It.IsAny <string>()))
            .Callback((long userId, string password) =>
            {
                var user          = context.Users.First(u => u.Id == userId);
                user.PasswordHash = password;
            });
            usersDaoMock.Setup(m => m.DeleteAsync(It.IsAny <long>()))
            .Callback((long userId) =>
            {
                var user = context.Users.First(u => u.Id == userId);
                context.Users.Remove(user);
            });
            context.UsersDao = usersDaoMock.Object;

            var httpContextMock = new Mock <HttpContext>();

            httpContextMock.Setup(m => m.Request.Path)
            .Returns(path);
            httpContextMock.Setup(m => m.Request.QueryString)
            .Returns(new QueryString(query));
            var controllerContext = new ControllerContext
            {
                HttpContext = httpContextMock.Object
            };

            context.ControllerContext = controllerContext;

            var tempDataDictionaryMock = new Mock <ITempDataDictionary>();
            var tryGetValueCallback    = new Context.TryGetTempDataValueCallback((string key, out object value) =>
            {
                context.TempData.TryGetValue(key, out value);
            });
            object dummy;

            tempDataDictionaryMock.Setup(m => m.TryGetValue(It.IsAny <string>(), out dummy))
            .Callback(tryGetValueCallback)
            .Returns(true);
            tempDataDictionaryMock.SetupSet(m => m[It.IsAny <string>()] = It.IsAny <object>())
            .Callback((string key, object o) => context.TempData[key]   = o);
            context.TempDataDictionary = tempDataDictionaryMock.Object;

            return(context);
        }
        Context MakeContext(
            string path       = "/",
            string query      = "?query=query",
            int myBranchIndex = 0)
        {
            var context = new Context();

            var currentUserServiceMock = new Mock <ICurrentUserService>();

            currentUserServiceMock.Setup(m => m.GetUserAsync())
            .ReturnsAsync(context.LoggedInUser);
            currentUserServiceMock.Setup(m => m.GetBranchAsync())
            .ReturnsAsync(context.Branches[myBranchIndex]);
            currentUserServiceMock.Setup(m => m.GetCarAsync())
            .ReturnsAsync(context.MyCar);
            context.CurrentUserService = currentUserServiceMock.Object;

            var branchesDaoMock = new Mock <IBranchesDao>();

            branchesDaoMock.Setup(m => m.GetAllAsync(
                                      It.IsAny <string>(),
                                      It.IsAny <string>(),
                                      It.IsAny <string>(),
                                      It.IsAny <SortOrder>()))
            .ReturnsAsync(context.Branches);
            context.BranchesDao = branchesDaoMock.Object;

            var mailDaoMock = new Mock <IMailDao>();

            mailDaoMock.Setup(m => m.GetAllAsync(
                                  It.IsAny <string>(),
                                  It.IsAny <string>(),
                                  It.IsAny <string>(),
                                  It.IsAny <string>(),
                                  It.IsAny <long?>(),
                                  It.IsAny <string>(),
                                  It.IsAny <long?>(),
                                  It.IsAny <long?>(),
                                  It.IsAny <long?>(),
                                  It.IsAny <PostState?>(),
                                  It.IsAny <string>(),
                                  It.IsAny <SortOrder>()
                                  )).
            ReturnsAsync((
                             string filterId,
                             string filterPersonFrom,
                             string filterPersonTo,
                             string filterAddressTo,
                             long?filterBranchId,
                             string filterBranchStockAddress,
                             long?filterCarId,
                             long?filterSourceBranchId,
                             long?filterDestinationBranchId,
                             PostState? filterState,
                             string sortKey,
                             SortOrder sortOrder) =>
            {
                var mail = context.Mail.AsEnumerable();
                if (filterBranchId.HasValue)
                {
                    mail = mail.Where(p => p.BranchId == filterBranchId.Value);
                }
                if (filterCarId.HasValue)
                {
                    mail = mail.Where(p => p.CarId == filterCarId.Value);
                }
                return(mail
                       .Where(p => p.SourceBranchId == filterSourceBranchId.Value)
                       .Where(p => p.DestinationBranchId == filterDestinationBranchId.Value)
                       .Where(p => p.State == filterState.Value)
                       .Order(sortKey, sortOrder));
            });
            mailDaoMock.Setup(m => m.MoveToCarAsync(
                                  It.IsAny <long>(),
                                  It.IsAny <Car>(),
                                  It.IsAny <bool>(),
                                  It.IsAny <User>()))
            .Callback((long postId, Car car, bool courierDelivery, User user) =>
            {
                var post                = context.Mail.First(p => p.Id == postId);
                post.State              = PostState.InDeliveryToBranchStock;
                post.BranchId           = null;
                post.BranchStockAddress = null;
                post.CarId              = car.Id;
            });
            mailDaoMock.Setup(m => m.MoveToBranchStockAsync(
                                  It.IsAny <long>(),
                                  It.IsAny <Branch>(),
                                  It.IsAny <User>()))
            .Callback((long postId, Branch branch, User user) =>
            {
                var post                = context.Mail.First(p => p.Id == postId);
                post.State              = PostState.InBranchStock;
                post.BranchId           = branch.Id;
                post.BranchStockAddress = null;
                post.CarId              = null;
            });
            context.MailDaoMock = mailDaoMock;

            var httpContextMock = new Mock <HttpContext>();

            httpContextMock.Setup(m => m.Request.Path)
            .Returns(path);
            httpContextMock.Setup(m => m.Request.QueryString)
            .Returns(new QueryString(query));
            var controllerContext = new ControllerContext
            {
                HttpContext = httpContextMock.Object
            };

            context.ControllerContext = controllerContext;

            var tempDataDictionaryMock = new Mock <ITempDataDictionary>();
            var tryGetValueCallback    = new Context.TryGetTempDataValueCallback((string key, out object value) =>
            {
                context.TempData.TryGetValue(key, out value);
            });
            object dummy;

            tempDataDictionaryMock.Setup(m => m.TryGetValue(It.IsAny <string>(), out dummy))
            .Callback(tryGetValueCallback)
            .Returns(true);
            tempDataDictionaryMock.SetupSet(m => m[It.IsAny <string>()] = It.IsAny <object>())
            .Callback((string key, object o) => context.TempData[key]   = o);
            context.TempDataDictionary = tempDataDictionaryMock.Object;

            return(context);
        }
Exemplo n.º 3
0
        Context MakeContext()
        {
            var context = new Context();

            var usersDaoMock = new Mock <IUsersDao>();

            usersDaoMock.Setup(m => m.LoginAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>()))
            .ReturnsAsync((string email, string password, bool rememberMe) =>
            {
                var user = context.Users.FirstOrDefault(u => u.Email == email);
                if (user == null)
                {
                    return(false);
                }
                if (user.PasswordHash != password)
                {
                    return(false);
                }

                context.LoggedInUser = user;
                return(true);
            });
            usersDaoMock.Setup(m => m.LogoutAsync())
            .Callback(() => context.LoggedInUser = null);

            usersDaoMock.Setup(m => m.CheckPasswordAsync(It.IsAny <long>(), It.IsAny <string>()))
            .ReturnsAsync((long id, string password) =>
            {
                var user = context.Users.First(u => u.Id == id);
                return(user.PasswordHash == password);
            });
            usersDaoMock.Setup(m => m.UpdateAsync(It.IsAny <User>(), It.IsAny <long>()))
            .Callback((User user, long roleId) =>
            {
                var contextUser       = context.Users.First(u => u.Id == user.Id);
                contextUser.UserName  = user.UserName;
                contextUser.Email     = user.Email;
                contextUser.FirstName = user.FirstName;
                contextUser.LastName  = user.LastName;
            });
            usersDaoMock.Setup(m => m.ChangePasswordAsync(It.IsAny <long>(), It.IsAny <string>(), It.IsAny <string>()))
            .Callback((long userId, string currentPassword, string newPassword) =>
            {
                var user          = context.Users.First(u => u.Id == userId);
                user.PasswordHash = newPassword;
            });
            context.UsersDaoMock = usersDaoMock;
            context.UsersDao     = usersDaoMock.Object;

            var branchesDaoMock = new Mock <IBranchesDao>();

            branchesDaoMock.Setup(m => m.GetAllAsync(
                                      It.IsAny <string>(),
                                      It.IsAny <string>(),
                                      It.IsAny <string>(),
                                      It.IsAny <SortOrder>()))
            .ReturnsAsync(context.Branches);
            context.BranchesDao = branchesDaoMock.Object;

            var carsDaoMock = new Mock <ICarsDao>();

            carsDaoMock.Setup(m => m.GetAllAsync(
                                  It.IsAny <string>(),
                                  It.IsAny <string>(),
                                  It.IsAny <string>(),
                                  It.IsAny <SortOrder>()))
            .ReturnsAsync(context.Cars);
            context.CarsDao = carsDaoMock.Object;

            var currentUserServiceMock = new Mock <ICurrentUserService>();

            currentUserServiceMock.Setup(m => m.GetUserAsync())
            .ReturnsAsync(() =>
            {
                return(context.LoggedInUser);
            });
            currentUserServiceMock.Setup(m => m.GetRoleAsync())
            .ReturnsAsync(() =>
            {
                return(context.LoggedInUser?.Role);
            });
            currentUserServiceMock.Setup(m => m.GetBranchAsync())
            .ReturnsAsync(() => { return(context.CurrentBranch); });
            currentUserServiceMock.Setup(m => m.SetBranchAsync(It.IsAny <long>()))
            .Callback((long branchId) =>
            {
                var branch            = context.Branches.First(b => b.Id == branchId);
                context.CurrentBranch = branch;
            })
            .ReturnsAsync(true);
            currentUserServiceMock.Setup(m => m.GetCarAsync())
            .ReturnsAsync(() => { return(context.CurrentCar); });
            currentUserServiceMock.Setup(m => m.SetCarAsync(It.IsAny <long>()))
            .Callback((long carId) =>
            {
                var car            = context.Cars.First(b => b.Id == carId);
                context.CurrentCar = car;
            })
            .ReturnsAsync(true);
            currentUserServiceMock.Setup(m => m.Reset())
            .Callback(() =>
            {
                context.CurrentBranch = null;
                context.CurrentCar    = null;
            });
            context.CurrentUserServiceMock = currentUserServiceMock;
            context.CurrentUserService     = currentUserServiceMock.Object;

            var tempDataDictionaryMock = new Mock <ITempDataDictionary>();
            var tryGetValueCallback    = new Context.TryGetTempDataValueCallback((string key, out object value) =>
            {
                context.TempData.TryGetValue(key, out value);
            });
            object dummy;

            tempDataDictionaryMock.Setup(m => m.TryGetValue(It.IsAny <string>(), out dummy))
            .Callback(tryGetValueCallback)
            .Returns(true);
            tempDataDictionaryMock.SetupSet(m => m[It.IsAny <string>()] = It.IsAny <object>())
            .Callback((string key, object o) => context.TempData[key]   = o);
            context.TempDataDictionary = tempDataDictionaryMock.Object;

            return(context);
        }