diff options
| author | Szymon Szukalski <szymon@skas.io> | 2024-07-26 15:07:54 +1000 |
|---|---|---|
| committer | Szymon Szukalski <szymon@skas.io> | 2024-07-26 15:07:54 +1000 |
| commit | 7d4d645eb24a30888825f6cdf50cb3eec6ef59f7 (patch) | |
| tree | 74ea58ed48b57f44e27e3e52fea7ee1c5f0e8b7c /src/test/java/com/stileeducation/markr | |
| parent | 39e7e3344bf0827fe9563dc1f08d18084316fd6f (diff) | |
Add test cases for multiple submissions
Add test cases which exercise the logic for updating the marks available
and marks obtained.
Update the service method so that they are transactional and reset the
transient 'updated' and 'created' flags after reloading entites to
ensure accurate update/create reporting.
Diffstat (limited to 'src/test/java/com/stileeducation/markr')
| -rw-r--r-- | src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java | 249 | ||||
| -rw-r--r-- | src/test/java/com/stileeducation/markr/service/TestResultsServiceTest.java | 12 |
2 files changed, 219 insertions, 42 deletions
diff --git a/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java b/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java index efb20d6..cd1f3cb 100644 --- a/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java +++ b/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java @@ -4,6 +4,8 @@ import com.stileeducation.markr.MarkrApplication; import com.stileeducation.markr.converter.XmlMarkrMessageConverter; import com.stileeducation.markr.dto.ImportResponseDTO; import com.stileeducation.markr.dto.MCQTestResultsDTO; +import com.stileeducation.markr.repository.TestResultRepository; +import com.stileeducation.markr.service.TestService; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.Marshaller; @@ -33,6 +35,11 @@ public class TestResultsControllerTest { @Autowired private TestRestTemplate restTemplate; + @Autowired + private TestResultRepository testResultRepository; + @Autowired + private TestService testService; + @BeforeAll static void setup() throws IOException { validPayload = new String(new ClassPathResource("sample-results.xml").getInputStream().readAllBytes(), UTF_8); @@ -95,11 +102,11 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> <first-name></first-name> - <last-name>Alysander</last-name> - <student-number>002299</student-number> - <test-id>9863</test-id> + <last-name>Szukalski</last-name> + <student-number>001122</student-number> + <test-id>2024001</test-id> <summary-marks available="20" obtained="13"/> </mcq-test-result> </mcq-test-results> @@ -123,11 +130,11 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> - <first-name>KJ</first-name> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>Szymon</first-name> <last-name></last-name> - <student-number>002299</student-number> - <test-id>9863</test-id> + <student-number>001122</student-number> + <test-id>2024001</test-id> <summary-marks available="20" obtained="13"/> </mcq-test-result> </mcq-test-results> @@ -151,11 +158,11 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> - <first-name>KJ</first-name> - <last-name>Alysander</last-name> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>Szymon</first-name> + <last-name>Szukalski</last-name> <student-number></student-number> - <test-id>9863</test-id> + <test-id>2024001</test-id> <summary-marks available="20" obtained="13"/> </mcq-test-result> </mcq-test-results> @@ -179,10 +186,10 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> - <first-name>KJ</first-name> - <last-name>Alysander</last-name> - <student-number>002299</student-number> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>Szymon</first-name> + <last-name>Szukalski</last-name> + <student-number>2024001</student-number> <test-id></test-id> <summary-marks available="20" obtained="13"/> </mcq-test-result> @@ -207,11 +214,11 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> - <first-name>KJ</first-name> - <last-name>Alysander</last-name> - <student-number>002299</student-number> - <test-id>9863</test-id> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>Szymon</first-name> + <last-name>Szukalski</last-name> + <student-number>001122</student-number> + <test-id>2024001</test-id> </mcq-test-result> </mcq-test-results> """; @@ -234,11 +241,11 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> - <first-name>KJ</first-name> - <last-name>Alysander</last-name> - <student-number>002299</student-number> - <test-id>9863</test-id> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>Szymon</first-name> + <last-name>Szukalski</last-name> + <student-number>001122</student-number> + <test-id>2024001</test-id> <summary-marks obtained="13"/> </mcq-test-result> </mcq-test-results> @@ -262,11 +269,11 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> - <first-name>KJ</first-name> - <last-name>Alysander</last-name> - <student-number>002299</student-number> - <test-id>9863</test-id> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>Szymon</first-name> + <last-name>Szukalski</last-name> + <student-number>001122</student-number> + <test-id>2024001</test-id> <summary-marks available="20"/> </mcq-test-result> </mcq-test-results> @@ -290,11 +297,11 @@ public class TestResultsControllerTest { // Given String invalidPayload = """ <mcq-test-results> - <mcq-test-result scanned-on="2017-12-04T12:12:10+11:00"> - <first-name>KJ</first-name> - <last-name>Alysander</last-name> - <student-number>002299</student-number> - <test-id>9863</test-id> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>Szymon</first-name> + <last-name>Szukalski</last-name> + <student-number>001122</student-number> + <test-id>2024001</test-id> <summary-marks available="20" obtained="1 </mcq-test-result> </mcq-test-results> @@ -312,4 +319,174 @@ public class TestResultsControllerTest { assertThat(response.getBody()).isNotNull(); assertThat(response.getBody().getMessage()).isEqualTo("Invalid XML payload"); } + + @Test + void testInitialSubmitReportsCreatedEntities() throws Exception { + // Given + String validPayload = """ + <mcq-test-results> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <student-number>002233</student-number> + <test-id>202402</test-id> + <summary-marks available="20" obtained="13"/> + </mcq-test-result> + </mcq-test-results> + """; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(XmlMarkrMessageConverter.MEDIA_TYPE); + HttpEntity<String> entity = new HttpEntity<>(validPayload, headers); + + // When + ResponseEntity<ImportResponseDTO> response = restTemplate.postForEntity(IMPORT_ENDPOINT, entity, ImportResponseDTO.class); + + // Then + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getBody()).isNotNull(); + assertThat(response.getBody().getStatus()).isEqualTo("success"); + assertThat(response.getBody().getMessage()).isEqualTo("Import completed successfully"); + assertThat(response.getBody().getData().getStudentsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getStudentsUpdated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getTestsUpdated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestResultsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getTestResultsUpdated()).isEqualTo(0); + } + + + @Test + void testSubsequentSubmitReportsNoCreatedOrUpdatedEntities() throws Exception { + // Given + String validPayload = """ + <mcq-test-results> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <student-number>003344</student-number> + <test-id>202403</test-id> + <summary-marks available="20" obtained="13"/> + </mcq-test-result> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <student-number>003344</student-number> + <test-id>202403</test-id> + <summary-marks available="20" obtained="13"/> + </mcq-test-result> + </mcq-test-results> + """; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(XmlMarkrMessageConverter.MEDIA_TYPE); + HttpEntity<String> entity = new HttpEntity<>(validPayload, headers); + + // Initial Submit + restTemplate.postForEntity(IMPORT_ENDPOINT, entity, ImportResponseDTO.class); + + // When + ResponseEntity<ImportResponseDTO> response = restTemplate.postForEntity(IMPORT_ENDPOINT, entity, ImportResponseDTO.class); + + // Then + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getBody()).isNotNull(); + assertThat(response.getBody().getStatus()).isEqualTo("success"); + assertThat(response.getBody().getMessage()).isEqualTo("Import completed successfully"); + assertThat(response.getBody().getData().getStudentsCreated()).isEqualTo(0); + assertThat(response.getBody().getData().getStudentsUpdated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestsCreated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestsUpdated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestResultsCreated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestResultsUpdated()).isEqualTo(0); + } + + + @Test + void testMarksAvailableAndObtainedAreUpdated() throws Exception { + // Given + String payload = """ + <mcq-test-results> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <student-number>004455</student-number> + <test-id>202404</test-id> + <summary-marks available="20" obtained="13"/> + </mcq-test-result> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <student-number>004455</student-number> + <test-id>202404</test-id> + <summary-marks available="24" obtained="15"/> + </mcq-test-result> + </mcq-test-results> + """; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(XmlMarkrMessageConverter.MEDIA_TYPE); + HttpEntity<String> entity = new HttpEntity<>(payload, headers); + + // When + ResponseEntity<ImportResponseDTO> response = restTemplate.postForEntity(IMPORT_ENDPOINT, entity, ImportResponseDTO.class); + + // Then + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getBody()).isNotNull(); + assertThat(response.getBody().getStatus()).isEqualTo("success"); + assertThat(response.getBody().getMessage()).isEqualTo("Import completed successfully"); + + assertThat(response.getBody().getData().getStudentsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getStudentsUpdated()).isEqualTo(0); + + assertThat(response.getBody().getData().getTestsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getTestsUpdated()).isEqualTo(1); + + assertThat(response.getBody().getData().getTestResultsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getTestResultsUpdated()).isEqualTo(1); + } + + @Test + void testMarksAvailableAndObtainedAreNotUpdatedWhenFirstSubmissionIsHigher() throws Exception { + // Given + String payload = """ + <mcq-test-results> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <student-number>005566</student-number> + <test-id>202405</test-id> + <summary-marks available="24" obtained="15"/> + </mcq-test-result> + <mcq-test-result scanned-on="2024-07-22T12:12:10+11:00"> + <first-name>John</first-name> + <last-name>Doe</last-name> + <student-number>005566</student-number> + <test-id>202405</test-id> + <summary-marks available="20" obtained="13"/> + </mcq-test-result> + </mcq-test-results> + """; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(XmlMarkrMessageConverter.MEDIA_TYPE); + HttpEntity<String> entity = new HttpEntity<>(payload, headers); + + // When + ResponseEntity<ImportResponseDTO> response = restTemplate.postForEntity(IMPORT_ENDPOINT, entity, ImportResponseDTO.class); + + // Then + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(response.getBody()).isNotNull(); + assertThat(response.getBody().getStatus()).isEqualTo("success"); + assertThat(response.getBody().getMessage()).isEqualTo("Import completed successfully"); + assertThat(response.getBody().getData().getStudentsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getStudentsUpdated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getTestsUpdated()).isEqualTo(0); + assertThat(response.getBody().getData().getTestResultsCreated()).isEqualTo(1); + assertThat(response.getBody().getData().getTestResultsUpdated()).isEqualTo(0); + } + }
\ No newline at end of file diff --git a/src/test/java/com/stileeducation/markr/service/TestResultsServiceTest.java b/src/test/java/com/stileeducation/markr/service/TestResultsServiceTest.java index ad4e476..f9a8871 100644 --- a/src/test/java/com/stileeducation/markr/service/TestResultsServiceTest.java +++ b/src/test/java/com/stileeducation/markr/service/TestResultsServiceTest.java @@ -89,37 +89,37 @@ class TestResultsServiceTest { testResult1 = new TestResultBuilder() .withStudent(student1) .withTest(test1) - .withMarksAwarded(10) + .withMarksObtained(10) .build(); testResult2 = new TestResultBuilder() .withStudent(student2) .withTest(test1) - .withMarksAwarded(20) + .withMarksObtained(20) .build(); testResult3 = new TestResultBuilder() .withStudent(student3) .withTest(test1) - .withMarksAwarded(40) + .withMarksObtained(40) .build(); testResult4 = new TestResultBuilder() .withStudent(student4) .withTest(test1) - .withMarksAwarded(50) + .withMarksObtained(50) .build(); testResult5 = new TestResultBuilder() .withStudent(student3) .withTest(test1) - .withMarksAwarded(70) + .withMarksObtained(70) .build(); testResult6 = new TestResultBuilder() .withStudent(student4) .withTest(test1) - .withMarksAwarded(80) + .withMarksObtained(80) .build(); test1Results = List.of(testResult1, testResult2, testResult3, testResult4, testResult5, testResult6); |
