diff --git a/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java b/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java index 03f8ceb..a67673a 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java +++ b/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java @@ -33,10 +33,12 @@ public class RegistrationsFailedCrseRule extends BaseRule implements Rule { @Override public RuleData fire() { List studentCourseList = ruleProcessorData.getStudentCourses(); - Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("PST"), Locale.CANADA); boolean inProgressCourse = false; for (StudentCourse studentCourse : studentCourseList) { + if (RuleEngineApiUtils.isCompletedCourse(studentCourse.getCompletedCourseLetterGrade(), studentCourse.getCompletedCoursePercentage())) { + continue; + } try { Date sessionDate = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourse.getSessionDate() + "/01", DATE_FORMAT)); String sDate = RuleEngineApiUtils.formatDate(sessionDate, RuleEngineApiConstants.DEFAULT_DATE_FORMAT); diff --git a/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java index ad5e68a..ef6e447 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java @@ -5,9 +5,7 @@ import java.util.*; import java.util.logging.Logger; -import ca.bc.gov.educ.api.ruleengine.dto.RuleData; import ca.bc.gov.educ.api.ruleengine.dto.StudentCourse; -import ca.bc.gov.educ.api.ruleengine.rule.MatchCreditsRule; import ca.bc.gov.educ.api.ruleengine.util.RuleProcessorRuleUtils; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,7 +19,6 @@ import ca.bc.gov.educ.api.ruleengine.dto.RuleProcessorData; import static org.junit.Assert.*; -import static org.mockito.Mockito.when; @RunWith(SpringRunner.class) @@ -1207,6 +1204,38 @@ public void testProcessGradAlgorithmRules2018_EN_126187616() { assertFalse(ruleProcessorData.isGraduated()); } + @Test + public void testRegistrationsFailedCourseRuleIgnoresFailingInterimWhenFinalExists() { + RuleProcessorData ruleProcessorData = getRuleProcessorData("2018-EN-126187616"); + assertNotNull(ruleProcessorData); + ruleProcessorData.setProjected(false); + ruleProcessorData.getStudentCourses().add( + StudentCourse.builder() + .courseCode("ZZZ") + .courseName("Regression Test Course") + .courseLevel("12") + .sessionDate("209912") + .credits(4) + .gradReqMet("") + .gradReqMetDetail("") + .completedCoursePercentage(67.0) + .completedCourseLetterGrade("C") + .interimPercent(42.0) + .interimLetterGrade("F") + .build() + ); + + ruleProcessorData = ruleEngineService.processGradAlgorithmRules(ruleProcessorData); + + assertNotNull(ruleProcessorData); + StudentCourse preservedCourse = ruleProcessorData.getStudentCourses().stream() + .filter(course -> "ZZZ".equals(course.getCourseCode()) && "12".equals(course.getCourseLevel())) + .findFirst() + .orElse(null); + assertNotNull(preservedCourse); + assertFalse(preservedCourse.isFailed()); + } + @Test public void testProcessGradAlgorithmRules2018_EN_cutoff_rule() { RuleProcessorData ruleProcessorData = getRuleProcessorData("2018-EN-CUTOFF-RULE-DATA");