Skip to content

Commit

Permalink
tech: fix tsc et tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Matteo-OCTO committed Feb 27, 2025
1 parent 34b40e3 commit 974ec68
Show file tree
Hide file tree
Showing 7 changed files with 220 additions and 58 deletions.
1 change: 1 addition & 0 deletions src/components/pages/PageCatalogueActions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@
rechercheTitre.value,
filtreDejaVu.value,
catalogueActionsPresenter,
actionsPresenter,
);
isLoading.value = false;
}
Expand Down
9 changes: 6 additions & 3 deletions src/domaines/actions/filtrerCatalogueActions.usecase.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { ActionsPresenter } from '@/domaines/actions/ports/actions.presenter';
import { ActionsRepository } from '@/domaines/actions/ports/actions.repository';
import { CatalogueActionsPresenter } from '@/domaines/actions/ports/catalogueActions.presenter';

Expand All @@ -9,14 +10,16 @@ export class FiltrerCatalogueActionsUsecase {
filtresThematiques: string[],
titre: string,
filtreDejaVu: boolean,
presenter: CatalogueActionsPresenter,
catalogueActionsPresenter: CatalogueActionsPresenter,
actionsPresenter: ActionsPresenter,
): Promise<void> {
const actions = await this.actionsRepository.filtrerCatalogueActions(
const catalogue = await this.actionsRepository.filtrerCatalogueActions(
idUtilisateur,
filtresThematiques,
titre,
filtreDejaVu,
);
presenter.presente(actions);
catalogueActionsPresenter.presente(catalogue);
actionsPresenter.presente(catalogue.actions);
}
}
8 changes: 4 additions & 4 deletions tests/actions/adapters/actionQuiz.repository.mock.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {
Action,
ActionDetail,
ActionsRecommandeesDansUneThematique,
ActionsRepository,
CatalogueActions,
} from '@/domaines/actions/ports/actions.repository';
import { ClefThematiqueAPI } from '@/domaines/thematiques/MenuThematiques';

Expand Down Expand Up @@ -87,8 +87,8 @@ export class ActionQuizRepositoryMock implements ActionsRepository {
};
}

