import { Decimal } from 'decimal.js'; import { describe, expect, it } from 'vitest'; import { Formation } from '../../src/domain/formation.js'; import { Projet } from '../../src/domain/projet.js'; describe('Projet', () => { it('cree un projet valide', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'Site corpo', chargeHeures: new Decimal(80) }); expect(p.statut).toBe('devis'); expect(p.heuresRestantes().toNumber()).toBe(80); }); it('throw si chargeHeures < 0', () => { expect( () => new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(-1) }), ).toThrow(); }); it('ajouterTache cas nominal', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80) }); const t = p.ajouterTache('Setup repo', new Decimal(2), 100); expect(t.titre).toBe('Setup repo'); expect(p.taches.length).toBe(1); expect(p.heuresAttribuees().toNumber()).toBe(2); }); it('ajouterTache bloque si projet cloture', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80), statut: 'cloture', }); expect(() => p.ajouterTache('T', new Decimal(2), 1)).toThrow(); }); it('ajouterTache bloque si projet abandonne', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80), statut: 'abandonne', }); expect(() => p.ajouterTache('T', new Decimal(2), 1)).toThrow(); }); it('ajouterTache throw si charge < 0', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80) }); expect(() => p.ajouterTache('T', new Decimal(-2), 1)).toThrow(); }); it('lierFormationPedagogique', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80) }); const f = new Formation({ id: 42, nom: 'Bootcamp', heuresTotales: new Decimal(700) }); p.lierFormationPedagogique(f); expect(p.formationId).toBe(42); }); it('livrer transitions', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80) }); p.livrer(); expect(p.statut).toBe('livre'); }); it('livrer depuis en_cours OK', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80), statut: 'en_cours', }); p.livrer(); expect(p.statut).toBe('livre'); }); it('livrer bloque depuis cloture', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80), statut: 'cloture', }); expect(() => p.livrer()).toThrow(); }); it('cloturer transition', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80), statut: 'livre', }); p.cloturer(); expect(p.statut).toBe('cloture'); }); it('cloturer bloque depuis abandonne', () => { const p = new Projet({ id: 1, clientId: 5, nom: 'X', chargeHeures: new Decimal(80), statut: 'abandonne', }); expect(() => p.cloturer()).toThrow(); }); });