Skip to content

Commit 05ea672

Browse files
committed
fix
1 parent 4870a31 commit 05ea672

4 files changed

Lines changed: 96 additions & 1 deletion

File tree

lib/database/seeders/20240404100811-qc-flags.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,12 @@ module.exports = {
298298
from: '2019-08-08 13:46:40',
299299
to: '2019-08-09 07:50:00',
300300
},
301+
{
302+
id: 6,
303+
flag_id: 6,
304+
from: '2019-08-09 08:50:00',
305+
to: null,
306+
},
301307
{
302308
id: 7,
303309
flag_id: 7,

lib/usecases/run/GetAllRunsUseCase.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ class GetAllRunsUseCase {
479479
const [simulationPassId] = filter?.simulationPassIds ?? [];
480480
const [lhcPeriodId] = filter?.lhcPeriodIds ?? [];
481481

482-
if (Boolean(dataPassId) + Boolean(simulationPassId) + Boolean(lhcPeriodId) > 1) {
482+
if (Boolean(dataPassId) + Boolean(simulationPassId) + Boolean(lhcPeriodId) !== 1) {
483483
throw new BadParameterError('If including QC flags, one and exactly one'
484484
+ 'of `dataPassId`, `simulationPassId` or `lhcPeriodId` is required');
485485
}

test/api/runs.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const { RunDetectorQualities } = require('../../lib/domain/enums/RunDetectorQual
2121
const { RunCalibrationStatus } = require('../../lib/domain/enums/RunCalibrationStatus.js');
2222
const { updateRun } = require('../../lib/server/services/run/updateRun.js');
2323
const { RunDefinition } = require('../../lib/domain/enums/RunDefinition.js');
24+
const { qcFlagService } = require('../../lib/server/services/qualityControlFlag/QcFlagService.js');
2425

2526
module.exports = () => {
2627
before(resetDatabaseContent);
@@ -570,6 +571,39 @@ module.exports = () => {
570571
expect(runs.every(({ aliceDipoleCurrent, aliceDipolePolarity }) =>
571572
Math.round(aliceDipoleCurrent * (aliceDipolePolarity === 'NEGATIVE' ? -1 : 1) / 1000) === 0)).to.be.true;
572573
});
574+
575+
it('should successfully handle query including QC flags', async () => {
576+
{ // Data Passes
577+
const response = await request(server).get(`/api/runs?filter[dataPassIds][]=1&include[effectiveQcFlags]=true`)
578+
expect(response.status).to.equal(200);
579+
const { data: runs } = response.body;
580+
581+
expect(runs).to.have.lengthOf(3);
582+
expect(runs.find(({ runNumber }) => runNumber === 107).qcFlags['1'].map(({ id }) => id)).to.have.all.members([202, 201]);
583+
expect(runs.find(({ runNumber }) => runNumber === 107).qcFlags['2'].map(({ id }) => id)).to.have.all.members([203]);
584+
expect(runs.find(({ runNumber }) => runNumber === 106).qcFlags['1'].map(({ id }) => id)).to.have.all.members([3, 2, 1]);
585+
}
586+
587+
{ // Simulation Passes
588+
const response = await request(server).get(`/api/runs?filter[simulationPassIds][]=1&include[effectiveQcFlags]=true`)
589+
expect(response.status).to.equal(200);
590+
const { data: runs } = response.body;
591+
expect(runs).to.have.lengthOf(3);
592+
593+
console.log('TOBEC', await qcFlagService.getAllPerSimulationPassAndRunAndDetector({ simulationPassId: 1, runNumber: 106, detectorId: 1}));
594+
595+
expect(runs.find(({ runNumber }) => runNumber === 106).qcFlags['1'].map(({ id }) => id)).to.have.all.members([6, 5]);
596+
}
597+
598+
{ // Synchronous flags
599+
const response = await request(server).get(`/api/runs?filter[lhcPeriodIds][]=1&include[effectiveQcFlags]=true`)
600+
expect(response.status).to.equal(200);
601+
const { data: runs } = response.body;
602+
expect(runs).to.have.lengthOf(4);
603+
expect(runs.find(({ runNumber }) => runNumber === 56).qcFlags['7'].map(({ id }) => id)).to.have.all.members([101, 100]);
604+
expect(runs.find(({ runNumber }) => runNumber === 56).qcFlags['4'].map(({ id }) => id)).to.have.all.members([102]);
605+
}
606+
});
573607
});
574608

575609
describe('GET /api/runs/reasonTypes', () => {

test/lib/usecases/run/GetAllRunsUseCase.test.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ const chai = require('chai');
1717
const { RunQualities } = require('../../../../lib/domain/enums/RunQualities.js');
1818
const { RunCalibrationStatus } = require('../../../../lib/domain/enums/RunCalibrationStatus.js');
1919
const { RunDefinition } = require('../../../../lib/domain/enums/RunDefinition.js');
20+
const assert = require('assert');
21+
const { BadParameterError } = require('../../../../lib/server/errors/BadParameterError.js');
2022

2123
const { expect } = chai;
2224

@@ -795,4 +797,57 @@ module.exports = () => {
795797
expect(runs).to.have.lengthOf(0);
796798
}
797799
});
800+
801+
it('should successfully handle query including QC flags', async () => {
802+
{
803+
await assert.rejects(() => new GetAllRunsUseCase().execute({
804+
query: {
805+
include: { effectiveQcFlags: true },
806+
},
807+
}), new BadParameterError('If including QC flags, one and exactly one'
808+
+ 'of `dataPassId`, `simulationPassId` or `lhcPeriodId` is required'));
809+
}
810+
811+
{ // Data Passes
812+
const { runs } = await new GetAllRunsUseCase().execute({
813+
query: {
814+
filter: {
815+
dataPassIds: [1],
816+
},
817+
include: { effectiveQcFlags: true },
818+
},
819+
});
820+
expect(runs).to.have.lengthOf(3);
821+
expect(runs.find(({ runNumber }) => runNumber === 107).qcFlags['1'].map(({ id }) => id)).to.have.all.members([202, 201]);
822+
expect(runs.find(({ runNumber }) => runNumber === 107).qcFlags['2'].map(({ id }) => id)).to.have.all.members([203]);
823+
expect(runs.find(({ runNumber }) => runNumber === 106).qcFlags['1'].map(({ id }) => id)).to.have.all.members([3, 2, 1]);
824+
}
825+
826+
{ // Simulation Passes
827+
const { runs } = await new GetAllRunsUseCase().execute({
828+
query: {
829+
filter: {
830+
simulationPassIds: [1],
831+
},
832+
include: { effectiveQcFlags: true },
833+
},
834+
});
835+
expect(runs).to.have.lengthOf(3);
836+
expect(runs.find(({ runNumber }) => runNumber === 106).qcFlags['1'].map(({ id }) => id)).to.have.all.members([6, 5]);
837+
}
838+
839+
{ // Synchronous flags
840+
const { runs } = await new GetAllRunsUseCase().execute({
841+
query: {
842+
filter: {
843+
lhcPeriodIds: [1],
844+
},
845+
include: { effectiveQcFlags: true },
846+
},
847+
});
848+
expect(runs).to.have.lengthOf(4);
849+
expect(runs.find(({ runNumber }) => runNumber === 56).qcFlags['7'].map(({ id }) => id)).to.have.all.members([101, 100]);
850+
expect(runs.find(({ runNumber }) => runNumber === 56).qcFlags['4'].map(({ id }) => id)).to.have.all.members([102]);
851+
}
852+
});
798853
};

0 commit comments

Comments
 (0)