chargerCatalogueActions(idUtilisateur: string): Promise<Action[]> {
return Promise.resolve([]);
chargerCatalogueActions(idUtilisateur: string): Promise<CatalogueActions> {
throw Error('Not implemented');
}

recupererActionsPersonnalisees(
Expand All @@ -103,7 +103,7 @@ export class ActionQuizRepositoryMock implements ActionsRepository {
filtresThematiques: string[],
titre: string,
filtreDejaVu: boolean,
): Promise<Action[]> {
): Promise<CatalogueActions> {
throw Error('Not implemented');
}
}
28 changes: 17 additions & 11 deletions tests/actions/adapters/actions.repository.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ import {
ActionDetail,
ActionsRecommandeesDansUneThematique,
ActionsRepository,
CatalogueActions,
} from '@/domaines/actions/ports/actions.repository';

export class ActionsRepositoryMock implements ActionsRepository {
private constructor(
private readonly actions: Action[],
private readonly action?: ActionDetail,
private readonly actionsRecommandeesDansUneThematique?: ActionsRecommandeesDansUneThematique,
private readonly catalogueActions?: CatalogueActions,
) {}

static avecActionDetail(actionDetail: ActionDetail): ActionsRepositoryMock {
Expand All @@ -20,6 +22,10 @@ export class ActionsRepositoryMock implements ActionsRepository {
return new ActionsRepositoryMock(actions, undefined);
}

static avecCatalogue(catalogue: CatalogueActions): ActionsRepositoryMock {
return new ActionsRepositoryMock([], undefined, undefined, catalogue);
}

static avecActionsRecommandeesDansUneThematique(
actionsRecommandeesDansUneThematique: ActionsRecommandeesDansUneThematique,
) {
Expand All @@ -30,23 +36,23 @@ export class ActionsRepositoryMock implements ActionsRepository {
return Promise.resolve(this.action!);
}

chargerCatalogueActions(): Promise<Action[]> {
return Promise.resolve(this.actions);
}

recupererActionsPersonnalisees(
idUtilisateur: string,
thematiqueId: string,
): Promise<ActionsRecommandeesDansUneThematique> {
return Promise.resolve(this.actionsRecommandeesDansUneThematique!);
chargerCatalogueActions(): Promise<CatalogueActions> {
return Promise.resolve(this.catalogueActions!);
}

filtrerCatalogueActions(
idUtilisateur: string,
filtresThematiques: string[],
titre: string,
filtreDejaVu: boolean,
): Promise<Action[]> {
return Promise.resolve([]);
): Promise<CatalogueActions> {
return Promise.resolve(this.catalogueActions!);
}

recupererActionsPersonnalisees(
idUtilisateur: string,
thematiqueId: string,
): Promise<ActionsRecommandeesDansUneThematique> {
return Promise.resolve(this.actionsRecommandeesDansUneThematique!);
}
}
92 changes: 92 additions & 0 deletions tests/actions/filtrerCatalogueActions.usecase.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import { ActionsRepositoryMock } from './adapters/actions.repository.mock';
import { CatalogueActionsPresenterImpl } from '@/domaines/actions/adapters/catalogueActions.presenter.impl';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { Action, CatalogueActions, TypeAction } from '@/domaines/actions/ports/actions.repository';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { ActionsPresenterImpl } from '@/domaines/actions/adapters/actions.presenter.impl';
import { ClefThematiqueAPI } from '@/domaines/thematiques/MenuThematiques';
import { FiltrerCatalogueActionsUsecase } from '@/domaines/actions/filtrerCatalogueActions.usecase';

describe("Fichier de tests concernant la récupération du catalogue d'actions", () => {
it('Doit filtrer correctement le catalogue actions et les actions', async () => {
// GIVEN
const actions: Action[] = [
{
code: 'code-action-test2',
titre: 'Tester une nouvelle **recette végétarienne** 2',
sousTitre:
'Faites des économies et le plein de vitamines ! Cette semaine, on cuisine une recette saine et délicieuse !',
nombreDePersonnes: 4,
nombreAidesDisponibles: 5,
type: TypeAction.BILAN,
dejaVue: true,
},
];

const catalogue: CatalogueActions = {
actions,
filtres: [
{
code: ClefThematiqueAPI.transports,
label: 'Transport !',
selected: false,
},
{
code: ClefThematiqueAPI.alimentation,
label: 'Alimentation !',
selected: true,
},
],
consultation: 'tout',
};

// WHEN
const usecase = new FiltrerCatalogueActionsUsecase(ActionsRepositoryMock.avecCatalogue(catalogue));
await usecase.execute(
'id-utilisateur',
[ClefThematiqueAPI.alimentation],
'2',
true,
new CatalogueActionsPresenterImpl(expectedCatalogue),
new ActionsPresenterImpl(expectedActions),
);

// THEN
function expectedActions(viewModel: ActionViewModel[]): void {
expect(viewModel).toStrictEqual<ActionViewModel[]>([
{
code: 'code-action-test2',
titre: 'Tester une nouvelle <span class="text--bold">recette végétarienne</span> 2',
nombreDePersonnes: '<span class="text--bold">4</span> défis réalisés',
aidesDisponibles: '<span class="text--bold">5</span> aides disponibles',
dejaVue: true,
url: {
name: 'action-individuelle',
params: {
id: 'code-action-test2',
titre: 'tester-une-nouvelle-recette-vegetarienne-2',
type: 'bilan',
},
},
},
]);
}
function expectedCatalogue(viewModel: CatalogueActionsViewModel): void {
expect(viewModel).toStrictEqual<CatalogueActionsViewModel>({
filtres: [
{
id: ClefThematiqueAPI.transports,
label: 'Transport !',
checked: false,
},
{
id: ClefThematiqueAPI.alimentation,
label: 'Alimentation !',
checked: true,
},
],
phraseNombreActions: '1 action',
});
}
});
});
36 changes: 16 additions & 20 deletions tests/actions/recupererActionsPersonnalisees.usecase.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ActionsRepositoryMock } from './adapters/actions.repository.mock';
import { ActionsDansUneThematiquePresenterImpl } from '@/domaines/actions/adapters/actionsDansUneThematique.presenter.impl';
import { expect } from 'vitest';
import { TypeAction } from '@/domaines/actions/ports/actions.repository';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';

describe('Fichier de test concernant la récupération des actions personnalisées', () => {
it("Quand la personnalisation n'est pas faite doit presenter le fait de personnaliser avec le bon enchainement de kycs", async () => {
Expand Down Expand Up @@ -57,27 +57,23 @@ describe('Fichier de test concernant la récupération des actions personnalisé
'thematiqueId',
new ActionsDansUneThematiquePresenterImpl(
actions => {
expect(actions).toStrictEqual<CatalogueActionsViewModel>({
actions: [
{
code: 'code-action-test',
titre: 'Tester une nouvelle <span class="text--bold">recette végétarienne</span>',
nombreDePersonnes: '<span class="text--bold">0</span> défi réalisé',
aidesDisponibles: undefined,
dejaVue: false,
url: {
name: 'action-individuelle',
params: {
id: 'code-action-test',
titre: 'tester-une-nouvelle-recette-vegetarienne',
type: TypeAction.CLASSIQUE,
},
expect(actions).toStrictEqual<ActionViewModel[]>([
{
code: 'code-action-test',
titre: 'Tester une nouvelle <span class="text--bold">recette végétarienne</span>',
nombreDePersonnes: '<span class="text--bold">0</span> défi réalisé',
aidesDisponibles: undefined,
dejaVue: false,
url: {
name: 'action-individuelle',
params: {
id: 'code-action-test',
titre: 'tester-une-nouvelle-recette-vegetarienne',
type: TypeAction.CLASSIQUE,
},
},
],
phraseNombreActions: '',
filtres: [],
});
},
]);
},
idEnchainementKYCs => {
expect(idEnchainementKYCs).toStrictEqual('');
Expand Down
104 changes: 84 additions & 20 deletions tests/actions/recupererCatalogueActions.usecase.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ import { ActionsRepositoryMock } from './adapters/actions.repository.mock';
import { RecupererCatalogueActionsUsecase } from '@/domaines/actions/recupererCatalogueActions.usecase';
import { CatalogueActionsPresenterImpl } from '@/domaines/actions/adapters/catalogueActions.presenter.impl';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { Action, TypeAction } from '@/domaines/actions/ports/actions.repository';
import { Action, CatalogueActions, TypeAction } from '@/domaines/actions/ports/actions.repository';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { ActionsPresenterImpl } from '@/domaines/actions/adapters/actions.presenter.impl';
import { ClefThematiqueAPI } from '@/domaines/thematiques/MenuThematiques';

describe("Fichier de tests concernant la récupération du catalogue d'actions", () => {
it('Doit presenter le catalogue actions', async () => {
it('Doit presenter le catalogue actions et les actions', async () => {
// GIVEN
const actions: Action[] = [
{
Expand All @@ -18,32 +21,93 @@ describe("Fichier de tests concernant la récupération du catalogue d'actions",
type: TypeAction.CLASSIQUE,
dejaVue: false,
},
{
code: 'code-action-test2',
titre: 'Tester une nouvelle **recette végétarienne** 2',
sousTitre:
'Faites des économies et le plein de vitamines ! Cette semaine, on cuisine une recette saine et délicieuse !',
nombreDePersonnes: 4,
nombreAidesDisponibles: 5,
type: TypeAction.BILAN,
dejaVue: true,
},
];

const catalogue: CatalogueActions = {
actions,
filtres: [
{
code: ClefThematiqueAPI.transports,
label: 'Transport !',
selected: false,
},
{
code: ClefThematiqueAPI.alimentation,
label: 'Alimentation !',
selected: false,
},
],
consultation: 'tout',
};

// WHEN
const usecase = new RecupererCatalogueActionsUsecase(ActionsRepositoryMock.avecActions(actions));
await usecase.execute('id-utilisateur', new CatalogueActionsPresenterImpl(expected));
const usecase = new RecupererCatalogueActionsUsecase(ActionsRepositoryMock.avecCatalogue(catalogue));
await usecase.execute(
'id-utilisateur',
new CatalogueActionsPresenterImpl(expectedCatalogue),
new ActionsPresenterImpl(expectedActions),
);

// THEN
function expected(viewModel: CatalogueActionsViewModel): void {
expect(viewModel).toEqual({
actions: [
{
code: 'code-action-test',
titre: 'Tester une nouvelle <span class="text--bold">recette végétarienne</span>',
nombreDePersonnes: '<span class="text--bold">0</span> défi réalisé',
dejaVue: false,
aidesDisponibles: undefined,
url: {
name: 'action-individuelle',
params: {
id: 'code-action-test',
titre: 'tester-une-nouvelle-recette-vegetarienne',
type: 'classique',
},
function expectedActions(viewModel: ActionViewModel[]): void {
expect(viewModel).toStrictEqual<ActionViewModel[]>([
{
code: 'code-action-test',
titre: 'Tester une nouvelle <span class="text--bold">recette végétarienne</span>',
nombreDePersonnes: '<span class="text--bold">0</span> défi réalisé',
dejaVue: false,
aidesDisponibles: undefined,
url: {
name: 'action-individuelle',
params: {
id: 'code-action-test',
titre: 'tester-une-nouvelle-recette-vegetarienne',
type: 'classique',
},
},
},
{
code: 'code-action-test2',
titre: 'Tester une nouvelle <span class="text--bold">recette végétarienne</span> 2',
nombreDePersonnes: '<span class="text--bold">4</span> défis réalisés',
aidesDisponibles: '<span class="text--bold">5</span> aides disponibles',
dejaVue: true,
url: {
name: 'action-individuelle',
params: {
id: 'code-action-test2',
titre: 'tester-une-nouvelle-recette-vegetarienne-2',
type: 'bilan',
},
},
},
]);
}
function expectedCatalogue(viewModel: CatalogueActionsViewModel): void {
expect(viewModel).toStrictEqual<CatalogueActionsViewModel>({
filtres: [
{
id: ClefThematiqueAPI.transports,
label: 'Transport !',
checked: false,
},
{
id: ClefThematiqueAPI.alimentation,
label: 'Alimentation !',
checked: false,
},
],
phraseNombreActions: '2 actions',
});
}
});
Expand Down

0 comments on commit 974ec68

Please sign in to comment.