@open3cl/engine
Version: 
Open Source 3CL-DPE engine
265 lines (243 loc) • 8.12 kB
JavaScript
import { Inertie } from './7_inertie.js';
import { describe, expect, test } from 'vitest';
describe('Inertie unit tests', () => {
  /**
   * @see : Methode_de_calcul_3CL_DPE_2021-338.pdf Page 53
   */
  const inertie = new Inertie();
  test.each([
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    []
  ])(
    'should get inertie %s for plancher_bas with methode_saisie_u %s, type_isolation_id %s and type_plancher_bas %s',
    (
      inertie_result,
      enum_methode_saisie_u_id,
      enum_type_isolation_id,
      enum_type_plancher_bas_id
    ) => {
      const de = {
        enum_methode_saisie_u_id,
        enum_type_isolation_id,
        enum_type_plancher_bas_id
      };
      expect(inertie.calculateInertiePbLourd(de)).toBe(inertie_result);
    }
  );
  test.each([
    [],
    [],
    [],
    [],
    [],
    [],
    []
  ])(
    'should get inertie %s for plancher_haut with type_isolation_id %s and type_plancher_haut %s',
    (inertie_result, enum_type_isolation_id, enum_type_plancher_haut_id) => {
      const de = {
        enum_type_isolation_id,
        enum_type_plancher_haut_id
      };
      expect(inertie.calculateInertiePhLourd(de)).toBe(inertie_result);
    }
  );
  test.each([
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    []
  ])(
    'should get inertie %s for mur with methode_saisie_u %s, type_isolation_id %s, materiaux_structure_mur %s and epaisseur_structure %s',
    (
      inertie_result,
      enum_methode_saisie_u_id,
      enum_type_isolation_id,
      enum_materiaux_structure_mur_id,
      epaisseur_structure
    ) => {
      const de = {
        enum_methode_saisie_u_id,
        enum_type_isolation_id,
        enum_materiaux_structure_mur_id,
        epaisseur_structure
      };
      expect(inertie.calculateInertieMurLourd(de)).toBe(inertie_result);
    }
  );
  test('should get inertie for mur getting epaisseur_structure from description', () => {
    const de = {
      enum_type_isolation_id: 2,
      enum_materiaux_structure_mur_id: 12
    };
    expect(inertie.calculateInertieMurLourd(de)).toBe(0);
    de.description = "Mur en blocs de béton creux d'''épaisseur ≥ 25 cm non isolé";
    expect(inertie.calculateInertieMurLourd(de)).toBe(1);
    de.description = "Mur en blocs de béton creux d'épaisseur 4 cm non isolé";
    expect(inertie.calculateInertieMurLourd(de)).toBe(0);
    de.description = 'Mur en blocs de béton creux';
    expect(inertie.calculateInertieMurLourd(de)).toBe(0);
  });
  test('should get inertie for plancher_bas with the majority surface', () => {
    const enveloppe = {
      plancher_bas_collection: {
        plancher_bas: [
          {
            donnee_entree: {
              enum_methode_saisie_u_id: 1,
              enum_type_plancher_bas_id: 9,
              surface_paroi_opaque: 100
            }
          },
          {
            donnee_entree: {
              enum_methode_saisie_u_id: 0,
              enum_type_plancher_bas_id: 9,
              surface_paroi_opaque: 25
            }
          }
        ]
      },
      plancher_haut_collection: {},
      mur_collection: {}
    };
    // surface plancher_bas_lourd > 0.5 * surface plancher_bas
    expect(inertie.calculateInertie(enveloppe).inertie_plancher_bas_lourd).toBe(1);
    enveloppe.plancher_bas_collection.plancher_bas[0].donnee_entree.surface_paroi_opaque = 18;
    // surface plancher_bas_lourd < 0.5 * surface plancher_bas
    expect(inertie.calculateInertie(enveloppe).inertie_plancher_bas_lourd).toBe(0);
  });
  test('should get inertie for plancher_haut with the majority surface', () => {
    const enveloppe = {
      plancher_haut_collection: {
        plancher_haut: [
          {
            donnee_entree: {
              enum_type_isolation_id: 2,
              enum_type_plancher_haut_id: 8,
              surface_paroi_opaque: 100
            }
          },
          {
            donnee_entree: {
              enum_type_isolation_id: 0,
              enum_type_plancher_haut_id: 8,
              surface_paroi_opaque: 25
            }
          }
        ]
      },
      plancher_bas_collection: {},
      mur_collection: {}
    };
    // surface plancher_haut_lourd > 0.5 * surface plancher_haut
    expect(inertie.calculateInertie(enveloppe).inertie_plancher_haut_lourd).toBe(1);
    enveloppe.plancher_haut_collection.plancher_haut[0].donnee_entree.surface_paroi_opaque = 18;
    // surface plancher_haut_lourd < 0.5 * surface plancher_haut
    expect(inertie.calculateInertie(enveloppe).inertie_plancher_haut_lourd).toBe(0);
  });
  test('should get inertie for mur with the majority surface', () => {
    const enveloppe = {
      mur_collection: {
        mur: [
          {
            donnee_entree: {
              enum_type_isolation_id: 2,
              enum_materiaux_structure_mur_id: 2,
              surface_paroi_opaque: 100
            }
          },
          {
            donnee_entree: {
              enum_type_isolation_id: 1,
              enum_materiaux_structure_mur_id: 2,
              surface_paroi_opaque: 25
            }
          }
        ]
      },
      plancher_bas_collection: {},
      plancher_haut_collection: {}
    };
    // surface mur_lourd > 0.5 * surface mur
    expect(inertie.calculateInertie(enveloppe).inertie_paroi_verticale_lourd).toBe(1);
    enveloppe.mur_collection.mur[0].donnee_entree.surface_paroi_opaque = 18;
    // surface mur_lourd < 0.5 * surface mur
    expect(inertie.calculateInertie(enveloppe).inertie_paroi_verticale_lourd).toBe(0);
  });
  test('should get enum_classe_inertie_id', () => {
    const enveloppe = {
      mur_collection: {
        mur: [
          {
            donnee_entree: {
              enum_type_isolation_id: 2,
              enum_materiaux_structure_mur_id: 2,
              surface_paroi_opaque: 100
            }
          }
        ]
      },
      plancher_bas_collection: {
        plancher_bas: [
          {
            donnee_entree: {
              enum_type_isolation_id: 2,
              enum_type_plancher_bas_id: 9,
              surface_paroi_opaque: 100
            }
          }
        ]
      },
      plancher_haut_collection: {
        plancher_haut: [
          {
            donnee_entree: {
              enum_type_isolation_id: 2,
              enum_type_plancher_haut_id: 8,
              surface_paroi_opaque: 100
            }
          }
        ]
      }
    };
    // inertie_plancher_bas_lourd = 1 + inertie_plancher_haut_lourd = 1 + inertie_paroi_verticale_lourd = 1
    expect(inertie.calculateInertie(enveloppe).enum_classe_inertie_id).toBe('1');
    // inertie_plancher_bas_lourd = 1 + inertie_plancher_haut_lourd = 1 + inertie_paroi_verticale_lourd = 0
    enveloppe.mur_collection.mur[0].donnee_entree.enum_type_isolation_id = 0;
    expect(inertie.calculateInertie(enveloppe).enum_classe_inertie_id).toBe('2');
    // inertie_plancher_bas_lourd = 1 + inertie_plancher_haut_lourd = 0 + inertie_paroi_verticale_lourd = 0
    enveloppe.plancher_haut_collection.plancher_haut[0].donnee_entree.enum_type_isolation_id = 0;
    expect(inertie.calculateInertie(enveloppe).enum_classe_inertie_id).toBe('3');
    // inertie_plancher_bas_lourd = 0 + inertie_plancher_haut_lourd = 0 + inertie_paroi_verticale_lourd = 0
    enveloppe.plancher_bas_collection.plancher_bas[0].donnee_entree.enum_type_isolation_id = 0;
    expect(inertie.calculateInertie(enveloppe).enum_classe_inertie_id).toBe('4');
  });
});