Skip to content

Commit

Permalink
feat: modifier tri favoris par date creation
Browse files Browse the repository at this point in the history
  • Loading branch information
Mzem committed Dec 3, 2024
1 parent 7c90a3d commit 0717950
Show file tree
Hide file tree
Showing 3 changed files with 167 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
fromOffreServiceCiviqueSqlToFavorisQueryModel
} from '../query-mappers/favoris.mappers'
import { FavorisQueryModel } from '../query-models/favoris.query-model'
import { comparerFavorisParDateCreationOuTitre } from '../query-getters/accueil/get-favoris.query.getter.db'

interface GetFavorisJeuneQuery {
idJeune: string
Expand Down Expand Up @@ -65,6 +66,7 @@ export class GetFavorisJeuneQueryHandler extends QueryHandler<
}
})
])

return listeFavorisOffresEmploi
.map(fromOffreEmploiSqlToFavorisQueryModel)
.concat(
Expand All @@ -77,21 +79,10 @@ export class GetFavorisJeuneQueryHandler extends QueryHandler<
fromOffreServiceCiviqueSqlToFavorisQueryModel
)
)
.sort(comparerTitreDeFavoris)
.sort(comparerFavorisParDateCreationOuTitre)
}

async monitor(): Promise<void> {
return
}
}

