Skip to content

Commit

Permalink
[TECH] Éviter la purge de la table certification-center-features lors…
Browse files Browse the repository at this point in the history
… de l'éxécution du script d'ajout de centre pilote pour la séparation (PIX-13280)

 #9453
  • Loading branch information
pix-service-auto-merge committed Jul 10, 2024
2 parents 01ea3ba + d4d96ce commit 1c9a52b
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 83 deletions.
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import 'dotenv/config';

import * as url from 'node:url';

import lodash from 'lodash';

import { disconnect, knex } from '../../../db/knex-database-connection.js';
import { CERTIFICATION_FEATURES } from '../../../src/certification/shared/domain/constants.js';
import { logger } from '../../../src/shared/infrastructure/utils/logger.js';
/**
* Usage: node scripts/certification/next-gen/import-pilot-certification-centers-from-csv.js path/file.csv
* Usage: node scripts/certification/next-gen/import-complementary-alone-feature-pilot-certification-centers-from-csv.js path/file.csv
* File is semicolon separated values, headers being:
* certification_center_id
**/
import { checkCsvHeader, parseCsv } from '../../helpers/csvHelpers.js';
const { values } = lodash;
import * as url from 'node:url';

import { CERTIFICATION_FEATURES } from '../../../src/certification/shared/domain/constants.js';
const { values } = lodash;

const headers = {
certificationCenterId: 'certification_center_id',
Expand Down Expand Up @@ -87,7 +88,10 @@ async function main(filePath) {

logger.info('Inserting pilot certification center ids in database... ');
trx = await knex.transaction();
await trx('certification-center-features').del();
await trx('certification-center-features')
.leftJoin('features', 'features.id', 'certification-center-features.featureId')
.where('features.key', CERTIFICATION_FEATURES.CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE.key)
.del();
const batchInfo = await trx.batchInsert('certification-center-features', certificationCentersPilotsList);
const insertedLines = _getInsertedLineNumber(batchInfo);
logger.info('✅ ');
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
import { main } from '../../../../../scripts/certification/next-gen/import-complementary-alone-feature-pilot-certification-centers-from-csv.js';
import { CERTIFICATION_FEATURES } from '../../../../../src/certification/shared/domain/constants.js';
import { catchErr, createTempFile, databaseBuilder, expect, knex, removeTempFile } from '../../../../test-helper.js';

describe('Integration | Scripts | Certification | import-pilot-certification-centers-from-csv', function () {
let file;

afterEach(async function () {
await removeTempFile(file);
});

context('when pilot certification center list from a csv file is imported', function () {
it('should import the pilot certification center list', async function () {
// given
const file = 'pilot-certification-centers-valid.csv';
const data = 'certification_center_id;\n1001;\n1002;\n';
const csvFilePath = await createTempFile(file, data);

const certificationCenterId1 = 1001;
const certificationCenterId2 = 1002;

const featureId = databaseBuilder.factory.buildFeature({
key: CERTIFICATION_FEATURES.CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE.key,
}).id;

databaseBuilder.factory.buildCertificationCenter({ id: certificationCenterId1, isV3Pilot: true });
databaseBuilder.factory.buildCertificationCenter({ id: certificationCenterId2, isV3Pilot: true });

await databaseBuilder.commit();

// when
await main(csvFilePath);

// then
const pilotCertificationCenterList = await knex('certification-center-features').select(
'certificationCenterId',
'featureId',
);

expect(pilotCertificationCenterList).to.deep.equal([
{ certificationCenterId: certificationCenterId1, featureId },
{ certificationCenterId: certificationCenterId2, featureId },
]);
});

context('when pilot certification centers are already imported', function () {
it('should removes all pilot certification centers tied to the feature ', async function () {
// given
const file = 'pilot-certification-centers-valid.csv';
const dataWithSingleCertificationCenterId = 'certification_center_id;\n1002;\n';
const csvFilePath = await createTempFile(file, dataWithSingleCertificationCenterId);

const certificationCenterId1 = 1001;
const certificationCenterId2 = 1002;

const featureId = databaseBuilder.factory.buildFeature({
key: CERTIFICATION_FEATURES.CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE.key,
}).id;

databaseBuilder.factory.buildCertificationCenter({ id: certificationCenterId1, isV3Pilot: true });
databaseBuilder.factory.buildCertificationCenter({ id: certificationCenterId2, isV3Pilot: true });

databaseBuilder.factory.buildCertificationCenterFeature({ certificationCenterId1, featureId });

await databaseBuilder.commit();

// when
await main(csvFilePath);

// then
const pilotCertificationCenterList = await knex('certification-center-features').select(
'certificationCenterId',
'featureId',
);

expect(pilotCertificationCenterList).to.deep.equal([
{ certificationCenterId: certificationCenterId2, featureId },
]);
});

it('should NOT removes pilot certification centers for another feature', async function () {
// given
const file = 'pilot-certification-centers-valid.csv';
const data = 'certification_center_id;\n1002;\n';
const csvFilePath = await createTempFile(file, data);

const certificationCenterId1 = 1001;
const certificationCenterId2 = 1002;

const complementaryAloneFeatureId = databaseBuilder.factory.buildFeature({
key: CERTIFICATION_FEATURES.CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE.key,
}).id;
const anotherFeatureId = databaseBuilder.factory.buildFeature({
key: 'ANOTHER_FEATURE',
}).id;

databaseBuilder.factory.buildCertificationCenter({ id: certificationCenterId1, isV3Pilot: true });
databaseBuilder.factory.buildCertificationCenter({ id: certificationCenterId2, isV3Pilot: true });

databaseBuilder.factory.buildCertificationCenterFeature({
certificationCenterId: certificationCenterId1,
featureId: anotherFeatureId,
});

await databaseBuilder.commit();

// when
await main(csvFilePath);

// then
const pilotCertificationCenterList = await knex('certification-center-features').select(
'certificationCenterId',
'featureId',
);

expect(pilotCertificationCenterList).to.deep.equal([
{ certificationCenterId: certificationCenterId1, featureId: anotherFeatureId },
{ certificationCenterId: certificationCenterId2, featureId: complementaryAloneFeatureId },
]);
});
});

context('when there is a V2 certification center in the csv file', function () {
it('should not import the certification center list', async function () {
// given
const file = 'pilot-certification-centers-invalid-v3-centers.csv';
const data = 'certification_center_id;\n2001;\n2002;\n';
const csvFilePath = await createTempFile(file, data);
const v2CertificationCenterId = 2001;
const v3CertificationCenterId = 2002;

const featureId = databaseBuilder.factory.buildFeature({
key: CERTIFICATION_FEATURES.CAN_REGISTER_FOR_A_COMPLEMENTARY_CERTIFICATION_ALONE.key,
}).id;

databaseBuilder.factory.buildCertificationCenter({ id: v2CertificationCenterId, isV3Pilot: false });
databaseBuilder.factory.buildCertificationCenter({ id: v3CertificationCenterId, isV3Pilot: true });
databaseBuilder.factory.buildCertificationCenterFeature({
certificationCenterId: v3CertificationCenterId,
featureId,
});
await databaseBuilder.commit();

// when
const error = await catchErr(main)(csvFilePath);

// then
expect(error.message).to.equal('V2 certification centers : 2001 are not allowed as pilots');
});
});
});
});

This file was deleted.

0 comments on commit 1c9a52b

Please sign in to comment.