Skip to content

Commit

Permalink
Add public MissionActions controller
Browse files Browse the repository at this point in the history
  • Loading branch information
louptheron committed Dec 4, 2023
1 parent dd9259d commit 6a798e1
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<InfractionDataOutput> {
@Operation(summary = "Get all infractions")
fun getAllInfractionsController(): List<InfractionDataOutput> {
return getAllInfractions.execute().map { infraction ->
InfractionDataOutput.fromInfraction(infraction)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<MissionActionDataOutput> {
return getMissionActions.execute(missionId).map { MissionActionDataOutput.fromMissionAction(it) }
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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 <T> 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)
}
}

}
2 changes: 1 addition & 1 deletion infra/configurations/application-dev.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion infra/configurations/application-local.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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

###################
Expand Down
2 changes: 1 addition & 1 deletion infra/configurations/application-prod.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 6a798e1

Please sign in to comment.