Skip to content

Commit 8b726c6

Browse files
committed
Merge branch 'feature/O2B-1506/lhcfills-run-duration-filter' into feature/O2B-1508/lhcfills-beam-types-filter
2 parents 2aec67f + 4e68523 commit 8b726c6

6 files changed

Lines changed: 65 additions & 44 deletions

File tree

lib/public/components/Filters/LhcFillsFilter/beamDurationFilter.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

lib/public/components/Filters/LhcFillsFilter/runDurationFilter.js renamed to lib/public/components/Filters/LhcFillsFilter/durationFilter.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@ import { comparisonOperatorFilter } from '../common/filters/comparisonOperatorFi
1515
import { rawTextFilter } from '../common/filters/rawTextFilter.js';
1616

1717
/**
18-
* Component to filter LHC-fills by run duration
18+
* Component to filter LHC-fills by duration
1919
*
20-
* @param {TextComparisonFilterModel} runDurationFilterModel runDurationFilterModel
20+
* @param {TextComparisonFilterModel} durationFilterModel durationFilterModel
21+
* @param {string} id id used for the operand and operator elements, becomes: `${id}-operator` OR `${id}-operand`.
2122
* @returns {Component} the text field
2223
*/
23-
export const runDurationFilter = (runDurationFilterModel) => {
24+
export const durationFilter = (durationFilterModel, id) => {
2425
const amountFilter = rawTextFilter(
25-
runDurationFilterModel.operandInputModel,
26-
{ id: 'run-duration-filter-operand', classes: ['w-100', 'run-duration-filter'], placeholder: 'e.g 16:14:15 (HH:MM:SS)' },
26+
durationFilterModel.operandInputModel,
27+
{ id: `${id}-operand`, classes: ['w-100'], placeholder: 'e.g 16:14:15 (HH:MM:SS)' },
2728
);
2829

29-
return comparisonOperatorFilter(amountFilter, runDurationFilterModel.operatorSelectionModel.current, (value) =>
30-
runDurationFilterModel.operatorSelectionModel.select(value), { id: 'run-duration-filter-operator' });
30+
return comparisonOperatorFilter(amountFilter, durationFilterModel.operatorSelectionModel.current, (value) =>
31+
durationFilterModel.operatorSelectionModel.select(value), { id: `${id}-operator` });
3132
};

lib/public/views/LhcFills/ActiveColumns/lhcFillsActiveColumns.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ import { formatBeamType } from '../../../utilities/formatting/formatBeamType.js'
2525
import { frontLink } from '../../../components/common/navigation/frontLink.js';
2626
import { toggleStableBeamOnlyFilter } from '../../../components/Filters/LhcFillsFilter/stableBeamFilter.js';
2727
import { fillNumberFilter } from '../../../components/Filters/LhcFillsFilter/fillNumberFilter.js';
28-
import { beamDurationFilter } from '../../../components/Filters/LhcFillsFilter/beamDurationFilter.js';
29-
import { runDurationFilter } from '../../../components/Filters/LhcFillsFilter/runDurationFilter.js';
28+
import { durationFilter } from '../../../components/Filters/LhcFillsFilter/durationFilter.js';
3029
import { beamsTypeFilter } from '../../../components/Filters/LhcFillsFilter/beamsTypeFilter.js';
3130

3231
/**
@@ -111,7 +110,7 @@ export const lhcFillsActiveColumns = {
111110

112111
return '-';
113112
},
114-
filter: (lhcFillModel) => beamDurationFilter(lhcFillModel.filteringModel.get('beamDuration')),
113+
filter: (lhcFillModel) => durationFilter(lhcFillModel.filteringModel.get('beamDuration'), 'beam-duration-filter'),
115114
profiles: {
116115
lhcFill: true,
117116
environment: true,
@@ -143,7 +142,7 @@ export const lhcFillsActiveColumns = {
143142
visible: true,
144143
size: 'w-8',
145144
format: (duration) => formatDuration(duration),
146-
filter: (lhcFillModel) => runDurationFilter(lhcFillModel.filteringModel.get('runDuration')),
145+
filter: (lhcFillModel) => durationFilter(lhcFillModel.filteringModel.get('runDuration'), 'run-duration-filter'),
147146
},
148147
efficiency: {
149148
name: 'Fill Efficiency',

lib/usecases/lhcFill/GetAllLhcFillsUseCase.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class GetAllLhcFillsUseCase {
7373
// Include 00:00:00 = 0 = null AND everything above 00:00:00 which is more or less than 0.
7474
queryBuilder.whereAssociation('statistics', 'runsCoverage').applyOperator(runDuration.operator, 0);
7575
queryBuilder.whereAssociation('statistics', 'runsCoverage').applyOperator('=', null);
76+
} else if ((runDuration.operator === '>' || runDuration.operator === '<') && Number(runDuration.limit) === 0) {
77+
queryBuilder.whereAssociation('statistics', 'runsCoverage').applyOperator(runDuration.operator, 0);
7678
} else if (Number(runDuration.limit) === 0) {
7779
queryBuilder.whereAssociation('statistics', 'runsCoverage').applyOperator(runDuration.operator, null);
7880
} else {

test/api/lhcFills.test.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,56 @@ module.exports = () => {
453453
});
454454
});
455455

456+
it('should return 200 and an LHCFill array for runs duration filter, = 00:00:00', (done) => {
457+
request(server)
458+
.get('/api/lhcFills?page[offset]=0&page[limit]=15&filter[runDuration][operator]==&filter[runDuration][limit]=00:00:00')
459+
.expect(200)
460+
.end((err, res) => {
461+
if (err) {
462+
done(err);
463+
return;
464+
}
465+
466+
expect(res.body.data).to.have.lengthOf(4);
467+
expect(res.body.data[0].fillNumber).to.equal(5);
468+
469+
done();
470+
});
471+
});
472+
473+
it('should return 200 and an LHCFill array for runs duration filter, > 00:00:00', (done) => {
474+
request(server)
475+
.get('/api/lhcFills?page[offset]=0&page[limit]=15&filter[runDuration][operator]=>&filter[runDuration][limit]=00:00:00')
476+
.expect(200)
477+
.end((err, res) => {
478+
if (err) {
479+
done(err);
480+
return;
481+
}
482+
483+
expect(res.body.data).to.have.lengthOf(1);
484+
expect(res.body.data[0].fillNumber).to.equal(6);
485+
486+
done();
487+
});
488+
});
489+
490+
it('should return 200 and an LHCFill array for runs duration filter, < 00:00:00', (done) => {
491+
request(server)
492+
.get('/api/lhcFills?page[offset]=0&page[limit]=15&filter[runDuration][operator]=<&filter[runDuration][limit]=00:00:00')
493+
.expect(200)
494+
.end((err, res) => {
495+
if (err) {
496+
done(err);
497+
return;
498+
}
499+
500+
expect(res.body.data).to.have.lengthOf(0);
501+
502+
done();
503+
});
504+
});
505+
456506
it('should return 200 and an LHCFill array for runs duration filter, > 03:00:00', (done) => {
457507
request(server)
458508
.get('/api/lhcFills?page[offset]=0&page[limit]=15&filter[runDuration][operator]=>&filter[runDuration][limit]=03:00:00')

test/public/lhcFills/overview.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,9 @@ module.exports = () => {
271271
const filterSBExpect = { selector: '.stableBeams-filter .w-30', value: 'Stable Beams Only' };
272272
const filterFillNRExpect = {selector: 'div.items-baseline:nth-child(1) > div:nth-child(1)', value: 'Fill #'};
273273
const filterSBDurationExpect = {selector: 'div.items-baseline:nth-child(3) > div:nth-child(1)', value: 'SB Duration'};
274-
const filterSBDurationPlaceholderExpect = {selector: '.beam-duration-filter', value: 'e.g 16:14:15 (HH:MM:SS)'}
274+
const filterSBDurationPlaceholderExpect = {selector: '#beam-duration-filter-operand', value: 'e.g 16:14:15 (HH:MM:SS)'}
275275
const filterRunDurationExpect = {selector: 'div.flex-row:nth-child(4) > div:nth-child(1)', value: 'Total runs duration'}
276-
const filterRunDurationPlaceholderExpect = {selector: '.run-duration-filter', value: 'e.g 16:14:15 (HH:MM:SS)'};
276+
const filterRunDurationPlaceholderExpect = {selector: '#run-duration-filter-operand', value: 'e.g 16:14:15 (HH:MM:SS)'};
277277
const filterSBDurationOperatorExpect = { value: true };
278278
const filterBeamTypeExpect = {selector: 'div.flex-row:nth-child(5) > div:nth-child(1)', value: 'Beam Type'}
279279

0 commit comments

Comments
 (0)