Skip to content

Commit c9aa1c4

Browse files
authored
Merge branch 'main' into feature/O2B-1492/Add-filtering-by-the-status-history-to-the-envs-filtering-panel
2 parents d32473e + b4e30b7 commit c9aa1c4

5 files changed

Lines changed: 50 additions & 2 deletions

File tree

lib/domain/enums/StatusAcronyms.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const statusAcronyms = Object.freeze({
1919
RUNNING: 'R',
2020
ERROR: 'E',
2121
DESTROYED: 'X',
22+
DONE: 'X',
2223
});
2324

2425
exports.statusAcronyms = statusAcronyms;

lib/public/domain/enums/statusAcronym.mjs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export const StatusAcronym = Object.freeze({
1818
CONFIGURED: 'C',
1919
RUNNING: 'R',
2020
ERROR: 'E',
21-
MIXED: 'M',
2221
DESTROYED: 'X',
2322
DONE: 'X',
2423
});

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

Lines changed: 9 additions & 0 deletions
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 { checkboxes } from '../../../components/Filters/common/filters/checkboxFilter.js';
2728
import { rawTextFilter } from '../../../components/Filters/common/filters/rawTextFilter.js';
2829

2930
/**
@@ -95,6 +96,14 @@ export const environmentsActiveColumns = {
9596
size: 'w-10',
9697
noEllipsis: true,
9798
format: (_, environment) => displayEnvironmentStatus(environment),
99+
100+
/**
101+
* Status filter component
102+
*
103+
* @param {EnvironmentOverviewModel} environmentOverviewModel the environment overview model
104+
* @return {Component} the filter component
105+
*/
106+
filter: (environmentOverviewModel) => checkboxes(environmentOverviewModel.filteringModel.get('currentStatus').selectionModel),
98107
},
99108
historyItems: {
100109
name: h('.flex-row.g2.items-center', ['Status History', infoTooltip(environmentStatusHistoryLegendComponent())]),

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@
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 { SelectionFilterModel } from '../../../components/Filters/common/filters/SelectionFilterModel.js';
1718
import { RawTextFilterModel } from '../../../components/Filters/common/filters/RawTextFilterModel.js';
1819
import { debounce } from '../../../utilities/debounce.js';
20+
import { coloredEnvironmentStatusComponent } from '../ColoredEnvironmentStatusComponent.js';
21+
import { StatusAcronym } from '../../../domain/enums/statusAcronym.mjs';
1922

2023
/**
2124
* Environment overview page model
@@ -30,6 +33,13 @@ export class EnvironmentOverviewModel extends OverviewPageModel {
3033

3134
this._filteringModel = new FilteringModel({
3235
statusHistory: new RawTextFilterModel(),
36+
currentStatus: new SelectionFilterModel({
37+
availableOptions: Object.keys(StatusAcronym).map((status) => ({
38+
value: status,
39+
label: coloredEnvironmentStatusComponent(status),
40+
rawLabel: status,
41+
})),
42+
}),
3343
ids: new RawTextFilterModel(),
3444
});
3545

test/public/envs/overview.test.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,36 @@ module.exports = () => {
318318
await resetFilters(page);
319319

320320
await filterOnStatusHistory('.historyItems-filter input', 'D-E', ['KGIS12DS']);
321-
await resetFilters(page);
321+
await resetFilters(page);
322+
});
323+
324+
it('should successfully filter environments by their current status', async () => {
325+
/**
326+
* Checks that all the rows of the given table have a valid current status
327+
*
328+
* @param {string[]} authorizedCurrentStatuses the list of valid current statuses
329+
* @return {void}
330+
*/
331+
const checkTableCurrentStatuses = async (authorizedCurrentStatuses) => {
332+
const rows = await page.$$('tbody tr');
333+
for (const row of rows) {
334+
expect(await row.evaluate((rowItem) => {
335+
const rowId = rowItem.id;
336+
return document.querySelector(`#${rowId}-status-text`).innerText;
337+
})).to.be.oneOf(authorizedCurrentStatuses);
338+
}
339+
};
340+
341+
const currentStatusSelectorPrefix = '.status-filter #checkboxes-checkbox-';
342+
const getCurrentStatusCheckboxSelector = (statusName) => `${currentStatusSelectorPrefix}${statusName}`;
343+
344+
await page.$eval(getCurrentStatusCheckboxSelector("RUNNING"), (element) => element.click());
345+
await waitForTableLength(page, 2);
346+
await checkTableCurrentStatuses(["RUNNING"]);
347+
348+
await page.$eval(getCurrentStatusCheckboxSelector("DEPLOYED"), (element) => element.click());
349+
await waitForTableLength(page, 3);
350+
await checkTableCurrentStatuses(["RUNNING", "DEPLOYED"]);
322351
});
323352

324353
it('should successfully filter environments by their IDs', async () => {

0 commit comments

Comments
 (0)