Ejemplo n.º 1
0
        public void GetUsersNotBelongingToGroupTestPositive()
        {
            // Arrange

            // The group, not belonging to it users must be returned by test method
            var group = new Group
            {
                Id     = 111,
                Course = new Course {
                    Id = 222
                },
                OwnerId  = 333,
                CourseId = 222
            };

            var role1 = new Role {
                Name = "Student"
            };
            var role2 = new Role {
                Name = "AnotherRole"
            };

            // On the exit must be this user with this enrollment

            // Enrollment to return
            var enrollment = new Enrollment
            {
                GroupId = 100,
                Group   = new Group {
                    Course = new Course {
                        Id = 100
                    }
                }
            };

            // User to return
            var user = new User
            {
                Id    = 100,
                Roles = new List <Role> {
                    role1
                },
                Enrollments = new List <Enrollment> {
                    enrollment
                }
            };

            enrollment.User = user;

            // User to test "u.Id != group.OwnerId" condition in Service
            var user1 = new User
            {
                Id    = 333,
                Roles = new List <Role> {
                    role1
                },
                Enrollments = new List <Enrollment> {
                    enrollment
                }
            };

            // User to test "u.Enrollments.Select(e => e.Group.Course).FirstOrDefault(c => c.Id == course.Id) == null"
            // condition in Service
            var enrollment2 = new Enrollment
            {
                GroupId = 100,
                Group   = new Group {
                    Course = new Course {
                        Id = 222
                    }
                }
            };
            var user2 = new User
            {
                Id    = 333,
                Roles = new List <Role> {
                    role1
                },
                Enrollments = new List <Enrollment> {
                    enrollment2
                }
            };

            // User to test "!usersCurrentlyInGroup.Any(u2 => u2.Id == u.Id)" condition
            var user3 = new User
            {
                Id    = 333,
                Roles = new List <Role> {
                    role1
                },
                Enrollments = new List <Enrollment> {
                    enrollment2
                }
            };

            // User to test "u.Roles.Select(r => r.Name).Contains("Student")" condition
            var user4 = new User
            {
                Id    = 333,
                Roles = new List <Role> {
                    role2
                },
                Enrollments = new List <Enrollment> {
                    enrollment2
                }
            };

            // For enrollmentRepository to return
            var enrollments = new List <Enrollment>(new Enrollment[] {
                enrollment,
                new Enrollment {
                    GroupId = 111, User = user1
                }
            }).AsQueryable();

            var users = (new List <User> {
                user, user1, user2, user3, user4
            }).AsQueryable();

            var groupRepository = new Mock <IRepository <Group> >();

            unitOfWork.Setup(x => x.GroupRepository).Returns(groupRepository.Object);
            groupRepository.Setup(x => x.GetById(group.Id)).Returns(group);
            enrollmentRepository.Setup(x => x.GetAll()).Returns(enrollments);

            var userRepository = new Mock <IUserRepository>();

            unitOfWork.Setup(x => x.UserRepository).Returns(userRepository.Object);
            userRepository.Setup(x => x.GetAll()).Returns(users);

            // Act
            var result = enrollmentService.GetUsersNotBelongingToGroup(group.Id);

            // Assert
            Assert.IsTrue(result.TrueForAll(u => u.Roles.Select(r => r.Name).Contains("Student")),
                          "User should have the Student role");
            Assert.IsTrue(result.TrueForAll(u => !u.Enrollments.Any(e => e.GroupId == group.Id)),
                          "User shouldn't be in that group");
            Assert.IsTrue(result.TrueForAll(u => !u.Enrollments.Any(e => e.Group.CourseId == group.CourseId)),
                          "User shouldn't be in the course that contains given group");
            Assert.IsTrue(result.TrueForAll(u => u.Id != group.OwnerId));
        }