diff --git a/samples/xapi-server/src/main/java/dev/learning/xapi/samples/xapiserver/InstantConverter.java b/samples/xapi-server/src/main/java/dev/learning/xapi/samples/xapiserver/InstantConverter.java new file mode 100644 index 00000000..1b8a5f71 --- /dev/null +++ b/samples/xapi-server/src/main/java/dev/learning/xapi/samples/xapiserver/InstantConverter.java @@ -0,0 +1,38 @@ +/* + * /* Copyright 2016-2023 Berry Cloud Ltd. All rights reserved. + */ + +package dev.learning.xapi.samples.xapiserver; + +import dev.learning.xapi.jackson.model.strict.XapiTimestamp; +import java.time.Instant; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; + +/** + *

+ * InstantConverter class. + *

+ * + * @author István Rátkai (Selindek) + * @author Thomas Turrell-Croft + */ +@Component +public class InstantConverter implements Converter { + + /** + * Converts string to {@link java.time.Instant}. If the timezone is not specified in string, UTC + * will be used. + * + * @param source the String representation of the datetime in ISO 8601 format (e.q. + * '2011-12-03T10:15:30+01:00') + * + * @return {@link java.time.Instant} of source input + */ + @Override + public Instant convert(String source) { + + return XapiTimestamp.parse(source); + } + +} diff --git a/samples/xapi-server/src/main/java/dev/learning/xapi/samples/xapiserver/StatementController.java b/samples/xapi-server/src/main/java/dev/learning/xapi/samples/xapiserver/StatementController.java index e5ce8b66..d97a3994 100644 --- a/samples/xapi-server/src/main/java/dev/learning/xapi/samples/xapiserver/StatementController.java +++ b/samples/xapi-server/src/main/java/dev/learning/xapi/samples/xapiserver/StatementController.java @@ -8,6 +8,7 @@ import dev.learning.xapi.model.StatementResult; import dev.learning.xapi.model.validation.constraints.Statements; import jakarta.validation.Valid; +import java.time.Instant; import java.util.Collection; import java.util.List; import java.util.UUID; @@ -80,7 +81,24 @@ public ResponseEntity getStatement(@RequestParam(required = true) UUI * "https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Communication.md#213-get-statements">GET * Statements */ - @GetMapping(params = {"!statementId, !voidedStatementId"}) + @GetMapping(params = "since") + public ResponseEntity getStatementsSince(@RequestParam Instant since) { + + log.debug("GET statements since"); + + return ResponseEntity.status(HttpStatus.NOT_IMPLEMENTED).build(); + } + + /** + * Get Statements. + * + * @return the ResponseEntity + * + * @see GET + * Statements + */ + @GetMapping(params = {"!statementId, !voidedStatementId", "!since"}) public ResponseEntity getStatements() { log.debug("GET statements"); diff --git a/samples/xapi-server/src/test/java/dev/learning/xapi/samples/xapiserver/StatementsControllerTest.java b/samples/xapi-server/src/test/java/dev/learning/xapi/samples/xapiserver/StatementsControllerTest.java index 2bcca719..1c9bf598 100644 --- a/samples/xapi-server/src/test/java/dev/learning/xapi/samples/xapiserver/StatementsControllerTest.java +++ b/samples/xapi-server/src/test/java/dev/learning/xapi/samples/xapiserver/StatementsControllerTest.java @@ -4,6 +4,7 @@ package dev.learning.xapi.samples.xapiserver; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -69,4 +70,26 @@ void whenPostingMultipleStatementsThenStatusIsOk() throws Exception { .andExpect(status().isOk()); } + @Test + void whenGettingMultipleStatementsWithSinceParameterThenStatusIsNotImplemented() + throws Exception { + + // When Getting Multiple Statements With Since Parameter + mvc.perform(get("/xapi/statements?since=2017-03-01T12:30:00.000+00")) + + // Then Status Is Not Implemented + .andExpect(status().isNotImplemented()); + } + + @Test + void whenGettingMultipleStatementsWithNegativeTimezoneOffsetThenStatusIsBadRequest() + throws Exception { + + // When Getting Multiple Statements With Negative Timezone Offset + mvc.perform(get("/xapi/statements?since=2017-03-01T12:30:00.000-00")) + + // Then Status Is Bad Request + .andExpect(status().isBadRequest()); + } + }