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)); }