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) }
/// <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"); }
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); }
// GET api/lessons/5 public IHttpActionResult Get(int id) { Lesson lesson = _lessonRepository.GetLesson(id); if (lesson != null) { return(Ok(new LessonDTO(lesson))); } return(NotFound()); }
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; } } }
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); }
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; } //} }