Skip to content

Commit

Permalink
tech: add case for envaction dates
Browse files Browse the repository at this point in the history
  • Loading branch information
maximeperrault committed Jan 16, 2025
1 parent c7d02db commit dade474
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 53 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package fr.gouv.cacem.monitorenv.domain.validators

interface Validator<T> {
fun interface Validator<T> {
fun validate(obj: T)
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,17 +74,15 @@ class MissionValidator : Validator<MissionEntity> {
private fun validateControl(
control: EnvActionControlEntity,
mission: MissionEntity,
isMissionEnded: Boolean
isMissionEnded: Boolean,
) {
validateEnvAction(control, mission)

if (isMissionEnded) {
if (control.vehicleType === null && control.actionTargetType === ActionTargetTypeEnum.VEHICLE) {
throw BackendUsageException(
BackendUsageErrorCode.UNVALID_PROPERTY,
"Le type de véhicule est obligatoire",
)
}
if (isMissionEnded && control.vehicleType === null && control.actionTargetType === ActionTargetTypeEnum.VEHICLE) {
throw BackendUsageException(
BackendUsageErrorCode.UNVALID_PROPERTY,
"Le type de véhicule est obligatoire",
)
}

val sumOfNbTarget = control.infractions?.sumOf { infraction -> infraction.nbTarget }
Expand All @@ -95,7 +93,6 @@ class MissionValidator : Validator<MissionEntity> {
)
}


control.infractions?.forEach { infraction ->
if (infraction.infractionType !== InfractionTypeEnum.WAITING && infraction.natinf?.isEmpty() == true) {
throw BackendUsageException(
Expand Down Expand Up @@ -131,8 +128,8 @@ class MissionValidator : Validator<MissionEntity> {
mission: MissionEntity,
) {
val actionType = if (envAction.actionType === ActionTypeEnum.CONTROL) "du contrôle" else "de la surveillance"
if (envAction.actionStartDateTimeUtc?.isAfter(mission.startDateTimeUtc) == false
&& envAction.actionStartDateTimeUtc?.isEqual(mission.startDateTimeUtc) == false
if (envAction.actionStartDateTimeUtc?.isAfter(mission.startDateTimeUtc) == false &&
envAction.actionStartDateTimeUtc?.isEqual(mission.startDateTimeUtc) == false
) {
throw BackendUsageException(
BackendUsageErrorCode.UNVALID_PROPERTY,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class EnvActionFixture {
infractions = infractions,
actionNumberOfControls = actionNumberOfControls,
actionTargetType = actionTargetTypeEnum,
vehicleType = vehicleTypeEnum
vehicleType = vehicleTypeEnum,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class MissionFixture {
missionTypes: List<MissionTypeEnum> = listOf(MissionTypeEnum.LAND),
openBy: String? = null,
completedBy: String? = null,
envAction: List<EnvActionEntity> = emptyList(),
envActions: List<EnvActionEntity> = emptyList(),
): MissionEntity {
return MissionEntity(
id = id,
Expand All @@ -41,7 +41,7 @@ class MissionFixture {
isGeometryComputedFromControls = false,
updatedAtUtc = null,
createdAtUtc = null,
envActions = envAction,
envActions = envActions,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ class MissionValidatorUTest {
assertThat(assertThrows.message).isEqualTo("Le type de mission est requis")
}


@ParameterizedTest
@ValueSource(strings = ["A", "AA", "AAAA"])
fun `validate should throw an exception if openBy is not a trigram`(openBy: String) {
Expand All @@ -70,7 +69,7 @@ class MissionValidatorUTest {
fun `validate should throw an exception if there is a control with a start date before mission starting date`() {
val startDateTimeUtc = ZonedDateTime.parse("2020-03-04T00:00:00.000Z")
val anEnvActionControl = anEnvActionControl(startTime = startDateTimeUtc.minusSeconds(1))
val mission = aMissionEntity(startDateTimeUtc = startDateTimeUtc, envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(startDateTimeUtc = startDateTimeUtc, envActions = listOf(anEnvActionControl))

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(
Expand All @@ -87,7 +86,7 @@ class MissionValidatorUTest {
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionControl),
envActions = listOf(anEnvActionControl),
)

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
Expand All @@ -105,7 +104,7 @@ class MissionValidatorUTest {
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionControl),
envActions = listOf(anEnvActionControl),
)

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
Expand All @@ -120,11 +119,12 @@ class MissionValidatorUTest {
val endDateTimeUtc = ZonedDateTime.parse("2021-03-04T00:00:00.000Z")

val anEnvActionControl = anEnvActionControl(endTime = startDateTimeUtc.minusSeconds(1))
val mission = aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionControl)
)
val mission =
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envActions = listOf(anEnvActionControl),
)

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(
Expand All @@ -137,11 +137,12 @@ class MissionValidatorUTest {
val startDateTimeUtc = ZonedDateTime.parse("2020-03-04T00:00:00.000Z")
val endDateTimeUtc = ZonedDateTime.parse("2021-03-04T00:00:00.000Z")
val anEnvActionControl = anEnvActionControl(startTime = startDateTimeUtc, endTime = endDateTimeUtc)
val mission = aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionControl)
)
val mission =
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envActions = listOf(anEnvActionControl),
)

missionValidator.validate(mission)
}
Expand All @@ -152,7 +153,7 @@ class MissionValidatorUTest {
infractionType: InfractionTypeEnum,
) {
val anEnvActionControl = anEnvActionControl(infractions = listOf(anInfraction(infractionType = infractionType)))
val mission = aMissionEntity(envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(envActions = listOf(anEnvActionControl))

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(
Expand All @@ -163,7 +164,7 @@ class MissionValidatorUTest {
@Test
fun `validate should throw an exception if there is a control with infraction and nbTarget is less than 1`() {
val anEnvActionControl = anEnvActionControl(infractions = listOf(anInfraction(nbTarget = 0)))
val mission = aMissionEntity(envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(envActions = listOf(anEnvActionControl))

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(assertThrows.message).isEqualTo("le nombre minimum de cible est 1")
Expand All @@ -176,7 +177,7 @@ class MissionValidatorUTest {
actionNumberOfControls = 10,
infractions = listOf(anInfraction(nbTarget = 10), anInfraction(nbTarget = 5)),
)
val mission = aMissionEntity(envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(envActions = listOf(anEnvActionControl))

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(assertThrows.message).isEqualTo("Le nombre de cibles excède le nombre total de contrôles")
Expand All @@ -189,7 +190,7 @@ class MissionValidatorUTest {
actionNumberOfControls = 2,
infractions = listOf(anInfraction(nbTarget = 1)),
)
val mission = aMissionEntity(envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(envActions = listOf(anEnvActionControl))

missionValidator.validate(mission)
}
Expand All @@ -198,7 +199,7 @@ class MissionValidatorUTest {
fun `validate should pass if there is a control with infractionType = WAITING that doesnt have a NATINF`() {
val anEnvActionControl =
anEnvActionControl(infractions = listOf(anInfraction(infractionType = InfractionTypeEnum.WAITING)))
val mission = aMissionEntity(envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(envActions = listOf(anEnvActionControl))

missionValidator.validate(mission)
}
Expand All @@ -207,32 +208,30 @@ class MissionValidatorUTest {
@ValueSource(strings = ["A", "AA", "AAAA"])
fun `validate should throw an exception if there is a control with openBy is not a trigram`(openBy: String) {
val anEnvActionControl = anEnvActionControl(openBy = openBy)
val mission = aMissionEntity(envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(envActions = listOf(anEnvActionControl))

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(assertThrows.message).isEqualTo("Le trigramme \"ouvert par\" doit avoir 3 lettres")
}

@Test
fun `validate should throw an exception if there is a control actionTargetType as VEHICULE without vehiculeType when mission has ended`(
) {
fun `validate should throw an exception if there is a control actionTargetType as VEHICULE without vehiculeType when mission has ended`() {
val endDateTimeUtc = ZonedDateTime.now().plusSeconds(1)
val anEnvActionControl = anEnvActionControl(actionTargetTypeEnum = ActionTargetTypeEnum.VEHICLE)
val mission = aMissionEntity(endDateTimeUtc = endDateTimeUtc, envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(endDateTimeUtc = endDateTimeUtc, envActions = listOf(anEnvActionControl))

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(assertThrows.message).isEqualTo("Le type de véhicule est obligatoire")
}


@ParameterizedTest
@EnumSource(value = ActionTargetTypeEnum::class, names = ["VEHICLE"], mode = EnumSource.Mode.EXCLUDE)
fun `validate should pass if there is a control actionTargetType as targetType other than VEHICLE without vehiculeType when mission has ended`(
targetType: ActionTargetTypeEnum,
) {
val endDateTimeUtc = ZonedDateTime.now().plusSeconds(1)
val anEnvActionControl = anEnvActionControl(actionTargetTypeEnum = targetType)
val mission = aMissionEntity(endDateTimeUtc = endDateTimeUtc, envAction = listOf(anEnvActionControl))
val mission = aMissionEntity(endDateTimeUtc = endDateTimeUtc, envActions = listOf(anEnvActionControl))

missionValidator.validate(mission)
}
Expand All @@ -241,7 +240,7 @@ class MissionValidatorUTest {
fun `validate should throw an exception if there is a surveillance with a start date before mission starting date`() {
val startDateTimeUtc = ZonedDateTime.parse("2020-03-04T00:00:00.000Z")
val anEnvActionSurveillance = anEnvActionSurveillance(startTime = startDateTimeUtc.minusSeconds(1))
val mission = aMissionEntity(startDateTimeUtc = startDateTimeUtc, envAction = listOf(anEnvActionSurveillance))
val mission = aMissionEntity(startDateTimeUtc = startDateTimeUtc, envActions = listOf(anEnvActionSurveillance))

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(
Expand All @@ -258,7 +257,7 @@ class MissionValidatorUTest {
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionSurveillance),
envActions = listOf(anEnvActionSurveillance),
)

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
Expand All @@ -276,7 +275,7 @@ class MissionValidatorUTest {
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionSurveillance),
envActions = listOf(anEnvActionSurveillance),
)

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
Expand All @@ -291,11 +290,12 @@ class MissionValidatorUTest {
val endDateTimeUtc = ZonedDateTime.parse("2021-03-04T00:00:00.000Z")

val anEnvActionSurveillance = anEnvActionSurveillance(endTime = startDateTimeUtc.minusSeconds(1))
val mission = aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionSurveillance)
)
val mission =
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envActions = listOf(anEnvActionSurveillance),
)

val assertThrows = assertThrows(BackendUsageException::class.java) { missionValidator.validate(mission) }
assertThat(
Expand All @@ -308,11 +308,12 @@ class MissionValidatorUTest {
val startDateTimeUtc = ZonedDateTime.parse("2020-03-04T00:00:00.000Z")
val endDateTimeUtc = ZonedDateTime.parse("2020-03-04T00:00:00.000Z")
val anEnvActionSurveillance = anEnvActionSurveillance(startTime = startDateTimeUtc, endTime = endDateTimeUtc)
val mission = aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envAction = listOf(anEnvActionSurveillance)
)
val mission =
aMissionEntity(
startDateTimeUtc = startDateTimeUtc,
endDateTimeUtc = endDateTimeUtc,
envActions = listOf(anEnvActionSurveillance),
)

missionValidator.validate(mission)
}
Expand Down

0 comments on commit dade474

Please sign in to comment.