Skip to content

Commit 5081ae9

Browse files
authored
[O2B-1507] - Add filtering by createdAt to the environments filtering panel (#2037)
* Introduces a time range filter for the 'createdAt' column in the environments overview page. * Adds test to verify filtering by a 'createdAt' date range behaves correctly
1 parent 0435ed7 commit 5081ae9

File tree

3 files changed

+68
-7
lines changed

3 files changed

+68
-7
lines changed

lib/public/views/Environments/ActiveColumns/environmentsActiveColumns.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { environmentStatusHistoryLegendComponent } from '../../../components/env
2424
import { infoTooltip } from '../../../components/common/popover/infoTooltip.js';
2525
import { aliEcsEnvironmentLinkComponent } from '../../../components/common/externalLinks/aliEcsEnvironmentLinkComponent.js';
2626
import { StatusAcronym } from '../../../domain/enums/statusAcronym.mjs';
27+
import { timeRangeFilter } from '../../../components/Filters/common/filters/timeRangeFilter.js';
2728
import { checkboxes } from '../../../components/Filters/common/filters/checkboxFilter.js';
2829
import { rawTextFilter } from '../../../components/Filters/common/filters/rawTextFilter.js';
2930

@@ -95,10 +96,18 @@ export const environmentsActiveColumns = {
9596
},
9697
createdAt: {
9798
name: 'Created At',
98-
visible: false,
99+
visible: true,
99100
sortable: false,
100101
size: 'w-10',
101102
format: (timestamp) => formatTimestamp(timestamp, false),
103+
104+
/**
105+
* CreatedAt filter component
106+
*
107+
* @param {EnvironmentOverviewModel} environmentOverviewModel the environment overview model
108+
* @return {Component} the filter component
109+
*/
110+
filter: (environmentOverviewModel) => timeRangeFilter(environmentOverviewModel.filteringModel.get('created')),
102111
},
103112
status: {
104113
name: 'Current Status',

lib/public/views/Environments/Overview/EnvironmentOverviewModel.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import { buildUrl } from '/js/src/index.js';
1515
import { FilteringModel } from '../../../components/Filters/common/FilteringModel.js';
1616
import { OverviewPageModel } from '../../../models/OverviewModel.js';
17+
import { TimeRangeInputModel } from '../../../components/Filters/common/filters/TimeRangeInputModel.js';
1718
import { SelectionFilterModel } from '../../../components/Filters/common/filters/SelectionFilterModel.js';
1819
import { RawTextFilterModel } from '../../../components/Filters/common/filters/RawTextFilterModel.js';
1920
import { debounce } from '../../../utilities/debounce.js';
@@ -32,6 +33,7 @@ export class EnvironmentOverviewModel extends OverviewPageModel {
3233
super();
3334

3435
this._filteringModel = new FilteringModel({
36+
created: new TimeRangeInputModel(),
3537
runNumbers: new RawTextFilterModel(),
3638
statusHistory: new RawTextFilterModel(),
3739
currentStatus: new SelectionFilterModel({

test/public/envs/overview.test.js

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const {
2727
goToPage,
2828
openFilteringPanel,
2929
fillInput,
30+
getPeriodInputsSelectors,
3031
expectAttributeValue,
3132
resetFilters,
3233
} = require('../defaults.js');
@@ -87,7 +88,7 @@ module.exports = () => {
8788

8889
it('Should have balloon on runs column', async () => {
8990
await checkColumnBalloon(page, 1, 2);
90-
await checkColumnBalloon(page, 1, 5);
91+
await checkColumnBalloon(page, 1, 6);
9192
});
9293

9394
it('Should have correct status color in the overview page', async () => {
@@ -135,11 +136,11 @@ module.exports = () => {
135136

136137
};
137138

138-
await checkEnvironmentStatusColor(1, 3);
139-
await checkEnvironmentStatusColor(2, 3);
140-
await checkEnvironmentStatusColor(3, 3);
141-
await checkEnvironmentStatusColor(6, 3);
142-
await checkEnvironmentStatusColor(9, 3);
139+
await checkEnvironmentStatusColor(1, 4);
140+
await checkEnvironmentStatusColor(2, 4);
141+
await checkEnvironmentStatusColor(3, 4);
142+
await checkEnvironmentStatusColor(6, 4);
143+
await checkEnvironmentStatusColor(9, 4);
143144
});
144145

145146
it('can set how many environments are available per page', async () => {
@@ -403,4 +404,53 @@ module.exports = () => {
403404
await filterOnID('.id-filter input', 'j', ['CmCvjNbg', 'GIDO1jdkD', '8E4aZTjY', 'Dxi029djX']);
404405
await resetFilters(page);
405406
});
407+
408+
it('should successfully filter environments by their createdAt date', async () => {
409+
/**
410+
* This is the sequence to test filtering the environments based on their createdAt date
411+
*
412+
* @param {string} selector the filter input selector
413+
* @param {string} fromDate the from date string
414+
* @param {string} fromTime the from time string
415+
* @param {string} toDate the to date string
416+
* @param {string} toTime the to time string
417+
* @param {string[]} expectedIds the list of expected environment IDs after filtering
418+
* @return {void}
419+
*/
420+
const filterOnCreatedAt = async (selector, fromDate, fromTime, toDate, toTime, expectedIds) => {
421+
await fillInput(page, selector.fromTimeSelector, fromTime, ['change']);
422+
await fillInput(page, selector.toTimeSelector, toTime, ['change']);
423+
424+
await fillInput(page, selector.fromDateSelector, fromDate, ['change']);
425+
await fillInput(page, selector.toDateSelector, toDate, ['change']);
426+
427+
await waitForTableLength(page, expectedIds.length);
428+
expect(await page.$$eval('tbody tr', (rows) => rows.map((row) => row.id))).to.eql(expectedIds.map(id => `row${id}`));
429+
};
430+
431+
await openFilteringPanel(page);
432+
433+
const createdAtPopoverSelector = await getPopoverSelector(await page.$('.createdAt-filter .popover-trigger'));
434+
const periodInputsSelectors = getPeriodInputsSelectors(createdAtPopoverSelector);
435+
436+
await filterOnCreatedAt(
437+
periodInputsSelectors,
438+
'2019-05-08',
439+
'00:00',
440+
'2019-05-10',
441+
'00:00',
442+
['eZF99lH6'],
443+
);
444+
await resetFilters(page);
445+
446+
await filterOnCreatedAt(
447+
periodInputsSelectors,
448+
'2019-08-09',
449+
'00:00',
450+
'2019-08-09',
451+
'14:00',
452+
['GIDO1jdkD', '8E4aZTjY', 'Dxi029djX'],
453+
);
454+
await resetFilters(page);
455+
});
406456
};

0 commit comments

Comments
 (0)