Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
 private void SetupAchievementsCalculatorReturns(AchievementTypesToUpdate toUpdate)
 {
     calculatorMock.Setup(x => x.CalculateAchievementTypesToUpdate(It.IsAny <ICollection <UserLesson> >(),
                                                                   It.IsAny <Course>(),
                                                                   It.IsAny <int>()))
     .Returns(toUpdate)
     .Verifiable();
 }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 7
0
        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);
        }