public void SavesChanges() { //arrange const int courseId = 45; var user = new UserBuilder() .WithUsername(command.Username) .Build(); SetupDbReturnsUser(user); SetupDbReturnsLesson(new LessonBuilder() .WithId(lessonId) .WithPublishedCourse(courseId).Build()); SetupDbReturnsCourse(new CourseBuilder().WithCourseId(courseId).Build()); var returnedAchievementTypesToUpdate = new AchievementTypesToUpdate { LessonCompleted = true, ChapterCompleted = true }; SetupAchievementsCalculatorReturns(returnedAchievementTypesToUpdate); SetupUpdaterReturnsUpdatedAchievements(new List <UserAchievement> { new UserAchievement { Id = 445 } }); //act var result = handler.Handle(command); //assert Assert.True(result.Success); calculatorMock.VerifyAll(); updaterMock.VerifyAll(); dbContextMock.Verify(x => x.SaveChanges(), Times.Once); }
public void LessonCompleted_DoesntIncrementProgressForFinishedLessonAchievements() { //arrange var course = new CourseBuilder().Build(); var typesToUpdate = new AchievementTypesToUpdate { LessonCompleted = true }; var availableAchievements = new List <Achievement> { new AchievementBuilder().WithValues(3, AchievementType.CompleteLesson).Build(), //[0] new AchievementBuilder().WithValues(5, AchievementType.CompleteLesson).Build(), //[1] new AchievementBuilder().WithValues(2, AchievementType.CompleteChapter).Build(), //[2] new AchievementBuilder().WithValues(1, AchievementType.CompleteCourse).Build() //[3] }; var user = new UserBuilder() .AddAchievement(availableAchievements[0], 3) //isCompleted .AddAchievement(availableAchievements[1], 3) //3 out of 5 .AddAchievement(availableAchievements[2], 1) //1 chapter out of 2 .Build(); var utcNow = DateTime.UtcNow; //act var achievementsUpdatedNow = updater.UpdateUserAchievements(user, course, typesToUpdate, availableAchievements, utcNow); //assert //modified achievements Assert.Single(achievementsUpdatedNow); Assert.Equal(4, achievementsUpdatedNow[0].Progress); Assert.False(achievementsUpdatedNow[0].IsCompleted); //not modified achievements Assert.Equal(3, user.Achievements.ToList()[0].Progress); //isCompleted lesson achievement remains unchanged Assert.Equal(1, user.Achievements.ToList()[2].Progress); //chapter achievement remains unchanged Assert.Equal(3, user.Achievements.Count); }
private void SetupAchievementsCalculatorReturns(AchievementTypesToUpdate toUpdate) { calculatorMock.Setup(x => x.CalculateAchievementTypesToUpdate(It.IsAny <ICollection <UserLesson> >(), It.IsAny <Course>(), It.IsAny <int>())) .Returns(toUpdate) .Verifiable(); }
public void ReturnesUpdatedAchievements() { //arrange const int courseId = 45; var user = new UserBuilder() .WithUsername(command.Username) .Build(); SetupDbReturnsUser(user); SetupDbReturnsLesson(new LessonBuilder() .WithId(lessonId) .WithPublishedCourse(courseId).Build()); SetupDbReturnsCourse(new CourseBuilder().WithCourseId(courseId).Build()); var returnedAchievementTypesToUpdate = new AchievementTypesToUpdate { LessonCompleted = true, ChapterCompleted = true }; SetupAchievementsCalculatorReturns(returnedAchievementTypesToUpdate); var updatedAchievements = new List <UserAchievement> { new UserAchievement { Id = 445 } }; SetupUpdaterReturnsUpdatedAchievements(updatedAchievements); var mappedAchievements = new List <UserAchievementDto> { new UserAchievementDto { AchievementId = 445 } }; mapperMock.Setup(x => x.Map <List <UserAchievementDto> >(It.Is <List <UserAchievement> >(p => p == updatedAchievements))) .Returns(mappedAchievements) .Verifiable(); //act var result = handler.Handle(command); //assert Assert.True(result.Success); Assert.Equal(mappedAchievements, result.Value); calculatorMock.VerifyAll(); updaterMock.VerifyAll(); mapperMock.VerifyAll(); }
public void CourseCompleted_AddsCourseAchievement() { //arrange var course = new CourseBuilder().Build(); var typesToUpdate = new AchievementTypesToUpdate { LessonCompleted = true, ChapterCompleted = true, CourseCompleted = true }; var availableAchievements = new List <Achievement> { new AchievementBuilder().WithValues(3, AchievementType.CompleteLesson).Build(), //[0] new AchievementBuilder().WithValues(3, AchievementType.CompleteChapter).Build(), //[1] new AchievementBuilder().WithValues(1, AchievementType.CompleteCourse).Build() //[2] }; var user = new UserBuilder() .AddAchievement(availableAchievements[0], 3) //isCompleted lesson achievement .AddAchievement(availableAchievements[1], 3) //isCompleted chapter acheievement .Build(); var utcNow = DateTime.UtcNow; //act var achievementsUpdatedNow = updater.UpdateUserAchievements(user, course, typesToUpdate, availableAchievements, utcNow); //assert //modified achievements Assert.Single(achievementsUpdatedNow); Assert.Equal(1, achievementsUpdatedNow[0].Progress); Assert.True(achievementsUpdatedNow[0].IsCompleted); Assert.Equal(utcNow, achievementsUpdatedNow[0].CompletedOn); Assert.Equal(course, achievementsUpdatedNow[0].Course); Assert.Equal(3, user.Achievements.Count);//new achievement is added Assert.Equal(achievementsUpdatedNow[0], user.Achievements.Last()); //not modified achievements Assert.Equal(3, user.Achievements.ToList()[0].Progress); //isCompleted lesson achievement remains unchanged Assert.Equal(3, user.Achievements.ToList()[1].Progress); //isCompleted chapter achievement remains unchanged }
public void LessonAndChapterCompleted_IncrementsProgressOnlyForNotFinishedChapterAchievements() { //arrange var course = new CourseBuilder().Build(); var typesToUpdate = new AchievementTypesToUpdate { LessonCompleted = true, ChapterCompleted = true }; var availableAchievements = new List <Achievement> { new AchievementBuilder().WithValues(3, AchievementType.CompleteLesson).Build(), //[0] new AchievementBuilder().WithValues(5, AchievementType.CompleteLesson).Build(), //[1] new AchievementBuilder().WithValues(3, AchievementType.CompleteChapter).Build(), //[2] new AchievementBuilder().WithValues(4, AchievementType.CompleteChapter).Build(), //[3] new AchievementBuilder().WithValues(1, AchievementType.CompleteCourse).Build() //[4] }; var user = new UserBuilder() .AddAchievement(availableAchievements[0], 3) .AddAchievement(availableAchievements[1], 3) .AddAchievement(availableAchievements[2], 1) //1 chapter out of 3 .AddAchievement(availableAchievements[3], 1) //1 chapter out of 4 .Build(); var utcNow = DateTime.UtcNow; //act var achievementsUpdatedNow = updater.UpdateUserAchievements(user, course, typesToUpdate, availableAchievements, utcNow); //assert //modified achievements Assert.Equal(3, achievementsUpdatedNow.Count); //1 lesson and 2 chapter achievements modified Assert.Equal(4, achievementsUpdatedNow[0].Progress); //lesson progress incremented //chapters Assert.Equal(2, achievementsUpdatedNow[1].Progress); Assert.False(achievementsUpdatedNow[1].IsCompleted); Assert.Equal(2, achievementsUpdatedNow[2].Progress); Assert.False(achievementsUpdatedNow[2].IsCompleted); //no course achievements added Assert.Equal(4, user.Achievements.Count); }
public void UpdatesUserAchievements() { //arrange const int courseId = 45; var user = new UserBuilder() .WithUsername(command.Username) .Build(); SetupDbReturnsUser(user); SetupDbReturnsLesson(new LessonBuilder() .WithId(lessonId) .WithPublishedCourse(courseId).Build()); SetupDbReturnsCourse(new CourseBuilder().WithCourseId(courseId).Build()); var returnedAchievementTypesToUpdate = new AchievementTypesToUpdate { LessonCompleted = true, ChapterCompleted = true }; SetupAchievementsCalculatorReturns(returnedAchievementTypesToUpdate); SetupUpdaterReturnsUpdatedAchievements(new List <UserAchievement> { new UserAchievement { Id = 445 } }); //act var result = handler.Handle(command); //assert Assert.True(result.Success); calculatorMock.VerifyAll(); updaterMock.Verify(x => x.UpdateUserAchievements( It.Is <User>(p => p == user), It.Is <Course>(p => p.Id == courseId), It.Is <AchievementTypesToUpdate>(p => p == returnedAchievementTypesToUpdate), It.IsAny <ICollection <Achievement> >(), It.IsAny <DateTime>()) , Times.Once); }