Skip to content

Commit

Permalink
feature: add error message to unparseable interval by using bean vali…
Browse files Browse the repository at this point in the history
…dation annotation to topic request #46

ohsome-contributions-stats-service: 'Consider introducing 'Jakarta Bean validation' standard '
#46
  • Loading branch information
mmerdes committed Feb 7, 2024
1 parent 8d6352f commit b77ad30
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.Parameter
import jakarta.servlet.http.HttpServletRequest
import org.heigit.ohsome.now.statsservice.*
import org.heigit.ohsome.now.statsservice.utils.validateIntervalString
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.validation.annotation.Validated
import org.springframework.web.bind.annotation.*
Expand Down Expand Up @@ -78,6 +77,8 @@ class TopicController {

@Parameter(description = "the granularity defined as Intervals in ISO 8601 time format eg: P1M")
@RequestParam(name = "interval", defaultValue = "P1M", required = false)
@ParseableInterval
// @AtLeastOneMinuteInterval
interval: String,

@Parameter(description = "A comma separated list of countries, can also only be one country")
Expand All @@ -89,8 +90,6 @@ class TopicController {
topics: List<@ValidTopic String>
): OhsomeFormat<Map<String, TopicIntervalResult>> {

validateIntervalString(interval)

val result = measure {
topicService.getTopicStatsForTimeSpanInterval(hashtag, startDate, endDate, interval, countries!!, topics)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,26 +253,39 @@ class TopicControllerMVCTests {

@Test
fun `topic stats per interval throws error for invalid interval string`() {

val expectedErrorMessage = """[{"message":"Invalid ISO8601 string as interval.","invalidValue":"bad_interval"}]"""


val GET = get("/topic/${topics.joinToString()}/interval")
.queryParam("startdate", "2017-10-01T04:00:00Z")
.queryParam("enddate", "2020-10-01T04:00:00Z")
.queryParam("interval", "ErrorString")
.queryParam("interval", "bad_interval")
.queryParam("hashtag", "missingmaps")


this.mockMvc.perform(GET)
.andExpect(status().isBadRequest)
.andExpect(content().string(expectedErrorMessage))
}


//TODO: check error message
@Test
fun `topic stats per interval throws error for interval under one Minute`() {

val expectedErrorMessage = """[{"message":"Interval must not be under 1 minute.","invalidValue":"PT1S"}]"""


val GET = get("/topic/${topics.joinToString()}/interval")
.queryParam("startdate", "2017-10-01T04:00:00Z")
.queryParam("enddate", "2020-10-01T04:00:00Z")
.queryParam("interval", "PT1S")

this.mockMvc.perform(GET)
.andExpect(status().isBadRequest)
.andExpect(content().string(expectedErrorMessage))

}


Expand Down

0 comments on commit b77ad30

Please sign in to comment.