From 6a798e143225afba587d3ae02a18dc4b700fd71c Mon Sep 17 00:00:00 2001 From: Loup Theron Date: Mon, 4 Dec 2023 15:56:31 +0100 Subject: [PATCH] Add public MissionActions controller --- .../api/public_api/InfractionController.kt | 4 +- .../PublicMissionActionsController.kt | 30 ++++++++ ...> PublicMissionActionsControllerITests.kt} | 2 +- .../PublicMissionActionsControllerITests.kt | 68 +++++++++++++++++++ .../configurations/application-dev.properties | 2 +- .../application-local.properties | 2 +- .../application-prod.properties | 2 +- 7 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsController.kt rename backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/bff/{MissionActionsControllerITests.kt => PublicMissionActionsControllerITests.kt} (99%) create mode 100644 backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsControllerITests.kt diff --git a/backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/InfractionController.kt b/backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/InfractionController.kt index 482656b357..a152b884f2 100644 --- a/backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/InfractionController.kt +++ b/backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/InfractionController.kt @@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RestController class InfractionController(private val getAllInfractions: GetAllInfractions) { @GetMapping("") - @Operation(summary = "Get fishing and security infractions") - fun getFishingAndSecurityInfractions(): List { + @Operation(summary = "Get all infractions") + fun getAllInfractionsController(): List { return getAllInfractions.execute().map { infraction -> InfractionDataOutput.fromInfraction(infraction) } diff --git a/backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsController.kt b/backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsController.kt new file mode 100644 index 0000000000..2f4dae6023 --- /dev/null +++ b/backend/src/main/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsController.kt @@ -0,0 +1,30 @@ +package fr.gouv.cnsp.monitorfish.infrastructure.api.public_api + +import fr.gouv.cnsp.monitorfish.domain.use_cases.mission_actions.GetMissionActions +import fr.gouv.cnsp.monitorfish.infrastructure.api.outputs.MissionActionDataOutput +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.Parameter +import io.swagger.v3.oas.annotations.tags.Tag +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/api/v1/mission_actions") +@Tag(name = "APIs for mission actions") +class PublicMissionActionsController( + private val getMissionActions: GetMissionActions, +) { + + @GetMapping("") + @Operation(summary = "Get mission actions of specified mission") + fun getMissionActions( + @Parameter(description = "Mission id") + @RequestParam(name = "missionId") + missionId: Int, + ): List { + return getMissionActions.execute(missionId).map { MissionActionDataOutput.fromMissionAction(it) } + } + +} diff --git a/backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/bff/MissionActionsControllerITests.kt b/backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/bff/PublicMissionActionsControllerITests.kt similarity index 99% rename from backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/bff/MissionActionsControllerITests.kt rename to backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/bff/PublicMissionActionsControllerITests.kt index 424e01615b..045dc554ec 100644 --- a/backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/bff/MissionActionsControllerITests.kt +++ b/backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/bff/PublicMissionActionsControllerITests.kt @@ -34,7 +34,7 @@ import java.time.ZonedDateTime @Import(SecurityConfig::class, OIDCProperties::class, SentryConfig::class) @WebMvcTest(value = [(MissionActionsController::class)]) -class MissionActionsControllerITests { +class PublicMissionActionsControllerITests { @Autowired private lateinit var api: MockMvc diff --git a/backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsControllerITests.kt b/backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsControllerITests.kt new file mode 100644 index 0000000000..b80e368992 --- /dev/null +++ b/backend/src/test/kotlin/fr/gouv/cnsp/monitorfish/infrastructure/api/public_api/PublicMissionActionsControllerITests.kt @@ -0,0 +1,68 @@ +package fr.gouv.cnsp.monitorfish.infrastructure.api.public_api + +import com.nhaarman.mockitokotlin2.any +import fr.gouv.cnsp.monitorfish.config.OIDCProperties +import fr.gouv.cnsp.monitorfish.config.SecurityConfig +import fr.gouv.cnsp.monitorfish.config.SentryConfig +import fr.gouv.cnsp.monitorfish.domain.entities.mission_actions.MissionAction +import fr.gouv.cnsp.monitorfish.domain.entities.mission_actions.MissionActionType +import fr.gouv.cnsp.monitorfish.domain.use_cases.mission_actions.GetMissionActions +import kotlinx.coroutines.runBlocking +import org.hamcrest.Matchers.equalTo +import org.junit.jupiter.api.Test +import org.mockito.BDDMockito +import org.mockito.Mockito +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest +import org.springframework.boot.test.mock.mockito.MockBean +import org.springframework.context.annotation.Import +import org.springframework.test.web.servlet.MockMvc +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath +import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status +import java.time.ZonedDateTime + +@Import(SecurityConfig::class, OIDCProperties::class, SentryConfig::class) +@WebMvcTest(value = [(PublicMissionActionsController::class)]) +class PublicMissionActionsControllerITests { + + @Autowired + private lateinit var api: MockMvc + + @MockBean + private lateinit var getMissionActions: GetMissionActions + + private fun givenSuspended(block: suspend () -> T) = BDDMockito.given(runBlocking { block() })!! + + @Test + fun `Should get all mission actions for a mission`() { + // Given + givenSuspended { this.getMissionActions.execute(any()) }.willReturn( + listOf( + MissionAction( + 123, + 1, + 1, + actionType = MissionActionType.SEA_CONTROL, + actionDatetimeUtc = ZonedDateTime.parse("2020-10-06T16:25Z"), + isDeleted = false, + hasSomeGearsSeized = false, + hasSomeSpeciesSeized = false, + isFromPoseidon = true, + ), + ), + ) + + // When + api.perform(get("/api/v1/mission_actions?missionId=123")) + // Then + .andExpect(status().isOk) + .andExpect(jsonPath("$.length()", equalTo(1))) + .andExpect(jsonPath("$[0].actionDatetimeUtc", equalTo("2020-10-06T16:25:00Z"))) + + runBlocking { + Mockito.verify(getMissionActions).execute(123) + } + } + +} diff --git a/infra/configurations/application-dev.properties b/infra/configurations/application-dev.properties index eca8f5f273..e130d73fa7 100644 --- a/infra/configurations/application-dev.properties +++ b/infra/configurations/application-dev.properties @@ -17,7 +17,7 @@ monitorfish.oidc.userinfo-endpoint=/api/user monitorfish.api.protected.paths=/bff/*,/light/v1/vessels/* # Super-user paths of type /** are not supported monitorfish.api.protected.super-user-paths=/bff/v1/beacon_malfunctions,/bff/v1/missions,/bff/v1/operational_alerts,/bff/v1/reportings,/bff/v1/vessels/risk_factors -monitorfish.api.protected.public-paths=/api/v1/authorization/management,/api/v1/beacon_malfunctions/* +monitorfish.api.protected.public-paths=/api/v1/authorization/management,/api/v1/beacon_malfunctions/*,/api/v1/mission_actions/* ################### # Database settings (URL) is injected at runtime with an environment variable diff --git a/infra/configurations/application-local.properties b/infra/configurations/application-local.properties index 43673602b1..083a11cc95 100644 --- a/infra/configurations/application-local.properties +++ b/infra/configurations/application-local.properties @@ -21,7 +21,7 @@ monitorfish.oidc.userinfo-endpoint=/api/user monitorfish.api.protected.paths=/bff/*,/light/v1/vessels/* # Super-user paths of type /** are not supported monitorfish.api.protected.super-user-paths=/bff/v1/beacon_malfunctions,/bff/v1/missions,/bff/v1/operational_alerts,/bff/v1/reportings,/bff/v1/vessels/risk_factors -monitorfish.api.protected.public-paths=/api/v1/authorization/management,/api/v1/beacon_malfunctions/* +monitorfish.api.protected.public-paths=/api/v1/authorization/management,/api/v1/beacon_malfunctions/*,/api/v1/mission_actions/* monitorfish.api.protected.api-key=DUMMY-API-KEY ################### diff --git a/infra/configurations/application-prod.properties b/infra/configurations/application-prod.properties index 19df6ef0b0..6b944446ef 100644 --- a/infra/configurations/application-prod.properties +++ b/infra/configurations/application-prod.properties @@ -17,7 +17,7 @@ monitorfish.oidc.userinfo-endpoint=/api/user monitorfish.api.protected.paths=/bff/*,/light/v1/vessels/* # Super-user paths of type /** are not supported monitorfish.api.protected.super-user-paths=/bff/v1/beacon_malfunctions,/bff/v1/missions,/bff/v1/operational_alerts,/bff/v1/reportings,/bff/v1/vessels/risk_factors -monitorfish.api.protected.public-paths=/api/v1/authorization/management,/api/v1/beacon_malfunctions/* +monitorfish.api.protected.public-paths=/api/v1/authorization/management,/api/v1/beacon_malfunctions/*,/api/v1/mission_actions/* ################### # Database settings (URL) is injected at runtime with an environment variable