Skip to content

Commit

Permalink
feat: move long presentation resume to details when it is empty (#221)
Browse files Browse the repository at this point in the history
  • Loading branch information
marc-gavanier authored Oct 17, 2024
1 parent 7ed2dc7 commit 2dfbd07
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 11 deletions.
57 changes: 53 additions & 4 deletions src/transformer/fields/presentation/presentation.field.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,65 @@ describe('presentation fields', (): void => {
} as LieuxMediationNumeriqueMatching;

const source: DataSource = {
presentation_detail: 'Courte description,\nOu il y a une,\nou plusieurs newlines',
presentation_detail: 'Courte description,\noù il y a une,\nou plusieurs newlines',
presentation_resume:
'Ceci est une description\n avec plus de détails,\n\n ou il peut y avoir une ou plusieurs newlines\n\n\n'
'Ceci est une description\n avec plus de détails,\n\n il peut y avoir une ou plusieurs newlines\n\n\n'
};

const presentation: Presentation = processPresentation(source, matching);

expect(presentation).toStrictEqual({
detail: 'Courte description,Ou il y a une,ou plusieurs newlines',
resume: 'Ceci est une description avec plus de détails, ou il peut y avoir une ou plusieurs newlines'
detail: 'Courte description,où il y a une,ou plusieurs newlines',
resume: 'Ceci est une description avec plus de détails, où il peut y avoir une ou plusieurs newlines'
});
});

it('should move long presentation resume to presentation details when it is empty', (): void => {
const matching: LieuxMediationNumeriqueMatching = {
presentation_detail: {
colonne: 'presentation_detail'
},
presentation_resume: {
colonne: 'presentation_resume'
}
} as LieuxMediationNumeriqueMatching;

const source: DataSource = {
presentation_detail: '',
presentation_resume:
"Cette très longue description ne devrait pas être utilisée en tant que résumé, mais plutôt en tant que détail, car il y a trop d'informations pour être un considérée comme un simple résumé. En effet en dépassant la limite de 280 caractères, il est préférable de la considérer comme un détail plutôt qu'un résumé"
};

const presentation: Presentation = processPresentation(source, matching);

expect(presentation).toStrictEqual({
detail:
"Cette très longue description ne devrait pas être utilisée en tant que résumé, mais plutôt en tant que détail, car il y a trop d'informations pour être un considérée comme un simple résumé. En effet en dépassant la limite de 280 caractères, il est préférable de la considérer comme un détail plutôt qu'un résumé"
});
});

it('should not move long presentation resume to presentation details when there is already a detailed presentation', (): void => {
const matching: LieuxMediationNumeriqueMatching = {
presentation_detail: {
colonne: 'presentation_detail'
},
presentation_resume: {
colonne: 'presentation_resume'
}
} as LieuxMediationNumeriqueMatching;

const source: DataSource = {
presentation_detail: 'Mais ici, la description est déjà détaillée, donc on ne devrait pas la remplacer',
presentation_resume:
"Cette très longue description ne devrait pas être utilisée en tant que résumé, mais plutôt en tant que détail, car il y a trop d'informations pour être un considérée comme un simple résumé. En effet en dépassant la limite de 280 caractères, il est préférable de la considérer comme un détail plutôt qu'un résumé"
};

const presentation: Presentation = processPresentation(source, matching);

expect(presentation).toStrictEqual({
detail: 'Mais ici, la description est déjà détaillée, donc on ne devrait pas la remplacer',
resume:
"Cette très longue description ne devrait pas être utilisée en tant que résumé, mais plutôt en tant que détail, car il y a trop d'informations pour être un considérée comme un simple résumé. En effet en dépassant la limite de 280 caractères, il est préférable de la considérer comme un détail plutôt qu'un résumé"
});
});
});
21 changes: 14 additions & 7 deletions src/transformer/fields/presentation/presentation.field.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { Presentation as PresentationField } from '@gouvfr-anct/lieux-de-mediation-numerique';
import { LieuxMediationNumeriqueMatching, DataSource } from '../../input';

const cleanPresentationFormat = (presentation: string): string =>
Expand All @@ -9,10 +10,16 @@ const resumeIfAny = (source: DataSource, colonne?: string): { resume?: string }
const detailIfAny = (source: DataSource, colonne?: string): { detail?: string } =>
colonne == null ? {} : { detail: cleanPresentationFormat(source[colonne]?.toString() ?? '') };

export const processPresentation = (
source: DataSource,
matching: LieuxMediationNumeriqueMatching
): { resume?: string; detail?: string } => ({
...resumeIfAny(source, matching.presentation_resume?.colonne),
...detailIfAny(source, matching.presentation_detail?.colonne)
});
const PRESENTATION_RESUME_MAX_LENGTH: 280 = 280 as const;

const shouldMoveLongResumeToDetails = (presentations: PresentationField): presentations is { resume: string } =>
(presentations.detail?.length ?? 0) === 0 && (presentations.resume?.length ?? 0) > PRESENTATION_RESUME_MAX_LENGTH;

const fixPresentationOrder = (presentations: PresentationField): PresentationField =>
shouldMoveLongResumeToDetails(presentations) ? { detail: presentations.resume } : presentations;

export const processPresentation = (source: DataSource, matching: LieuxMediationNumeriqueMatching): PresentationField =>
fixPresentationOrder({
...resumeIfAny(source, matching.presentation_resume?.colonne),
...detailIfAny(source, matching.presentation_detail?.colonne)
});

0 comments on commit 2dfbd07

Please sign in to comment.