diff --git a/frontend/src/features/common/types/env-mission-types.ts b/frontend/src/features/common/types/env-mission-types.ts index 14a521db2..c8e26608f 100644 --- a/frontend/src/features/common/types/env-mission-types.ts +++ b/frontend/src/features/common/types/env-mission-types.ts @@ -123,7 +123,7 @@ export enum ActionTargetTypeEnum { export const actionTargetTypeLabels = { COMPANY: { code: 'COMPANY', - libelle: 'Société' + libelle: 'Personne morale' }, INDIVIDUAL: { code: 'INDIVIDUAL', diff --git a/frontend/src/features/pam/mission/components/elements/actions/action-control-env.tsx b/frontend/src/features/pam/mission/components/elements/actions/action-control-env.tsx index 6054f9ac4..eaf438d61 100644 --- a/frontend/src/features/pam/mission/components/elements/actions/action-control-env.tsx +++ b/frontend/src/features/pam/mission/components/elements/actions/action-control-env.tsx @@ -184,6 +184,7 @@ const ActionControlEnv: React.FC = ({ action }) => { diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.test.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.test.tsx index 3ed7cfca1..c19e40715 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.test.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.test.tsx @@ -19,7 +19,7 @@ describe('EnvInfractionAddNewTarget', () => { describe('testing rendering', () => { it('should show the add button by default', async () => { render() - expect(screen.getByText('Ajouter une nouvelle cible avec infraction')).toBeInTheDocument() + expect(screen.getByText('Ajouter une infraction')).toBeInTheDocument() }) it('should show the form when clicking the button', async () => { render() diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.tsx index b3d30f09d..09481f258 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-add-new-target.tsx @@ -86,7 +86,7 @@ const EnvInfractionAddNewTarget: React.FC = ({ avai Icon={Icon.Plus} role={'add-target'} > - Ajouter une nouvelle cible avec infraction + Ajouter une infraction diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.test.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.test.tsx index c1316c246..900104bac 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.test.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.test.tsx @@ -1,5 +1,9 @@ import { render, screen, fireEvent } from '../../../../../../test-utils.tsx' -import { InfractionTypeEnum, VesselTypeEnum } from '../../../../../common/types/env-mission-types.ts' +import { + ActionTargetTypeEnum, + InfractionTypeEnum, + VesselTypeEnum +} from '../../../../../common/types/env-mission-types.ts' import EnvInfractionExistingTargets from './env-infraction-existing-targets.tsx' import { vi } from 'vitest' import { Infraction, InfractionByTarget } from '../../../../../common/types/infraction-types.ts' @@ -35,7 +39,8 @@ const infractionByTargetMock = (infractions: Infraction[], targetAddedByUnit: bo }) const props = (infractionsByTarget?: InfractionByTarget[]) => ({ availableControlTypesForInfraction: [ControlType.ADMINISTRATIVE], - infractionsByTarget + infractionsByTarget, + actionTargetType: ActionTargetTypeEnum.VEHICLE }) describe('EnvInfractionExistingTargets', () => { diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.tsx index c43e0227c..dbc04c996 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-existing-targets.tsx @@ -10,15 +10,18 @@ import EnvInfractionTargetAddedByUnitForm from './env-infraction-target-added-by import Text from '../../../../../common/components/ui/text.tsx' import useDeleteInfraction from '../../../hooks/use-delete-infraction.tsx' import useAddOrUpdateInfractionEnv from '../../../hooks/use-add-update-infraction-env.tsx' +import { ActionTargetTypeEnum } from '@common/types/env-mission-types.ts' export interface EnvInfractionExistingTargetProps { availableControlTypesForInfraction?: ControlType[] infractionsByTarget?: InfractionByTarget[] + actionTargetType?: ActionTargetTypeEnum } const EnvInfractionExistingTargets: React.FC = ({ availableControlTypesForInfraction, - infractionsByTarget + infractionsByTarget, + actionTargetType }) => { const { missionId, actionId } = useParams() @@ -72,10 +75,7 @@ const EnvInfractionExistingTargets: React.FC =
{selectedVessel === infractionByTarget.vesselIdentifier ? ( @@ -119,6 +119,7 @@ const EnvInfractionExistingTargets: React.FC = ) : ( ) => { setFormData(infraction as Infraction) diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.test.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.test.tsx index 77117c638..670df9c6c 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.test.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.test.tsx @@ -1,8 +1,9 @@ import { render, screen, fireEvent } from '../../../../../../test-utils.tsx' import EnvInfractionSummary from './env-infraction-summary.tsx' import { ControlType } from '@common/types/control-types.ts' -import { InfractionTypeEnum, VesselTypeEnum } from '@common/types/env-mission-types.ts' +import { ActionTargetTypeEnum, InfractionTypeEnum, VesselTypeEnum } from '@common/types/env-mission-types.ts' import { Infraction } from '@common/types/infraction-types.ts' +import { Icon } from '@mtes-mct/monitor-ui' const infractionMock = { id: '123', @@ -13,6 +14,15 @@ const infractionMock = { target: undefined } +const infractionControlTypeNullMockEnv = { + id: '123', + controlType: null, + infractionType: InfractionTypeEnum.WITHOUT_REPORT, + natinfs: ['123'], + observations: undefined, + target: undefined +} + const infractionMockEnv = { id: '456', controlType: null, @@ -29,12 +39,30 @@ const infractionByTargetMock = (infractions: Infraction[]) => ({ targetAddedByUnit: false }) +const infractionByTargetCompanyMock = (infractions: Infraction[]) => ({ + vesselIdentifier: null, + vesselType: null, + infractions, + controlTypesWithInfraction: [ControlType.ADMINISTRATIVE], + targetAddedByUnit: false +}) + const props = infractionByTarget => ({ infractionByTarget, onAddInfractionForTarget: vi.fn(), onEditInfractionForTarget: vi.fn(), - onDeleteInfraction: vi.fn() + onDeleteInfraction: vi.fn(), + actionTargetType: ActionTargetTypeEnum.VEHICLE +}) + +const propsCompany = infractionByTarget => ({ + infractionByTarget, + onAddInfractionForTarget: vi.fn(), + onEditInfractionForTarget: vi.fn(), + onDeleteInfraction: vi.fn(), + actionTargetType: ActionTargetTypeEnum.COMPANY }) + describe('EnvInfractionSummary', () => { describe('testing rendering', () => { test('renders the component', async () => { @@ -51,11 +79,15 @@ describe('EnvInfractionSummary', () => { expect(screen.queryByRole('edit-infraction')).toBeNull() expect(screen.queryByRole('delete-infraction')).toBeNull() }) + test('should render the display button when controlType is null', async () => { + render() + expect(screen.queryByRole('display-infraction')).not.toBeNull() + }) }) describe('Nav infraction', () => { test('should render the correct control title', async () => { render() - expect(screen.getByText('Contrôle administratif navire')).toBeInTheDocument() + expect(screen.getByTestId('env-infraction-control-title')).toHaveTextContent('Contrôle administratif navire') }) test('should render the edit and delete buttons ', async () => { render() @@ -92,4 +124,11 @@ describe('EnvInfractionSummary', () => { expect(onDeleteInfraction).toHaveBeenCalled() }) }) + + describe('rendering button "Ajouter une infraction pour cette cible"', () => { + test('should not render button "Ajouter une infraction pour cette cible" if action target type is not VEHICLE', async () => { + render() + expect(screen.queryByText('infraction pour cette cible')).not.toBeInTheDocument() + }) + }) }) diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.tsx index 30abd87eb..ac70b2565 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-summary.tsx @@ -6,73 +6,83 @@ import { controlTitle, vesselTypeToHumanString } from '../../../utils/control-ut import { Infraction, InfractionByTarget } from '@common/types/infraction-types.ts' import InfractionTypeTag from '../../ui/infraction-type-tag.tsx' import NatinfsTag from '../../ui/natinfs-tag.tsx' +import { ActionTargetTypeEnum } from '@common/types/env-mission-types.ts' interface EnvInfractionSummaryProps { infractionByTarget?: InfractionByTarget onAddInfractionForTarget: (infraction?: Partial) => void onEditInfractionForTarget: (infraction: Infraction) => void onDeleteInfraction: (infractionId: string) => void + actionTargetType?: ActionTargetTypeEnum } const EnvInfractionSummary: React.FC = ({ infractionByTarget, onAddInfractionForTarget, onEditInfractionForTarget, - onDeleteInfraction + onDeleteInfraction, + actionTargetType }) => { return ( - - - - - {`${vesselTypeToHumanString(infractionByTarget?.vesselType)} - ${infractionByTarget?.vesselIdentifier}`} - - - - - - - {infractionByTarget?.infractions.map((infraction: Infraction) => ( - - + + - + {!infraction?.controlType ? 'Infraction contrôle de l’environnement' - : controlTitle(infraction.controlType)} + : `${infraction.target?.identityControlledPerson} | ${controlTitle(infraction.controlType)}`} - - - - - - - - - - - {infraction.controlType !== null && ( - - + + + + + {actionTargetType === ActionTargetTypeEnum.VEHICLE && ( + + + + )} + + + + + + + + + + + + + + + + + {infraction.controlType ? ( + = ({ onClick={() => onEditInfractionForTarget(infraction)} /> + + + onDeleteInfraction(infraction.id)} + /> + + + ): + onDeleteInfraction(infraction.id)} + role="display-infraction" + onClick={() => onEditInfractionForTarget(infraction)} /> - - )} - + } + + + + + ))} ) diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-cacem-form.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-cacem-form.tsx index 7bbcf7a63..4cd2300d2 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-cacem-form.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-cacem-form.tsx @@ -1,6 +1,6 @@ import React from 'react' import { Stack } from 'rsuite' -import { Checkbox, Legend, MultiRadio, Select, THEME } from '@mtes-mct/monitor-ui' +import { Accent, Button, Checkbox, Legend, MultiRadio, Select, Size, THEME } from '@mtes-mct/monitor-ui' import { ControlType } from '@common/types/control-types.ts' import { Infraction, InfractionByTarget } from '@common/types/infraction-types.ts' import InfractionForm from './infraction-form.tsx' @@ -49,7 +49,12 @@ const EnvInfractionTargetAddedByCacemForm: React.FC { return ( - + @@ -123,26 +128,44 @@ const EnvInfractionTargetAddedByCacemForm: React.FC - Ajout d’une infraction pour cette cible - - - onChange('controlType', nextValue)} + /> + + + + + + + )} ) diff --git a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-unit-form.tsx b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-unit-form.tsx index b8431fe64..1240bf004 100644 --- a/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-unit-form.tsx +++ b/frontend/src/features/pam/mission/components/elements/infractions/env-infraction-target-added-by-unit-form.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react' import { Stack } from 'rsuite' -import { Select, TextInput } from '@mtes-mct/monitor-ui' +import { Select, TextInput, THEME } from '@mtes-mct/monitor-ui' import { ControlType } from '@common/types/control-types.ts' import { Infraction } from '@common/types/infraction-types.ts' import InfractionForm from './infraction-form.tsx' @@ -52,7 +52,13 @@ const EnvInfractionTargetAddedByUnitForm: React.FC +