Skip to content

Commit e1af9ff

Browse files
Merge pull request #609 from bcgov/fix/GRAD2-3085
GRAD2-3085 - fixes monthly distribution npe bug
2 parents 895a0a9 + 70b11b9 commit e1af9ff

File tree

4 files changed

+89
-25
lines changed

4 files changed

+89
-25
lines changed

api/src/main/java/ca/bc/gov/educ/api/batchgraduation/reader/BasePartitioner.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,4 +259,8 @@ void filterOutDeceasedStudents(List<StudentCredentialDistribution> credentialLis
259259
LOGGER.debug("Revised size of credential list: {}", credentialList.size());
260260
}
261261
}
262+
263+
protected void setReportingType(List<StudentCredentialDistribution> credentialList, String reportingSchoolType) {
264+
credentialList.forEach(credential -> credential.setReportingSchoolTypeCode(reportingSchoolType));
265+
}
262266
}

api/src/main/java/ca/bc/gov/educ/api/batchgraduation/reader/DistributionRunPartitioner.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.util.List;
1717
import java.util.Map;
1818

19+
import static ca.bc.gov.educ.api.batchgraduation.constants.ReportingSchoolTypesEnum.SCHOOL_AT_GRAD;
20+
1921
/**
2022
* Monthly Distribution Partitioner
2123
*/
@@ -55,6 +57,7 @@ public Map<String, ExecutionContext> partition(int gridSize) {
5557
filterByStudentSearchRequest(credentialList);
5658
if(!credentialList.isEmpty()) {
5759
filterOutDeceasedStudents(credentialList);
60+
setReportingType(credentialList, SCHOOL_AT_GRAD.toString());
5861
updateBatchJobHistory(createBatchJobHistory(), (long) credentialList.size());
5962
return getStringExecutionContextMap(gridSize, credentialList, null);
6063
}

api/src/main/java/ca/bc/gov/educ/api/batchgraduation/rest/RestUtils.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.util.concurrent.atomic.AtomicReference;
1616
import java.util.stream.Collectors;
1717

18+
import static ca.bc.gov.educ.api.batchgraduation.constants.ReportingSchoolTypesEnum.SCHOOL_AT_GRAD;
19+
1820
@Component
1921
public class RestUtils {
2022

@@ -247,11 +249,7 @@ public StudentCredentialDistribution processDistribution(StudentCredentialDistri
247249
item.setProgram(stuRec.getProgram());
248250
item.setHonoursStanding(stuRec.getHonoursStanding());
249251
if(item.getSchoolId() == null) {
250-
if(List.of("RC", "OC").contains(summary.getCredentialType())) { // use school at grad for certs
251-
item.setSchoolId(stuRec.getSchoolAtGradId());
252-
} else {
253-
item.setSchoolId(stuRec.getSchoolOfRecordId());
254-
}
252+
setSchoolId(item, summary, stuRec);
255253
}
256254
ca.bc.gov.educ.api.batchgraduation.model.institute.School school = getSchool(item.getSchoolId());
257255
if (school != null) {
@@ -273,6 +271,14 @@ public StudentCredentialDistribution processDistribution(StudentCredentialDistri
273271
return item;
274272
}
275273

274+
private void setSchoolId(StudentCredentialDistribution item, DistributionSummaryDTO summary, GraduationStudentRecordDistribution studentRecord) {
275+
if(StringUtils.equalsAnyIgnoreCase(summary.getCredentialType(), "RC", "OC") || StringUtils.equalsIgnoreCase(item.getReportingSchoolTypeCode(), SCHOOL_AT_GRAD.toString())) { // use school at grad for certs and monthly distribution
276+
item.setSchoolId(studentRecord.getSchoolAtGradId());
277+
} else {
278+
item.setSchoolId(studentRecord.getSchoolOfRecordId());
279+
}
280+
}
281+
276282
public PsiCredentialDistribution processPsiDistribution(PsiCredentialDistribution item, PsiDistributionSummaryDTO summary) {
277283
summary.setProcessedCount(summary.getProcessedCount() + 1L);
278284
try {

api/src/test/java/ca/bc/gov/educ/api/batchgraduation/util/RestUtilsTest.java

Lines changed: 71 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import org.junit.After;
1010
import org.junit.Before;
1111
import org.junit.Test;
12+
import org.junit.jupiter.params.ParameterizedTest;
13+
import org.junit.jupiter.params.provider.CsvSource;
1214
import org.junit.runner.RunWith;
1315
import org.mockito.Mock;
1416
import org.slf4j.Logger;
@@ -331,36 +333,56 @@ public void testGetStudentData_withlist() {
331333
assertThat(resList).hasSize(1);
332334
}
333335

334-
@Test
335-
public void testProcessDistribution() {
336+
@ParameterizedTest
337+
@CsvSource({
338+
"SCHOOL_AT_GRAD, , schoolAtGrad",
339+
", RC, schoolAtGrad",
340+
", , schoolOfRecord"
341+
})
342+
void testProcessDistribution_schoolIdIsNullAndReportingSchoolType_addsCorrectSchool(String reportingSchoolTypeCode, String credentialType, String expectedSchoolType) {
336343

337344
final UUID studentID = UUID.randomUUID();
338-
final String pen = "123456789";
339345
final Long batchId = 9879L;
340-
final String mincode = "123121111";
346+
final UUID schoolId = UUID.randomUUID();
347+
final UUID schoolOfRecordId = UUID.randomUUID();
341348
List<StudentCredentialDistribution> globalList = new ArrayList<>();
342349

343350
StudentCredentialDistribution scd = new StudentCredentialDistribution();
344351
scd.setStudentGrade("12");
345352
scd.setId(UUID.randomUUID());
346353
scd.setPaperType("YED4");
347-
scd.setSchoolOfRecord(mincode);
354+
scd.setReportingSchoolTypeCode(reportingSchoolTypeCode);
348355
scd.setStudentID(studentID);
349-
globalList.add(scd);
356+
357+
GraduationStudentRecordDistribution grd = new GraduationStudentRecordDistribution();
358+
grd.setStudentID(studentID);
359+
grd.setProgram("2018-EN");
360+
grd.setStudentGrade("12");
361+
grd.setSchoolAtGradId(schoolId);
362+
grd.setSchoolOfRecordId(schoolOfRecordId);
363+
364+
mockTokenResponseObject();
365+
366+
when(this.restService.get(String.format(constants.getStudentInfo(),studentID), GraduationStudentRecordDistribution.class)).thenReturn(grd);
350367

351368
DistributionSummaryDTO summary = new DistributionSummaryDTO();
352369
summary.setBatchId(batchId);
353370
summary.setGlobalList(globalList);
371+
summary.setCredentialType(credentialType);
354372

355373
StudentCredentialDistribution res = this.restUtils.processDistribution(scd,summary);
356374
assertNotNull(res);
375+
if(expectedSchoolType.equals("schoolAtGrad")) {
376+
assertEquals(schoolId, res.getSchoolId());
377+
} else {
378+
assertEquals(schoolOfRecordId, res.getSchoolId());
379+
}
357380
}
358381

359382
@Test
360-
public void testProcessDistribution_elsecase() {
383+
public void testProcessDistribution_schoolIdIsNullAndRC_addsCorrectSchool() {
361384

362385
final UUID studentID = UUID.randomUUID();
363-
final UUID studentID2 = UUID.randomUUID();
364386
final Long batchId = 9879L;
365387
final UUID schoolId = UUID.randomUUID();
366388
List<StudentCredentialDistribution> globalList = new ArrayList<>();
@@ -369,36 +391,65 @@ public void testProcessDistribution_elsecase() {
369391
scd.setStudentGrade("12");
370392
scd.setId(UUID.randomUUID());
371393
scd.setPaperType("YED4");
372-
scd.setSchoolId(schoolId);
373394
scd.setStudentID(studentID);
374-
globalList.add(scd);
375395

376-
StudentCredentialDistribution scd2 = new StudentCredentialDistribution();
377-
scd2.setStudentGrade("12");
378-
scd2.setId(UUID.randomUUID());
379-
scd2.setPaperType("YED4");
380-
scd2.setSchoolId(schoolId);
381-
scd2.setStudentID(studentID2);
396+
GraduationStudentRecordDistribution grd = new GraduationStudentRecordDistribution();
397+
grd.setStudentID(studentID);
398+
grd.setProgram("2018-EN");
399+
grd.setStudentGrade("12");
400+
grd.setSchoolAtGradId(schoolId);
401+
grd.setSchoolOfRecordId(UUID.randomUUID());
382402

403+
mockTokenResponseObject();
404+
405+
when(this.restService.get(String.format(constants.getStudentInfo(),studentID), GraduationStudentRecordDistribution.class)).thenReturn(grd);
406+
407+
DistributionSummaryDTO summary = new DistributionSummaryDTO();
408+
summary.setBatchId(batchId);
409+
summary.setGlobalList(globalList);
410+
summary.setCredentialType("RC");
411+
412+
StudentCredentialDistribution res = this.restUtils.processDistribution(scd,summary);
413+
assertNotNull(res);
414+
assertEquals(schoolId, res.getSchoolId());
415+
}
416+
417+
@Test
418+
public void testProcessDistribution_schoolIdIsNull_addsCorrectSchool() {
419+
420+
final UUID studentID = UUID.randomUUID();
421+
final Long batchId = 9879L;
422+
final UUID schoolId = UUID.randomUUID();
423+
final UUID schoolOfRecordId = UUID.randomUUID();
424+
List<StudentCredentialDistribution> globalList = new ArrayList<>();
425+
426+
StudentCredentialDistribution scd = new StudentCredentialDistribution();
427+
scd.setStudentGrade("12");
428+
scd.setId(UUID.randomUUID());
429+
scd.setPaperType("YED4");
430+
scd.setStudentID(studentID);
383431

384432
GraduationStudentRecordDistribution grd = new GraduationStudentRecordDistribution();
385-
grd.setStudentID(studentID2);
433+
grd.setStudentID(studentID);
386434
grd.setProgram("2018-EN");
387435
grd.setStudentGrade("12");
388-
grd.setSchoolOfRecordId(schoolId);
436+
grd.setSchoolAtGradId(schoolId);
437+
grd.setSchoolOfRecordId(schoolOfRecordId);
389438

390439
mockTokenResponseObject();
391440

392-
when(this.restService.get(String.format(constants.getStudentInfo(),studentID2), GraduationStudentRecordDistribution.class)).thenReturn(grd);
441+
when(this.restService.get(String.format(constants.getStudentInfo(),studentID), GraduationStudentRecordDistribution.class)).thenReturn(grd);
393442

394443
DistributionSummaryDTO summary = new DistributionSummaryDTO();
395444
summary.setBatchId(batchId);
396445
summary.setGlobalList(globalList);
397446

398-
StudentCredentialDistribution res = this.restUtils.processDistribution(scd2,summary);
447+
StudentCredentialDistribution res = this.restUtils.processDistribution(scd,summary);
399448
assertNotNull(res);
449+
assertEquals(schoolOfRecordId, res.getSchoolId());
400450
}
401451

452+
402453
@Test
403454
public void testProcessDistribution_elsecase_null() {
404455

0 commit comments

Comments
 (0)