Skip to content

Commit

Permalink
fix(accueil-evenement): retourne uniquement evenements jeune non insc…
Browse files Browse the repository at this point in the history
…rit (#1318)

(cherry picked from commit 66d73bd)
  • Loading branch information
oni-Sk authored and Mzem committed Dec 12, 2023
1 parent c190bc6 commit 88e727f
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common'
import { Inject, Injectable } from '@nestjs/common'

import { DateTime } from 'luxon'
import { Op } from 'sequelize'
import { Op, Sequelize } from 'sequelize'
import { GetSessionsJeuneMiloQueryGetter } from 'src/application/queries/query-getters/milo/get-sessions-jeune.milo.query.getter.db'
import {
JeuneMiloSansIdDossier,
Expand Down Expand Up @@ -37,6 +37,7 @@ import { SessionJeuneMiloQueryModel } from '../query-models/sessions.milo.query.
import { ConfigService } from '@nestjs/config'
import { sessionsMiloSontActiveesPourLeJeune } from 'src/utils/feature-flip-session-helper'
import { buildError } from '../../../utils/logger.module'
import { SequelizeInjectionToken } from '../../../infrastructure/sequelize/providers'

export interface GetAccueilJeuneMiloQuery extends Query {
idJeune: string
Expand All @@ -55,7 +56,8 @@ export class GetAccueilJeuneMiloQueryHandler extends QueryHandler<
private getRecherchesSauvegardeesQueryGetter: GetRecherchesSauvegardeesQueryGetter,
private getFavorisAccueilQueryGetter: GetFavorisAccueilQueryGetter,
private getCampagneQueryGetter: GetCampagneQueryGetter,
private configService: ConfigService
private configService: ConfigService,
@Inject(SequelizeInjectionToken) private readonly sequelize: Sequelize
) {
super('GetAccueilJeuneMiloQueryHandler')
}
Expand Down Expand Up @@ -265,6 +267,13 @@ export class GetAccueilJeuneMiloQueryHandler extends QueryHandler<
date: { [Op.gte]: maintenant.toJSDate() },
type: {
[Op.in]: TYPES_ANIMATIONS_COLLECTIVES
},
id: {
[Op.notIn]: this.sequelize.literal(`(
SELECT DISTINCT id_rendez_vous
FROM rendez_vous_jeune_association
WHERE rendez_vous_jeune_association.id_jeune = '${jeuneSqlModel.id}'
)`)
}
},
order: [['date', 'ASC']],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,23 @@ import { unConseillerDto } from 'test/fixtures/sql-models/conseiller.sql-model'
import { unJeuneDto } from 'test/fixtures/sql-models/jeune.sql-model'
import { unRendezVousDto } from 'test/fixtures/sql-models/rendez-vous.sql-model'
import { expect, StubbedClass, stubClass } from 'test/utils'
import { getDatabase } from '../../../utils/database-for-testing'
import {
DatabaseForTesting,
getDatabase
} from '../../../utils/database-for-testing'
import { testConfig } from 'test/utils/module-for-testing'

describe('GetAccueilJeuneMiloQueryHandler', () => {
let handler: GetAccueilJeuneMiloQueryHandler
let databaseForTesting: DatabaseForTesting
let sessionsQueryGetter: StubbedClass<GetSessionsJeuneMiloQueryGetter>
let alertesQueryGetter: StubbedClass<GetRecherchesSauvegardeesQueryGetter>
let favorisAccueilQueryGetter: StubbedClass<GetFavorisAccueilQueryGetter>
let getCampagneQueryGetter: StubbedClass<GetCampagneQueryGetter>
let jeuneAuthorizer: StubbedClass<JeuneAuthorizer>

before(async () => {
databaseForTesting = getDatabase()
jeuneAuthorizer = stubClass(JeuneAuthorizer)
sessionsQueryGetter = stubClass(GetSessionsJeuneMiloQueryGetter)
alertesQueryGetter = stubClass(GetRecherchesSauvegardeesQueryGetter)
Expand All @@ -72,7 +77,8 @@ describe('GetAccueilJeuneMiloQueryHandler', () => {
alertesQueryGetter,
favorisAccueilQueryGetter,
getCampagneQueryGetter,
testConfig()
testConfig(),
databaseForTesting.sequelize
)
})

Expand Down Expand Up @@ -367,12 +373,13 @@ describe('GetAccueilJeuneMiloQueryHandler', () => {
})
})

describe('retourne les 3 prochains événements à venir', () => {
describe('retourne les 3 prochains événements où le bénéficiaire n’est pas inscrit', () => {
let evenementAVenir1: AsSql<RendezVousDto>
let evenementAVenir2: AsSql<RendezVousDto>
let evenementAVenir3: AsSql<RendezVousDto>
let evenementPasse: AsSql<RendezVousDto>
let evenementAVenirAutreAgence: AsSql<RendezVousDto>
let evenementAVenirBeneficiaireDejaInscrit: AsSql<RendezVousDto>
let evenementAVenir4HorsPage: AsSql<RendezVousDto>

beforeEach(async () => {
Expand Down Expand Up @@ -402,25 +409,42 @@ describe('GetAccueilJeuneMiloQueryHandler', () => {
type: CodeTypeRendezVous.ATELIER,
idAgence: 'fake-agence-id'
})
evenementAVenirBeneficiaireDejaInscrit = unRendezVousDto({
date: maintenant.plus({ day: 2 }).toJSDate(),
type: CodeTypeRendezVous.ATELIER,
idAgence: 'bonne-agence-id'
})
evenementAVenir2 = unRendezVousDto({
date: maintenant.plus({ day: 3 }).toJSDate(),
type: CodeTypeRendezVous.ATELIER,
idAgence: 'bonne-agence-id'
})
evenementAVenir4HorsPage = unRendezVousDto({
date: maintenant.plus({ day: 5 }).toJSDate(),
type: CodeTypeRendezVous.ATELIER,
idAgence: 'bonne-agence-id'
})

await RendezVousSqlModel.bulkCreate([
evenementPasse,
evenementAVenir1,
evenementAVenirAutreAgence,
evenementAVenirBeneficiaireDejaInscrit,
evenementAVenir2,
evenementAVenir3,
evenementAVenir4HorsPage
])
await RendezVousJeuneAssociationSqlModel.create({
id: 1,
idRendezVous: evenementAVenirBeneficiaireDejaInscrit.id,
idJeune: accueilQuery.idJeune
})
})
after(() => {
RendezVousSqlModel.destroy({ truncate: true, cascade: true })
})

it('retourne les 3 prochains événements à venir', async () => {
it('retourne les 3 prochains événements à venir où le bénéficiaire n’est pas inscrit', async () => {
// When
result = await handler.handle(accueilQuery)

Expand Down

0 comments on commit 88e727f

Please sign in to comment.