summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzymon Szukalski <szymon@skas.io>2024-07-23 15:25:17 +1000
committerSzymon Szukalski <szymon@skas.io>2024-07-23 15:25:17 +1000
commitaec0dff5477cafce865410381a722fedbac04ac1 (patch)
tree532bd7a41e9c97e1df53cf122888a77a2f7a9f00
parentfc96ec673822d9f1cbe0e5eb004c12b7f8f2db9b (diff)
Implement simple /import endpoint and test
-rw-r--r--pom.xml4
-rw-r--r--src/main/java/com/stileeducation/markr/MarkrApplication.java8
-rw-r--r--src/main/java/com/stileeducation/markr/controller/TestResultsController.java32
-rw-r--r--src/main/java/com/stileeducation/markr/service/TestResultsService.java7
-rw-r--r--src/main/java/com/stileeducation/markr/service/TestResultsServiceImpl.java15
-rw-r--r--src/test/java/com/stileeducation/markr/config/XmlMapperConfig.java14
-rw-r--r--src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java41
7 files changed, 113 insertions, 8 deletions
diff --git a/pom.xml b/pom.xml
index 7733738..491fe0d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,10 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <artifactId>jackson-dataformat-xml</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
</dependency>
diff --git a/src/main/java/com/stileeducation/markr/MarkrApplication.java b/src/main/java/com/stileeducation/markr/MarkrApplication.java
index c98cfa6..ce721e9 100644
--- a/src/main/java/com/stileeducation/markr/MarkrApplication.java
+++ b/src/main/java/com/stileeducation/markr/MarkrApplication.java
@@ -2,18 +2,10 @@ package com.stileeducation.markr;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
-@RestController
public class MarkrApplication {
- @GetMapping(name = "/")
- public String index() {
- return "Mark - Marking as a Service";
- }
-
public static void main(String[] args) {
SpringApplication.run(MarkrApplication.class, args);
}
diff --git a/src/main/java/com/stileeducation/markr/controller/TestResultsController.java b/src/main/java/com/stileeducation/markr/controller/TestResultsController.java
new file mode 100644
index 0000000..b1a5e63
--- /dev/null
+++ b/src/main/java/com/stileeducation/markr/controller/TestResultsController.java
@@ -0,0 +1,32 @@
+package com.stileeducation.markr.controller;
+
+import com.stileeducation.markr.dto.MCQTestResultsDTO;
+import com.stileeducation.markr.service.TestResultsService;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/")
+public class TestResultsController {
+
+ public static final String IMPORT_ENDPOINT = "/import";
+
+ private final TestResultsService testResultsService;
+
+ public TestResultsController(TestResultsService testResultsService) {
+ this.testResultsService = testResultsService;
+ }
+
+ // TODO - update to consume text/xml+markr, consider return value
+ @PostMapping(value = IMPORT_ENDPOINT, consumes = "application/xml", produces = "application/json")
+ public ResponseEntity<Void> handleXmlRequest(@RequestBody MCQTestResultsDTO testResults) {
+ testResultsService.importTestResults(testResults);
+
+ return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+ }
+
+}
diff --git a/src/main/java/com/stileeducation/markr/service/TestResultsService.java b/src/main/java/com/stileeducation/markr/service/TestResultsService.java
new file mode 100644
index 0000000..810cffa
--- /dev/null
+++ b/src/main/java/com/stileeducation/markr/service/TestResultsService.java
@@ -0,0 +1,7 @@
+package com.stileeducation.markr.service;
+
+import com.stileeducation.markr.dto.MCQTestResultsDTO;
+
+public interface TestResultsService {
+ MCQTestResultsDTO importTestResults(MCQTestResultsDTO mcqTestResults);
+}
diff --git a/src/main/java/com/stileeducation/markr/service/TestResultsServiceImpl.java b/src/main/java/com/stileeducation/markr/service/TestResultsServiceImpl.java
new file mode 100644
index 0000000..0d4cdc9
--- /dev/null
+++ b/src/main/java/com/stileeducation/markr/service/TestResultsServiceImpl.java
@@ -0,0 +1,15 @@
+package com.stileeducation.markr.service;
+
+import com.stileeducation.markr.dto.MCQTestResultsDTO;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TestResultsServiceImpl implements TestResultsService {
+
+ @Override
+ public MCQTestResultsDTO importTestResults(MCQTestResultsDTO testResults) {
+ System.out.println(testResults);
+ return testResults;
+ }
+
+} \ No newline at end of file
diff --git a/src/test/java/com/stileeducation/markr/config/XmlMapperConfig.java b/src/test/java/com/stileeducation/markr/config/XmlMapperConfig.java
new file mode 100644
index 0000000..470c1f9
--- /dev/null
+++ b/src/test/java/com/stileeducation/markr/config/XmlMapperConfig.java
@@ -0,0 +1,14 @@
+package com.stileeducation.markr.config;
+
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class XmlMapperConfig {
+
+ @Bean
+ public XmlMapper xmlMapper() {
+ return new XmlMapper();
+ }
+}
diff --git a/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java b/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java
new file mode 100644
index 0000000..4db9008
--- /dev/null
+++ b/src/test/java/com/stileeducation/markr/controller/TestResultsControllerTest.java
@@ -0,0 +1,41 @@
+package com.stileeducation.markr.controller;
+
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.stileeducation.markr.dto.MCQTestResultsDTO;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.http.*;
+
+import static com.stileeducation.markr.controller.TestResultsController.IMPORT_ENDPOINT;
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class TestResultsControllerTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ private XmlMapper xmlMapper;
+
+ @Autowired
+ private TestRestTemplate restTemplate;
+
+ @Test
+ public void testImport() throws Exception {
+ MCQTestResultsDTO request = new MCQTestResultsDTO();
+ String requestXml = xmlMapper.writeValueAsString(request);
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_XML);
+
+ HttpEntity<String> entity = new HttpEntity<>(requestXml, headers);
+ ResponseEntity<String> response = restTemplate.postForEntity(IMPORT_ENDPOINT, entity, String.class);
+
+ assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT);
+ }
+
+}