public void EditCourse(Course courseModel, List<int> wordSuitesId)
 {
     using (var uow = _unitOfWorkFactory.GetUnitOfWork())
     {
         var course = uow.CourseRepository.GetById(courseModel.Id);
         course.Name = courseModel.Name;
         var wordSuites = course.WordSuites.
             Where(ws => (!wordSuitesId.Contains(ws.Id) && ws.PrototypeId == null)).Select(ws => ws.Id).ToList();
         RemoveWordSuitesFromCourse(course.Id, wordSuites);
         wordSuitesId.RemoveAll(x => course.WordSuites.Select(ws => ws.Id).Contains(x));
         AddWordSuitesToCourse(course.Id, wordSuitesId);
         uow.Save();
     }
     //using (var context = new WorldOfWordsDatabaseContext())
     //{
     //    var course = context.Courses.First(x => x.Id == courseModel.Id);
     //    course.Name = courseModel.Name;
     //    var wordSuites = course.WordSuites.
     //        Where(ws => (!wordSuitesId.Contains(ws.Id) && ws.PrototypeId == null)).ToList();
     //    RemoveWordSuitesFromCourse(course.Id, wordSuites);
     //    wordSuitesId.RemoveAll(x => course.WordSuites.Select(ws => ws.Id).Contains(x));
     //    AddWordSuitesToCourse(course.Id, wordSuitesId);
     //    context.SaveChanges();
     //}
 }
 public CourseForListOfUsersModel Map(Course course)
 {
     return new CourseForListOfUsersModel()
     {
         Id = course.Id,
         Name = course.Name
     };
 }
 public int Add(Course course, List<int> wordSuitesId)
 {
     using (var context = new WorldOfWordsDatabaseContext())
     {
         context.Courses.Add(course);
         context.SaveChanges();
         AddWordSuitesToCourse(course.Id, wordSuitesId);
         context.SaveChanges();
         return course.Id;
     }
 }
 public CourseModel Map(Course course)
 {
     if (course == null)
     {
         throw new ArgumentNullException("course");
     }
     CourseModel courseModel = new CourseModel();
     courseModel.Id = course.Id;
     courseModel.Name = course.Name;
     courseModel.Language = _languageMapper.ToApiModel(course.Language);
     courseModel.WordSuites = _mapper.Map(course.WordSuites.ToList());
     return courseModel;
 }
 public void EditCourse(Course courseModel, List<int> wordSuitesId)
 {
     using (var context = new WorldOfWordsDatabaseContext())
     {
         var course = context.Courses.First(x => x.Id == courseModel.Id);
         course.Name = courseModel.Name;
         var wordSuites = course.WordSuites.
             Where(ws => (!wordSuitesId.Contains(ws.Id) && ws.PrototypeId == null)).ToList();
         RemoveWordSuitesFromCourse(course.Id, wordSuites);
         wordSuitesId.RemoveAll(x => course.WordSuites.Select(ws => ws.Id).Contains(x));
         AddWordSuitesToCourse(course.Id, wordSuitesId);
         context.SaveChanges();
     }
 }
        public void Setup()
        {
            unitOfWorkFactory.Setup(x => x.GetUnitOfWork()).Returns(unitOfWork.Object);
            unitOfWork.Setup(x => x.GroupRepository).Returns(groupRepository.Object);
           
            groupService = new GroupService(unitOfWorkFactory.Object);

            var course1 = new Course { Id = 555 };
            var course2 = new Course { Id = 1 };

            groups = (new List<Group> { 
            new Group { Id = 111, OwnerId = 555, Course = course1, CourseId = 555, Name = "Name1" },
            new Group { Id = 222, OwnerId = 1, Course = course2, CourseId = 1, Name = "Name2" }}).AsQueryable();
        }
 public int Add(Course course, List<int> wordSuitesId)
 {
     using (var uow = _unitOfWorkFactory.GetUnitOfWork())
     {
         uow.CourseRepository.Add(course);
         uow.Save();
         AddWordSuitesToCourse(course.Id, wordSuitesId);
         uow.Save();
         return course.Id;
     }
     //using (var context = new WorldOfWordsDatabaseContext())
     //{
     //    context.Courses.Add(course);
     //    context.SaveChanges();
     //    AddWordSuitesToCourse(course.Id, wordSuitesId);
     //    context.SaveChanges();
     //    return course.Id;
     //}
 }
 public CourseForGroupModel Map(Course course)
 {
     return new CourseForGroupModel() { Id = course.Id, Name = course.Name };
 }
        public void EditCourse()
        {   
            //Arrange
            List<int> wordSuiteId = new List<int>()
            {
                1,2,3,4
            };

            List<WordSuite> wordsuite = new List<WordSuite>
            {
                new WordSuite
                {
                  Id = 8,
                  PrototypeId = null
                },
                new WordSuite
                {
                    Id = 500,
                    PrototypeId = 100 
                }
            };
            Course courseModel = new Course
            {
                Name = "eke",
                Id = 1
            };
            Course course = new Course
            {
                WordSuites = wordsuite,
                Id = 322
            };
            Mock<IRepository<WorldOfWords.Domain.Models.Course>> repo = new Mock<IRepository<Course>>();
            _uow.Setup(x => x.CourseRepository).Returns(repo.Object);
            //  Mock<IRepository<Course>> _repCourse = new Mock<IRepository<Course>>();
            _uow.Setup(x => x.Save()).Verifiable();
            repo.Setup(x => x.GetById(It.IsAny<int>())).Returns(course);
            Mock<IWordSuiteRepository> suiteRepo = new Mock<IWordSuiteRepository>();
            _uow.Setup(x => x.WordSuiteRepository).Returns(suiteRepo.Object);
            suiteRepo.Setup(x => x.GetById(It.IsAny<int>())).Returns(It.IsAny<WordSuite>());

            //Act
            _service.EditCourse(courseModel, wordSuiteId);
            
            //Assert
            _uow.VerifyAll();
            _uow.Verify(x=>x.Save(),Times.Exactly(3));
            _factory.Verify(x=>x.GetUnitOfWork(),Times.Exactly(3));
            _uow.Verify(x => x.CourseRepository, Times.Exactly(3));
            repo.Verify(x => x.GetById(It.IsAny<int>()), Times.Exactly(3));
            _uow.Verify(x => x.WordSuiteRepository, Times.AtLeastOnce());
            suiteRepo.Verify(x => x.GetById(It.IsAny<int>()), Times.AtLeastOnce());
            _uow.VerifyAll();
        }
        public void GetProgress_ReturnProgress()
        {
            // Arrange
            double expected = 600;
            int userId = 10;
            int id = 8;
            Course course = new Course
            {
                WordSuites = new List<WordSuite>()
                    { 
                        new WordSuite
                        {
                            
                            OwnerId = userId,
                            WordProgresses = new List<WordProgress>
                            {
                                new WordProgress
                                {
                                    Progress = 10

                                }
                            },
                            Threshold = 1,
                            PrototypeId = 2
                        },
                        new WordSuite
                        {
                            OwnerId = 10,
                            PrototypeId = 10,
                            WordProgresses = new List<WordProgress>
                            {
                                new WordProgress
                                {
                                    Progress = 2
                                }
                            },
                            Threshold = 1
                        },
                    },
                Language = new Language(),
                Groups = new List<Group>(),
                Id = 8
            };
            IQueryable<Course> courses = new List<Course>
            {
                course
            }.AsQueryable<Course>();
            Mock<IRepository<WorldOfWords.Domain.Models.Course>> repo = new Mock<IRepository<Course>>();
            _uow.Setup(x => x.CourseRepository).Returns(repo.Object);
            repo.Setup(x => x.GetAll()).Returns(courses);
            
        
            // Act
            double actual = _service.GetProgress(id, userId);

            // Assert
            _factory.Verify(x => x.GetUnitOfWork(), Times.Once);
            _uow.Verify(x => x.CourseRepository, Times.Once);
            repo.Verify(x => x.GetAll(), Times.Once);
            Assert.AreEqual(expected, actual);
        }
        public void GetById_ReturnCourse_Overloaded()
        {
            // Arrange
            int id = 21;
            int userId =8;
            Course expected = new Course
            {
                WordSuites = new List<WordSuite>()
                    { 
                        new WordSuite
                        {
                            OwnerId = userId,
                            PrototypeId = 8
                        },
                        new WordSuite
                        {
                            OwnerId = 1,
                            PrototypeId = 2
                        }
                    },
                Language = new Language(),
                Id = id
            };
            IQueryable<Course> courses = new List<Course>
            {
                expected
            }.AsQueryable<Course>();
            Mock<IRepository<WorldOfWords.Domain.Models.Course>> repo = new Mock<IRepository<Course>>();
            _uow.Setup(x => x.CourseRepository).Returns(repo.Object);
            repo.Setup(x => x.GetAll()).Returns(courses);
            
            // Act
            var actual = _service.GetById(id, userId);

            // Assert 
            _uow.Verify(x => x.CourseRepository, Times.Once);
            _factory.Verify(x => x.GetUnitOfWork(), Times.Once);
            repo.Verify(x => x.GetAll(), Times.Once);
            Assert.AreEqual(expected, actual);
        }
        public void GetById_ReturnCourse_Negative()
        {
            // Arrange 
            int id = 8;
            Course expected = new Course
            {
                
                Id = 322
            };
            IQueryable<Course> courses = new List<Course>
            {
                expected
            }.AsQueryable<Course>();
            Mock<IRepository<WorldOfWords.Domain.Models.Course>> repo = new Mock<IRepository<Course>>();
            _uow.Setup(x => x.CourseRepository).Returns(repo.Object);
            repo.Setup(x => x.GetAll()).Returns(courses);

            //Act
            var actual = _service.GetById(id);

            //Assert
            _uow.Verify(x => x.CourseRepository, Times.Once);
            _factory.Verify(x => x.GetUnitOfWork(), Times.Once);
            repo.Verify(x => x.GetAll(), Times.Once);
            Assert.IsNull(actual);
        }
        public void Add_ReturnsId()
        {

            // Arrange
            int id = 322;
            Course course = new Course
            {
                Id = 322,
                WordSuites = new List<WordSuite>()
            };
            List<int> list = new List<int>()
            {
                1,2,3,4,322
            };
            Mock<IRepository<WorldOfWords.Domain.Models.Course>> repo = new Mock<IRepository<Course>>();
            _uow.Setup(x => x.CourseRepository).Returns(repo.Object);
            _uow.Setup(x => x.CourseRepository.GetById(It.IsAny<int>())).Returns(course);
            Mock<ICollection<WordSuite>> WordSuites = new Mock<ICollection<WordSuite>>();
            Mock<IWordSuiteRepository> wordSuiteRepository = new Mock<IWordSuiteRepository>();
            _uow.Setup(x => x.WordSuiteRepository).Returns(wordSuiteRepository.Object);
            wordSuiteRepository.Setup(x => x.GetById(It.IsAny<int>())).Returns(It.IsAny<WordSuite>());


            // Act
            var actual = _service.Add(course, list);
            
            // Assert
            _factory.Verify(x => x.GetUnitOfWork(), Times.Exactly(2));
            _uow.Verify(x => x.CourseRepository.GetById(course.Id), Times.AtLeastOnce());
            _uow.Verify(x => x.Save(), Times.Exactly(3));
            _uow.Verify(x => x.CourseRepository, Times.Exactly(2));
            _uow.Verify(x => x.CourseRepository.Add(course), Times.Once);
            //WordSuites.Verify(x=>x.Add(),Times.AtLeastOnce);
            Assert.AreEqual(id, actual);
            
        }
        public void GetTeacherCourses_ReturnCourses()
        {
            // Arrange
            int userId = 8;
            Course expected = new Course
            {
                OwnerId = userId,
                WordSuites = new List<WordSuite>()
                    { 
                        new WordSuite
                        {

                            PrototypeId = null
                        }
                    },
                Language = new Language(),
               
            };
            IQueryable<Course> courses = new List<Course>
            {
                expected
            }.AsQueryable<Course>();
            Mock<IRepository<WorldOfWords.Domain.Models.Course>> repo = new Mock<IRepository<Course>>();
            _uow.Setup(x => x.CourseRepository).Returns(repo.Object);
            repo.Setup(x => x.GetAll()).Returns(courses);
            
            //Act
            var actual = _service.GetTeacherCourses(userId);

            //Assert
            _uow.Verify(x => x.CourseRepository, Times.Once);
            _factory.Verify(x => x.GetUnitOfWork(), Times.Once);
            repo.Verify(x => x.GetAll(), Times.Once);
            Assert.AreEqual(courses.ToList<Course>(), actual);
        }