function comparerTitreDeFavoris(
favori1: FavorisQueryModel,
favori2: FavorisQueryModel
): number {
if (favori1.titre >= favori2.titre) {
return 1
} else {
return 0
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,16 +83,16 @@ function comparerDateCreationDeFavoris(
favori2: FavorisQueryModel
): number {
if (
DateTime.fromISO(favori1.dateCreation!) >=
DateTime.fromISO(favori2.dateCreation!)
(favori1.dateCreation ? DateTime.fromISO(favori1.dateCreation!) : 0) >=
(favori2.dateCreation ? DateTime.fromISO(favori2.dateCreation!) : 0)
) {
return -1
} else {
return 1
}
}

function comparerFavorisParDateCreationOuTitre(
export function comparerFavorisParDateCreationOuTitre(
favori1: FavorisQueryModel,
favori2: FavorisQueryModel
): number {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
} from '../../../../src/infrastructure/sequelize/models/jeune.sql-model'
import { AsSql } from '../../../../src/infrastructure/sequelize/types'
import { unUtilisateurConseiller } from '../../../fixtures/authentification.fixture'
import { uneDatetime } from '../../../fixtures/date.fixture'
import { unConseillerDto } from '../../../fixtures/sql-models/conseiller.sql-model'
import {
unFavoriOffreEmploi,
Expand All @@ -24,6 +25,8 @@ import { unJeuneDto } from '../../../fixtures/sql-models/jeune.sql-model'
import { expect, StubbedClass, stubClass } from '../../../utils'
import { getDatabase } from '../../../utils/database-for-testing'

const now = uneDatetime().toUTC()

describe('GetFavorisJeuneQueryHandler', () => {
let conseillerAgenceAuthorizer: StubbedClass<ConseillerInterAgenceAuthorizer>
let jeuneAuthorizer: StubbedClass<JeuneAuthorizer>
Expand Down Expand Up @@ -68,7 +71,7 @@ describe('GetFavorisJeuneQueryHandler', () => {
// Then
expect(listeFavorisObtenue).to.deep.equal([])
})
it('retourne une liste de deux favoris, une offre emploi et une offre alternance, triés par titre croissant', async () => {
it('retourne une liste de deux favoris, une offre emploi et une offre alternance, triés par date decroissante', async () => {
// Given
const idOffreEmploiDb = 1
const idOffreAlternanceDb = 2
Expand All @@ -77,15 +80,17 @@ describe('GetFavorisJeuneQueryHandler', () => {
idOffre: 'poi-id-offre-1',
titre: 'poi-titre-1',
nomEntreprise: 'poi-entreprise',
idJeune
idJeune,
dateCreation: now.toJSDate()
})
const favoriOffreAlternanceDb = unFavoriOffreEmploi({
id: idOffreAlternanceDb,
idOffre: 'poi-id-offre-2',
titre: 'poi-titre-2',
nomEntreprise: 'poi-entreprise',
isAlternance: true,
idJeune
idJeune,
dateCreation: now.plus({ minutes: 1 }).toJSDate()
})
await FavoriOffreEmploiSqlModel.create(favoriOffreEmploiDb)
await FavoriOffreEmploiSqlModel.create(favoriOffreAlternanceDb)
Expand All @@ -97,7 +102,7 @@ describe('GetFavorisJeuneQueryHandler', () => {
organisation: 'poi-entreprise',
localisation: undefined,
tags: ['aa', '2 ans'],
dateCreation: undefined,
dateCreation: '2020-04-06T14:00:00.000+02:00',
origine: undefined
}
const favoriOffreAlternance: FavorisQueryModel = {
Expand All @@ -107,10 +112,10 @@ describe('GetFavorisJeuneQueryHandler', () => {
organisation: 'poi-entreprise',
localisation: undefined,
tags: ['aa', '2 ans'],
dateCreation: undefined,
dateCreation: '2020-04-06T14:01:00.000+02:00',
origine: undefined
}
const listeAttendue = [favoriOffreEmploi, favoriOffreAlternance]
const listeAttendue = [favoriOffreAlternance, favoriOffreEmploi]

const query = { idJeune: jeuneDto.id }
// When
Expand All @@ -121,10 +126,125 @@ describe('GetFavorisJeuneQueryHandler', () => {
// Then
expect(listeFavorisObtenue).to.deep.equal(listeAttendue)
})
it('retourne une liste de deux favoris offre immersion du jeune, triés par titre croissant', async () => {
it('retourne une liste de deux favoris offre immersion du jeune avec tri date', async () => {
// Given
const idImmersion1 = 1
const idImmersion2 = 2
const favoriOffreImmersionDb1 = unFavoriOffreImmersion({
id: idImmersion1,
idOffre: 'poi-id-offre',
metier: 'poi-titre-4',
nomEtablissement: 'poi-etablissement',
ville: 'marseille',
idJeune,
dateCreation: now.toJSDate()
})
await FavoriOffreImmersionSqlModel.create(favoriOffreImmersionDb1)
const favoriOffreImmersionDb2 = unFavoriOffreImmersion({
id: idImmersion2,
idOffre: 'poi-id-offre',
metier: 'poi-titre-3',
nomEtablissement: 'poi-etablissement',
ville: 'marseille',
idJeune,
dateCreation: now.plus({ days: 1 }).toJSDate()
})
await FavoriOffreImmersionSqlModel.create(favoriOffreImmersionDb2)

const favoriOffreImmersion1: FavorisQueryModel = {
idOffre: 'poi-id-offre',
titre: 'poi-titre-4',
type: Offre.Favori.Type.IMMERSION,
organisation: 'poi-etablissement',
localisation: 'marseille',
tags: ['patisserie'],
dateCreation: '2020-04-06T14:00:00.000+02:00'
}
const favoriOffreImmersion2: FavorisQueryModel = {
idOffre: 'poi-id-offre',
titre: 'poi-titre-3',
type: Offre.Favori.Type.IMMERSION,
organisation: 'poi-etablissement',
localisation: 'marseille',
tags: ['patisserie'],
dateCreation: '2020-04-07T14:00:00.000+02:00'
}

const idOffreEmploiDb = 1
const idOffreAlternanceDb = 2

const favoriOffreEmploiDb = unFavoriOffreEmploi({
id: idOffreEmploiDb,
idOffre: 'poi-id-offre-1',
titre: 'poi-titre-1',
nomEntreprise: 'poi-entreprise',
idJeune,
dateCreation: now.plus({ days: 2 }).toJSDate()
})
const favoriOffreAlternanceDb = unFavoriOffreEmploi({
id: idOffreAlternanceDb,
idOffre: 'poi-id-offre-2',
titre: 'poi-titre-2',
nomEntreprise: 'poi-entreprise',
isAlternance: true,
idJeune,
dateCreation: now.plus({ days: 3 }).toJSDate()
})
await FavoriOffreEmploiSqlModel.create(favoriOffreEmploiDb)
await FavoriOffreEmploiSqlModel.create(favoriOffreAlternanceDb)

const favoriOffreEmploi: FavorisQueryModel = {
idOffre: 'poi-id-offre-1',
titre: 'poi-titre-1',
type: Offre.Favori.Type.EMPLOI,
organisation: 'poi-entreprise',
localisation: undefined,
tags: ['aa', '2 ans'],
dateCreation: '2020-04-08T14:00:00.000+02:00',
origine: undefined
}
const favoriOffreAlternance: FavorisQueryModel = {
idOffre: 'poi-id-offre-2',
titre: 'poi-titre-2',
type: Offre.Favori.Type.ALTERNANCE,
organisation: 'poi-entreprise',
localisation: undefined,
tags: ['aa', '2 ans'],
dateCreation: '2020-04-09T14:00:00.000+02:00',
origine: undefined
}

const listeAttendue = [
favoriOffreAlternance,
favoriOffreEmploi,
favoriOffreImmersion2,
favoriOffreImmersion1
]

const query = { idJeune: jeuneDto.id }

// When
const listeFavorisObtenue = await getFavorisJeuneQueryHandler.handle(
query
)

// Then
expect(listeFavorisObtenue).to.deep.equal(listeAttendue)
})
it('retourne une liste de deux favoris offre immersion du jeune', async () => {
// Given
const idImmersion1 = 1
const idImmersion2 = 2
const favoriOffreImmersionDbfirst = unFavoriOffreImmersion({
id: 10,
idOffre: 'poi-id-offre',
metier: 'poi-metier-first-dans-la-liste-triee',
nomEtablissement: 'poi-etablissement',
ville: 'marseille',
idJeune,
dateCreation: uneDatetime().plus({ days: 1 }).toJSDate()
})
await FavoriOffreImmersionSqlModel.create(favoriOffreImmersionDbfirst)
const favoriOffreImmersionDb1 = unFavoriOffreImmersion({
id: idImmersion1,
idOffre: 'poi-id-offre',
Expand All @@ -143,7 +263,35 @@ describe('GetFavorisJeuneQueryHandler', () => {
idJeune
})
await FavoriOffreImmersionSqlModel.create(favoriOffreImmersionDb2)
const favoriOffreImmersionDb0 = unFavoriOffreImmersion({
id: 0,
idOffre: 'poi-id-offre',
metier: 'poi-metier-0e-dans-la-liste-triee',
nomEtablissement: 'poi-etablissement',
ville: 'marseille',
idJeune,
dateCreation: uneDatetime().toJSDate()
})
await FavoriOffreImmersionSqlModel.create(favoriOffreImmersionDb0)

const favoriOffreImmersionFirst: FavorisQueryModel = {
idOffre: 'poi-id-offre',
titre: 'poi-metier-first-dans-la-liste-triee',
type: Offre.Favori.Type.IMMERSION,
organisation: 'poi-etablissement',
localisation: 'marseille',
tags: ['patisserie'],
dateCreation: '2020-04-07T14:00:00.000+02:00'
}
const favoriOffreImmersion0: FavorisQueryModel = {
idOffre: 'poi-id-offre',
titre: 'poi-metier-0e-dans-la-liste-triee',
type: Offre.Favori.Type.IMMERSION,
organisation: 'poi-etablissement',
localisation: 'marseille',
tags: ['patisserie'],
dateCreation: '2020-04-06T14:00:00.000+02:00'
}
const favoriOffreImmersion1: FavorisQueryModel = {
idOffre: 'poi-id-offre',
titre: 'poi-metier-2e-dans-la-liste-triee',
Expand All @@ -162,7 +310,12 @@ describe('GetFavorisJeuneQueryHandler', () => {
tags: ['patisserie'],
dateCreation: undefined
}
const listeAttendue = [favoriOffreImmersion1, favoriOffreImmersion2]
const listeAttendue = [
favoriOffreImmersionFirst,
favoriOffreImmersion0,
favoriOffreImmersion2,
favoriOffreImmersion1
]

const query = { idJeune: jeuneDto.id }

Expand Down

0 comments on commit 0717950

Please sign in to comment.