Matrice PO #154 : supprimer dossiers famille/AM, parents, enfants et comptes staff avec règles métier (placements clôturés, sans_enfant, cascade foyer, droits gestionnaire/admin). Poubelle en liste, dialogues de confirmation, garde-fou gestionnaire→gestionnaire. Inclut polish hauteur modale fiche AM.
86 lines
2.8 KiB
TypeScript
86 lines
2.8 KiB
TypeScript
import { Test, TestingModule } from '@nestjs/testing';
|
|
import { DossiersController } from './dossiers.controller';
|
|
import { DossiersService } from './dossiers.service';
|
|
import { SuppressionService } from '../suppressions/suppression.service';
|
|
import { AuthGuard } from 'src/common/guards/auth.guard';
|
|
import { RolesGuard } from 'src/common/guards/roles.guard';
|
|
import { StatutUtilisateurType } from 'src/entities/users.entity';
|
|
|
|
describe('DossiersController', () => {
|
|
let controller: DossiersController;
|
|
const dossiersServiceMock = {
|
|
listDossiers: jest.fn(),
|
|
getDossierByNumero: jest.fn(),
|
|
};
|
|
const suppressionServiceMock = {
|
|
deleteDossier: jest.fn(),
|
|
};
|
|
|
|
beforeEach(async () => {
|
|
const module: TestingModule = await Test.createTestingModule({
|
|
controllers: [DossiersController],
|
|
providers: [
|
|
{ provide: DossiersService, useValue: dossiersServiceMock },
|
|
{ provide: SuppressionService, useValue: suppressionServiceMock },
|
|
],
|
|
})
|
|
.overrideGuard(AuthGuard)
|
|
.useValue({ canActivate: () => true })
|
|
.overrideGuard(RolesGuard)
|
|
.useValue({ canActivate: () => true })
|
|
.compile();
|
|
|
|
controller = module.get<DossiersController>(DossiersController);
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
it('should be defined', () => {
|
|
expect(controller).toBeDefined();
|
|
});
|
|
|
|
it('list delegates to dossiersService.listDossiers with q', async () => {
|
|
dossiersServiceMock.listDossiers.mockResolvedValue([
|
|
{
|
|
type: 'famille',
|
|
numero_dossier: '2026-000043',
|
|
libelle: 'Claire MARTIN',
|
|
emails: ['claire@test.fr'],
|
|
user_ids: ['u1'],
|
|
statut: StatutUtilisateurType.ACTIF,
|
|
a_valider: false,
|
|
date_reference: null,
|
|
},
|
|
]);
|
|
|
|
const res = await controller.list('martin');
|
|
expect(dossiersServiceMock.listDossiers).toHaveBeenCalledWith('martin');
|
|
expect(res).toHaveLength(1);
|
|
expect(res[0].numero_dossier).toBe('2026-000043');
|
|
});
|
|
|
|
it('getDossier delegates to getDossierByNumero', async () => {
|
|
dossiersServiceMock.getDossierByNumero.mockResolvedValue({
|
|
type: 'family',
|
|
dossier: { numero_dossier: '2026-000001' },
|
|
});
|
|
const res = await controller.getDossier('2026-000001');
|
|
expect(dossiersServiceMock.getDossierByNumero).toHaveBeenCalledWith('2026-000001');
|
|
expect(res.type).toBe('family');
|
|
});
|
|
|
|
it('remove delegates to suppressionService.deleteDossier', async () => {
|
|
const user = { id: 'u1', role: 'gestionnaire' } as never;
|
|
suppressionServiceMock.deleteDossier.mockResolvedValue({
|
|
type: 'famille',
|
|
deleted_user_ids: [],
|
|
deleted_enfant_ids: [],
|
|
message: 'ok',
|
|
});
|
|
await controller.remove('2026-000001', user);
|
|
expect(suppressionServiceMock.deleteDossier).toHaveBeenCalledWith(
|
|
'2026-000001',
|
|
user,
|
|
);
|
|
});
|
|
});
|