Skip to content

Commit

Permalink
Add global/per species FAO area manual pno form e2e tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ivangabriele committed Aug 22, 2024
1 parent e8b591e commit e2962d8
Show file tree
Hide file tree
Showing 2 changed files with 190 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ context('Side Window > Manual Prior Notification Form > Form', () => {
cy.fill("Date et heure estimées d'arrivée au port (UTC)", arrivalDateTupleWithTime)
cy.fill('Date et heure prévues de débarque (UTC)', landingDateTupleWithTime)
cy.fill("Port d'arrivée", 'Vannes')
cy.fill('Zone globale de capture', '21.4.T')

cy.fill('Espèces à bord et à débarquer', 'AAX')
cy.fill('Poids (AAX)', 25)
Expand All @@ -46,7 +47,6 @@ context('Side Window > Manual Prior Notification Form > Form', () => {
cy.fill('Quantité (SWO)', 20)

cy.fill('Engins utilisés', ['OTP', 'PTB'], { index: 1 })
cy.fill('Zone globale de capture', '21.4.T')
cy.fill("Points d'attention identifiés par le CNSP", "Un point d'attention.")
cy.fill('Saisi par', 'BOB')

Expand Down Expand Up @@ -187,6 +187,10 @@ context('Side Window > Manual Prior Notification Form > Form', () => {

cy.contains("Veuillez indiquer le port d'arrivée.").should('not.exist')

cy.fill('Zone globale de capture', '21.4.T')

cy.contains('Veuillez indiquer la zone FAO.').should('not.exist')

cy.fill('Espèces à bord et à débarquer', 'AAX')

cy.contains('Veuillez sélectionner au moins une espèce.').should('not.exist')
Expand All @@ -195,18 +199,14 @@ context('Side Window > Manual Prior Notification Form > Form', () => {

cy.contains('Veuillez sélectionner au moins un engin.').should('not.exist')

cy.fill('Zone globale de capture', '21.4.T')

cy.contains('Veuillez indiquer la zone FAO.').should('not.exist')

cy.fill('Saisi par', 'BOB')

cy.contains('Veuillez indiquer votre trigramme.').should('not.exist')

cy.contains('Créer le préavis').should('be.enabled')

// -------------------------------------------------------------------------
// Other form validation errors
// Date form validation errors

cy.fill('Date et heure prévues de débarque (UTC)', undefined)

Expand All @@ -217,6 +217,27 @@ context('Side Window > Manual Prior Notification Form > Form', () => {

cy.contains('Veuillez indiquer la date de débarquement prévue.').should('not.exist')
cy.contains('Créer le préavis').should('be.enabled')

// -------------------------------------------------------------------------
// Date species & FAO area form validation errors

cy.fill('Poids (AAX)', undefined)

cy.contains('Veuillez indiquer le poids pour chaque espèce.').should('exist')
cy.contains('Créer le préavis').should('be.disabled')

cy.fill('Poids (AAX)', 10)

cy.contains('Veuillez indiquer le poids pour chaque espèce.').should('not.exist')

cy.fill('Zones de capture', 'Différentes zones de capture')

cy.contains('Veuillez indiquer la zone FAO pour chaque espèce.').should('exist')

cy.fill('Zone de capture (AAX)', '21.4.T')

cy.contains('Veuillez indiquer la zone FAO pour chaque espèce.').should('not.exist')
cy.contains('Créer le préavis').should('be.enabled')
})

it('Should calculate and display manual prior notification fleet segments, risk factor & types', () => {
Expand All @@ -239,12 +260,12 @@ context('Side Window > Manual Prior Notification Form > Form', () => {
cy.fill("Date et heure estimées d'arrivée au port (UTC)", arrivalDateTupleWithTime)
cy.fill("équivalentes à celles de l'arrivée au port", true)
cy.fill("Port d'arrivée", 'Vannes')
cy.fill('Zone globale de capture', '27.7.d')

cy.fill('Espèces à bord et à débarquer', 'MORUE COMMUNE')
cy.fill('Poids (COD)', 5000)

cy.fill('Engins utilisés', ['OTB'], { index: 1 })
cy.fill('Zone globale de capture', '27.7.d')
cy.fill('Saisi par', 'BOB')

cy.wait('@computePriorNotification')
Expand Down Expand Up @@ -364,19 +385,19 @@ context('Side Window > Manual Prior Notification Form > Form', () => {

cy.countRequestsByAlias('@computePriorNotification', 1500).should('be.equal', 0)

cy.fill('Espèces à bord et à débarquer', 'AAX')
cy.fill('Zone globale de capture', '27.7.d')

cy.countRequestsByAlias('@computePriorNotification', 1500).should('be.equal', 0)

cy.fill('Poids (AAX)', 50)
cy.fill('Espèces à bord et à débarquer', 'AAX')

cy.countRequestsByAlias('@computePriorNotification', 1500).should('be.equal', 0)

cy.fill('Engins utilisés', ['OTB'], { index: 1 })
cy.fill('Poids (AAX)', 50)

cy.countRequestsByAlias('@computePriorNotification', 1500).should('be.equal', 0)

cy.fill('Zone globale de capture', '27.7.d')
cy.fill('Engins utilisés', ['OTB'], { index: 1 })

cy.wait('@computePriorNotification')
cy.countRequestsByAlias('@computePriorNotification').should('be.equal', 1)
Expand Down Expand Up @@ -439,6 +460,163 @@ context('Side Window > Manual Prior Notification Form > Form', () => {
cy.countRequestsByAlias('@computePriorNotification', 1500).should('be.equal', 6)
})

it('Should switch from global FAO area to per species FAO area and vice versa in a manual prior notification', () => {
// -------------------------------------------------------------------------
// Add

const now = new Date()
const { utcDateAsStringWithoutMs: arrivalDateAsString, utcDateTupleWithTime: arrivalDateTupleWithTime } =
getUtcDateInMultipleFormats(customDayjs().add(2, 'hours').startOf('minute').toISOString())

cy.intercept('POST', '/bff/v1/prior_notifications/manual').as('createPriorNotification')

addManualSideWindowPriorNotification()

cy.getDataCy('vessel-search-input').click().wait(500)
cy.getDataCy('vessel-search-input').type('SABORDS', { delay: 100 })
cy.getDataCy('vessel-search-item').first().click()

cy.fill("Date et heure estimées d'arrivée au port (UTC)", arrivalDateTupleWithTime)
cy.fill("équivalentes à celles de l'arrivée au port", true)
cy.fill("Port d'arrivée", 'Marseille')
cy.fill('Zone globale de capture', '27.5.a')

cy.fill('Espèces à bord et à débarquer', 'AAX')
cy.fill('Poids (AAX)', 25)
cy.fill('Espèces à bord et à débarquer', 'POH')
cy.fill('Poids (POH)', 50)

cy.fill('Engins utilisés', ['OTP'], { index: 1 })
cy.fill('Saisi par', 'BOB')

cy.clickButton('Créer le préavis')

cy.wait('@createPriorNotification').then(createInterception => {
if (!createInterception.response) {
assert.fail('`createInterception.response` is undefined.')
}

const createdPriorNotification = createInterception.response.body

assert.isString(createdPriorNotification.reportId)
assert.isTrue(isDateCloseTo(createdPriorNotification.sentAt, now, 15))
assert.deepInclude(createdPriorNotification.fishingCatches, {
faoArea: null,
quantity: null,
specyCode: 'AAX',
specyName: 'AAPTOSYAX GRYPUS',
weight: 25.0
})
assert.deepInclude(createdPriorNotification.fishingCatches, {
faoArea: null,
quantity: null,
specyCode: 'POH',
specyName: 'ROUSSETTE PANTHERE',
weight: 50.0
})
assert.deepInclude(createdPriorNotification, {
authorTrigram: 'BOB',
didNotFishAfterZeroNotice: false,
expectedArrivalDate: arrivalDateAsString,
expectedLandingDate: arrivalDateAsString, // Checked "équivalentes à celles de l'arrivée au port"
globalFaoArea: '27.5.a',
note: null,
portLocode: 'FRMRS',
tripGearCodes: ['OTP'],
vesselId: 127
})

// -----------------------------------------------------------------------
// Edit (1st time)

cy.intercept('PUT', `/bff/v1/prior_notifications/manual/${createdPriorNotification.reportId}`).as(
'updateManualPriorNotification'
)

cy.fill('Zones de capture', 'Différentes zones de capture')
cy.fill('Zone de capture (AAX)', '27.5.a.1')
cy.fill('Zone de capture (POH)', '27.5.a.2')

cy.clickButton('Enregistrer')

cy.wait('@updateManualPriorNotification').then(firstUpdateInterception => {
if (!firstUpdateInterception.response) {
assert.fail('`updateInterception.response` is undefined.')
}

const firstUpdatedPriorNotification = firstUpdateInterception.response.body

assert.deepInclude(firstUpdatedPriorNotification.fishingCatches, {
faoArea: '27.5.a.1',
quantity: null,
specyCode: 'AAX',
specyName: 'AAPTOSYAX GRYPUS',
weight: 25.0
})
assert.deepInclude(firstUpdatedPriorNotification.fishingCatches, {
faoArea: '27.5.a.2',
quantity: null,
specyCode: 'POH',
specyName: 'ROUSSETTE PANTHERE',
weight: 50.0
})
assert.deepInclude(firstUpdatedPriorNotification, {
authorTrigram: 'BOB',
didNotFishAfterZeroNotice: false,
expectedArrivalDate: arrivalDateAsString,
expectedLandingDate: arrivalDateAsString, // Checked "équivalentes à celles de l'arrivée au port"
globalFaoArea: null,
note: null,
portLocode: 'FRMRS',
tripGearCodes: ['OTP'],
vesselId: 127
})

// -----------------------------------------------------------------------
// Edit (2nd time)

cy.fill('Zones de capture', 'Une seule zone de capture')
cy.fill('Zone globale de capture', '27.5.b')

cy.clickButton('Enregistrer')

cy.wait('@updateManualPriorNotification').then(secondUpdateInterception => {
if (!secondUpdateInterception.response) {
assert.fail('`updateInterception.response` is undefined.')
}

const secondUpdatedPriorNotification = secondUpdateInterception.response.body

assert.deepInclude(secondUpdatedPriorNotification.fishingCatches, {
faoArea: null,
quantity: null,
specyCode: 'AAX',
specyName: 'AAPTOSYAX GRYPUS',
weight: 25.0
})
assert.deepInclude(secondUpdatedPriorNotification.fishingCatches, {
faoArea: null,
quantity: null,
specyCode: 'POH',
specyName: 'ROUSSETTE PANTHERE',
weight: 50.0
})
assert.deepInclude(secondUpdatedPriorNotification, {
authorTrigram: 'BOB',
didNotFishAfterZeroNotice: false,
expectedArrivalDate: arrivalDateAsString,
expectedLandingDate: arrivalDateAsString, // Checked "équivalentes à celles de l'arrivée au port"
globalFaoArea: '27.5.b',
note: null,
portLocode: 'FRMRS',
tripGearCodes: ['OTP'],
vesselId: 127
})
})
})
})
})

it('Should be able to resend & verify a previously sent & verified manual prior notification', () => {
// Given
cy.intercept(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ export function FormikFishingCatchesMultiSelect({ isReadOnly }: FormikFishingCat
disabled={!filteredSpeciesAsOptions}
isErrorMessageHidden
isLabelHidden
label={`Zone de pêche (${fishingCatch.specyCode})`}
label={`Zone de capture (${fishingCatch.specyCode})`}
name={`fishingCatches[${index}].faoArea`}
options={faoAreasAsOptions ?? []}
placeholder="Choisir une zone"
Expand Down

0 comments on commit e2962d8

Please sign in to comment.