summaryrefslogtreecommitdiff
path: root/src/test/java/com/stileeducation
diff options
context:
space:
mode:
authorSzymon Szukalski <szymon@skas.io>2024-07-26 15:07:54 +1000
committerSzymon Szukalski <szymon@skas.io>2024-07-26 15:07:54 +1000
commit7d4d645eb24a30888825f6cdf50cb3eec6ef59f7 (patch)
tree74ea58ed48b57f44e27e3e52fea7ee1c5f0e8b7c /src/test/java/com/stileeducation
parent39e7e3344bf0827fe9563dc1f08d18084316fd6f (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')
-rw-r--r--src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java249
-rw-r--r--src/test/java/com/stileeducation/markr/service/TestResultsServiceTest.java12
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);