public void UpdateLessonGradeShouldSetLessonToPassStatusIfGradeIs80OrAbove()
        {
            const int    EXISTING_LESSON_ID = 12;
            const double PASSING_GRADE      = 85;

            // Let's make sure the lesson's pass status is set to false before we update it
            Lesson lesson = _lessonRepo.GetLesson(EXISTING_LESSON_ID);

            Assert.IsFalse(lesson.IsPassed, "The lesson's passed status was set somewhere else");

            var lessonService = new LessonService();

            lessonService.UpdateLessonGrade(EXISTING_LESSON_ID, PASSING_GRADE);
            Assert.IsTrue(lesson.IsPassed, "The lesson's passed status wasn't set correctly");
        }
        public void UpdateLessonGrade_IsPassedTrue_Test()
        {
            // Create a LessonService class object referance
            var lessonSvc = new LessonService();

            // Create parametters for true test case scnerio
            var lessonId = 12;
            var grade    = 98.2d; // examaple grade to update the IsPassed value to true and pass the test case

            //var grade = 60.3d;  // example grade to update the IsPassed value to false and fail the test case

            //Execute a "UpdateLessonGrade" method call with above parametters
            // The positive test case shoulld update the boolean value IsPassed to "true" for the lesson no 12 if the grade parametter is gretter than MinimumPassingGrade i.e 80
            lessonSvc.UpdateLessonGrade(lessonId, grade);

            // Create a LessonRepository class referance to get the object with "lessonId" 12 to check for the updated "IsPassed" variable value
            var lessonRepo = new LessonRepository();
            var lesson     = lessonRepo.GetLesson(lessonId);

            //Verify the condition with the return type as true to pass the test case
            //As the lessons and Module repository returns data froo a hardcoded list the object variable value might not get updated but the test case can be tested by updating
            //the hardcoded values of Lessons Objects in the LessonsRepositiry class
            Assert.IsTrue(lesson.IsPassed);

            //The above test case passes if the parametters passes are satisfing the conditions of MinimumPassingGrade and the record is updated as passed (i.e IsPassed=true)
        }
예제 #3
0
        /// <summary>
        /// Did the least refactoring required to make the method easily testable
        /// To get max possible cases out for testing e.g. repo failure.
        /// and still would be able to see if the student has passed the test or not.
        /// </summary>
        /// <param name="lessonId"></param>
        /// <param name="grade"></param>
        /// <param name="isPassed"></param>
        /// <returns></returns>
        public string UpdateLessonGrade(int lessonId, double grade, out bool isPassed)
        {
            isPassed = false;
            var lessonRepo = new LessonRepository();
            var lesson     = lessonRepo.GetLesson(lessonId);

            if (lesson == null)
            {
                return("Lesson not Found!");
            }

            lesson.Grade = grade;

            if (!lesson.IsPassed)
            {
                var moduleRepository = new ModuleRepository();
                var module           = moduleRepository.GetModule(lessonId);

                if (module == null)
                {
                    return("Module not Found!");
                }

                if (grade >= module.MinimumPassingGrade)
                {
                    lesson.IsPassed = true;
                }
                else
                {
                    lesson.IsPassed = false;
                }
            }
            isPassed = lesson.IsPassed;
            return("Success");
        }
예제 #4
0
        public ServiceResponse UpdateLessonGrade(int lessonId, double grade)
        {
            var response = new ServiceResponse();

            try
            {
                if (!IsGradeValid(grade))
                {
                    // I would not set hard-coded strings like this, but I didn't
                    // want to exhaust every little detail for this exercise
                    response.Message      = "Grade is invalid.";
                    response.ResponseCode = Enums.LessonServiceCodes.InvalidGrade;

                    return(response);
                }

                var lessonRepo = new LessonRepository();
                var lesson     = lessonRepo.GetLesson(lessonId);

                if (!IsLessonValid(lesson))
                {
                    // again, I would not hard-code strings like this
                    response.Message      = "Lesson was not found for the given Lesson Id";
                    response.ResponseCode = Enums.LessonServiceCodes.InvalidLessonId;

                    return(response);
                }

                lesson.Grade = grade;

                if (!lesson.IsPassed)
                {
                    var moduleRepository = new ModuleRepository();
                    var module           = moduleRepository.GetModule(lessonId);

                    if (!IsModuleValid(module))
                    {
                        response.Message      = "Module was not found for the given Lesson Id";
                        response.ResponseCode = Enums.LessonServiceCodes.InvalidLessonIdForModule;

                        return(response);
                    }

                    lesson.IsPassed = (grade >= module.MinimumPassingGrade);
                }

                response.ResponseCode = Enums.LessonServiceCodes.UpdateSuccess;
            }
            catch (Exception ex)
            {
                response.ResponseCode = Enums.LessonServiceCodes.Exception;
                response.Exception    = ex;
            }

            return(response);
        }
예제 #5
0
        // GET api/lessons/5
        public IHttpActionResult Get(int id)
        {
            Lesson lesson = _lessonRepository.GetLesson(id);

            if (lesson != null)
            {
                return(Ok(new LessonDTO(lesson)));
            }

            return(NotFound());
        }
예제 #6
0
        public void UpdateLessonGrade(int lessonId, double grade)
        {
            var lessonRepo = new LessonRepository();
            var lesson     = lessonRepo.GetLesson(lessonId);

            lesson.Grade = grade;

            if (!lesson.IsPassed)
            {
                var moduleRepository = new ModuleRepository();
                var module           = moduleRepository.GetModule(lessonId);

                if (grade >= module.MinimumPassingGrade)
                {
                    lesson.IsPassed = true;
                }
                else
                {
                    lesson.IsPassed = false;
                }
            }
        }
예제 #7
0
        public Lesson UpdateLessonGrade(int lessonId, double grade)
        {
            if (grade < 0 || grade > 100)
            {
                throw new ArgumentException("Grade should be greater than or equal to zero, and less than 100", nameof(grade));
            }

            var lessonRepo = new LessonRepository();
            var lesson     = lessonRepo.GetLesson(lessonId);

            if (lesson == null)
            {
                throw new Exception($"Could not find lesson with lessonId: {lessonId}");
            }

            lesson.Grade = grade;

            if (!lesson.IsPassed)
            {
                var moduleRepository = new ModuleRepository();
                var module           = moduleRepository.GetModule(lessonId);

                if (module == null)
                {
                    throw new Exception($"Could not find module with lessonId: {lessonId}");
                }

                if (grade >= module.MinimumPassingGrade)
                {
                    lesson.IsPassed = true;
                }
                else
                {
                    lesson.IsPassed = false;
                }
            }

            return(lesson);
        }
예제 #8
0
        public void UpdateLessonGrade(int lessonId, double grade)
        {
            var lessonRepo = new LessonRepository();
            var lesson     = lessonRepo.GetLesson(lessonId);

            lesson.Grade = grade;

            // For consistency, we need to set the lesson's pass status
            // each time the grade changes
            //if (!lesson.IsPassed)
            //{
            var moduleRepository = new ModuleRepository();
            var module           = moduleRepository.GetModule(lessonId);

            if (grade >= module.MinimumPassingGrade)
            {
                lesson.IsPassed = true;
            }
            else
            {
                lesson.IsPassed = false;
            }
            //}
        }