UNPKG

@open3cl/engine

Version:

Open Source 3CL-DPE engine

190 lines (167 loc) 5.34 kB
import { ContexteBuilder } from './contexte.builder.js'; import { beforeEach, describe, expect, test, vi } from 'vitest'; import { TypeDpe, TypeHabitation } from '../../dpe/domain/models/type-habitation.model.js'; import { NadeqService } from './logement/nadeq.service.js'; /** @type {NadeqService} **/ let nadeqService; /** @type {ContexteBuilder} **/ let contexteBuilder; describe('Generateur du contexte du calcul', () => { beforeEach(() => { nadeqService = new NadeqService(); contexteBuilder = new ContexteBuilder(nadeqService); }); test('Contexte avec effet joule', () => { const dpe = { logement: { caracteristique_generale: {}, installation_chauffage_collection: { installation_chauffage: [ { emetteur_chauffage_collection: { emetteur_chauffage: [{ donnee_entree: { enum_type_emission_distribution_id: '1' } }] } } ] } } }; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ effetJoule: true }); }); test('Contexte sans effet joule', () => { const dpe = { logement: { caracteristique_generale: {}, installation_chauffage_collection: { installation_chauffage: [ { emetteur_chauffage_collection: { emetteur_chauffage: [ { donnee_entree: { enum_type_emission_distribution_id: '12' } } ] } } ] } } }; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ effetJoule: false }); }); test('Contexte sans chauffage', () => { const dpe = { logement: { caracteristique_generale: {} } }; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ effetJoule: false }); }); test('Contexte sans emetteur de chauffage', () => { const dpe = { logement: { caracteristique_generale: {}, installation_chauffage_collection: {} } }; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ effetJoule: false }); }); test('Contexte avec calcul du nadeq', () => { vi.spyOn(nadeqService, 'execute').mockReturnValue(1.58); const dpe = { logement: { caracteristique_generale: {}, installation_chauffage_collection: {} } }; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ nadeq: 1.58 }); }); test('Récupération des informations du logement concerné par le DPE', () => { let dpe = { logement: { meteo: { enum_zone_climatique_id: 1, enum_classe_altitude_id: 2 }, caracteristique_generale: { annee_construction: 2005, enum_periode_construction_id: 4, surface_habitable_logement: 48.9, surface_habitable_immeuble: 105, hsp: 2.8, nombre_appartement: 18 } } }; dpe.logement.caracteristique_generale.enum_methode_application_dpe_log_id = '1'; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ surfaceHabitable: dpe.logement.caracteristique_generale.surface_habitable_logement, typeHabitation: TypeHabitation.MAISON, typeDpe: TypeDpe.MAISON, anneeConstruction: 2005, enumPeriodeConstructionId: '4', hauteurSousPlafond: 2.8, nombreAppartement: 18, zoneClimatique: { id: '1', value: 'h1a' }, altitude: { id: '2', value: '400-800m' } }); dpe.logement.caracteristique_generale.enum_methode_application_dpe_log_id = '5'; dpe.logement.meteo.enum_zone_climatique_id = '4'; dpe.logement.meteo.enum_classe_altitude_id = '3'; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ surfaceHabitable: dpe.logement.caracteristique_generale.surface_habitable_logement, typeHabitation: TypeHabitation.APPARTEMENT, typeDpe: TypeDpe.APPARTEMENT, zoneClimatique: { id: '4', value: 'h2a' }, altitude: { id: '3', value: 'supérieur à 800m' } }); dpe.logement.caracteristique_generale.enum_methode_application_dpe_log_id = '8'; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ surfaceHabitable: dpe.logement.caracteristique_generale.surface_habitable_immeuble, typeHabitation: TypeHabitation.IMMEUBLE, typeDpe: TypeDpe.IMMEUBLE }); }); test('Contexte avec calcul ilpa', () => { const dpe = { logement: { caracteristique_generale: {}, meteo: { batiment_materiaux_anciens: 0 }, enveloppe: { inertie: { enum_classe_inertie_id: 4 } } } }; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ inertie: { id: 4, ilpa: 0 } }); dpe.logement.enveloppe.inertie.enum_classe_inertie_id = 1; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ inertie: { id: 1, ilpa: 0 } }); dpe.logement.meteo.batiment_materiaux_anciens = 1; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ inertie: { id: 1, ilpa: 1 } }); dpe.logement.enveloppe.inertie.enum_classe_inertie_id = 2; expect(contexteBuilder.fromDpe(dpe)).toMatchObject({ inertie: { id: 2, ilpa: 1 } }); }); });