Skip to content

Commit 9cede95

Browse files
committed
CONSOLE-4718: update Administrator list pages to use ResourceDataView
1 parent f16616f commit 9cede95

File tree

19 files changed

+1527
-881
lines changed

19 files changed

+1527
-881
lines changed

frontend/packages/console-app/src/components/data-view/ResourceDataView.tsx

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,25 @@ export type ResourceDataViewProps<TData, TCustomRowData, TFilters> = {
4949
mock?: boolean;
5050
};
5151

52+
export const BodyLoading: React.FCC<{ columns: number }> = ({ columns }) => {
53+
return <SkeletonTableBody rowsCount={5} columnsCount={columns} />;
54+
};
55+
56+
export const BodyEmpty: React.FCC<{ label: string; colSpan: number }> = ({ label, colSpan }) => {
57+
const { t } = useTranslation();
58+
return (
59+
<Tbody>
60+
<Tr>
61+
<Td colSpan={colSpan}>
62+
<Bullseye>
63+
{label ? t('public~No {{label}} found', { label }) : t('public~None found')}
64+
</Bullseye>
65+
</Td>
66+
</Tr>
67+
</Tbody>
68+
);
69+
};
70+
5271
/**
5372
* Console DataView component based on PatternFly DataView.
5473
*/
@@ -100,24 +119,13 @@ export const ResourceDataView = <
100119
customRowData,
101120
});
102121

103-
const bodyLoading = React.useMemo(
104-
() => <SkeletonTableBody rowsCount={5} columnsCount={dataViewColumns.length} />,
105-
[dataViewColumns.length],
106-
);
122+
const bodyLoading = React.useMemo(() => <BodyLoading columns={dataViewColumns.length} />, [
123+
dataViewColumns.length,
124+
]);
107125

108126
const bodyEmpty = React.useMemo(
109-
() => (
110-
<Tbody>
111-
<Tr>
112-
<Td colSpan={dataViewColumns.length}>
113-
<Bullseye>
114-
{label ? t('public~No {{label}} found', { label }) : t('public~None found')}
115-
</Bullseye>
116-
</Td>
117-
</Tr>
118-
</Tbody>
119-
),
120-
[t, dataViewColumns.length, label],
127+
() => <BodyEmpty label={label} colSpan={dataViewColumns.length} />,
128+
[dataViewColumns.length, label],
121129
);
122130

123131
const activeState = React.useMemo(() => {

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/alertmanager.cy.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ describe('Alertmanager', () => {
7474
cy.byTestID('webhook-url').type(webhookURL);
7575
cy.byTestID('label-0').type(label);
7676
alertmanager.save();
77-
alertmanager.validateCreation(receiverName, receiverType, label);
78-
listPage.rows.clickKebabAction(receiverName, 'Delete Receiver');
77+
alertmanager.validateCreation(receiverName, 'integration-types', 'routing-labels');
78+
listPage.dvRows.clickKebabAction(receiverName, 'Delete Receiver');
7979
warningModal.confirm('AlertmanagerDeleteReceiverConfirmation');
8080
warningModal.shouldBeClosed('AlertmanagerDeleteReceiverConfirmation');
81-
listPage.rows.shouldNotExist(receiverName);
81+
listPage.dvRows.shouldNotExist(receiverName);
8282
});
8383

8484
it('prevents deletion and form edit of a receiver with sub-route', () => {
@@ -100,8 +100,7 @@ receivers:
100100
yamlEditor.clickSaveCreateButton();
101101
cy.byTestID('alert-success').should('exist');
102102
detailsPage.selectTab('Details');
103-
cy.get('[data-test-rows="resource-row"]')
104-
.contains('team-X-pager')
103+
cy.get('[data-test="data-view-cell-team-X-pager-name"]')
105104
.parents('tr')
106105
.within(() => {
107106
cy.get('[data-test-id="kebab-button"]').click();
@@ -180,7 +179,7 @@ route:
180179
yamlEditor.clickSaveCreateButton();
181180
cy.get('.yaml-editor__buttons .pf-m-success').should('exist');
182181
detailsPage.selectTab('Details');
183-
listPage.rows.shouldExist(receiverName);
182+
listPage.dvRows.shouldExist(receiverName);
184183
alertmanager.visitEditPage(receiverName);
185184
cy.byTestID('label-0').should('have.value', matcher1);
186185
cy.byTestID('label-1').should('have.value', matcher2);

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/email.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ describe('Alertmanager: Email Receiver Form', () => {
4949
alertmanager.save();
5050

5151
cy.log('verify Email Receiver was created correctly');
52-
alertmanager.validateCreation(receiverName, receiverType, label);
52+
alertmanager.validateCreation(receiverName);
5353
alertmanager.visitYAMLPage();
5454
yamlEditor.getEditorContent().then((content) => {
5555
const configs = getGlobalsAndReceiverConfig(receiverName, configName, content);

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/pagerduty.cy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ describe('Alertmanager: PagerDuty Receiver Form', () => {
5050
alertmanager.save();
5151

5252
cy.log('verify PagerDuty Receiver was created correctly');
53-
alertmanager.validateCreation(receiverName, receiverType, label);
53+
alertmanager.validateCreation(receiverName);
5454

5555
cy.log('update pagerduty_url');
56-
listPage.rows.clickKebabAction(receiverName, 'Edit Receiver');
56+
listPage.dvRows.clickKebabAction(receiverName, 'Edit Receiver');
5757
// Save as default checkbox disabled when url equals global url
5858
cy.byTestID('save-as-default').should('be.disabled');
5959
// changing url enables Save as default checkbox, should save pagerduty_url with Receiver

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/slack.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe('Alertmanager: Slack Receiver Form', () => {
5252
alertmanager.save();
5353

5454
cy.log('verify Slack Receiver was created correctly');
55-
alertmanager.validateCreation(receiverName, receiverType, label);
55+
alertmanager.validateCreation(receiverName);
5656
alertmanager.visitYAMLPage();
5757
yamlEditor.getEditorContent().then((content) => {
5858
const configs = getGlobalsAndReceiverConfig(receiverName, configName, content);

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/webhook.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('Alertmanager: Webhook Receiver Form', () => {
3434
alertmanager.save();
3535

3636
cy.log('verify Webhook Receiver was created correctly');
37-
alertmanager.validateCreation(receiverName, receiverType, label);
37+
alertmanager.validateCreation(receiverName);
3838
alertmanager.visitYAMLPage();
3939
yamlEditor.getEditorContent().then((content) => {
4040
const configs = getGlobalsAndReceiverConfig(receiverName, configName, content);

frontend/packages/integration-tests-cypress/tests/crud/quotas.cy.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ const deleteClusterExamples = () => {
7272
cy.log('delete ClusterResourceQuota instance');
7373
projectDropdown.selectProject(allProjectsDropdownLabel);
7474
nav.sidenav.clickNavLink(['Administration', 'ResourceQuotas']);
75-
listPage.rows.shouldBeLoaded();
76-
listPage.filter.byName(clusterQuotaName);
77-
listPage.rows.clickRowByName(clusterQuotaName);
75+
listPage.dvRows.shouldBeLoaded();
76+
listPage.dvFilter.byName(clusterQuotaName);
77+
listPage.dvRows.clickRowByName(clusterQuotaName);
7878
detailsPage.isLoaded();
7979
detailsPage.clickPageActionFromDropdown('Delete ClusterResourceQuota');
8080
modal.shouldBeOpened();
@@ -103,37 +103,37 @@ describe('Quotas', () => {
103103
it(`'All Projects' shows ResourceQuotas`, () => {
104104
nav.sidenav.clickNavLink(['Administration', 'ResourceQuotas']);
105105
projectDropdown.selectProject(allProjectsDropdownLabel);
106-
listPage.rows.shouldBeLoaded();
107-
listPage.filter.byName(quotaName);
108-
listPage.rows.shouldExist(quotaName);
106+
listPage.dvRows.shouldBeLoaded();
107+
listPage.dvFilter.byName(quotaName);
108+
listPage.dvRows.shouldExist(quotaName);
109109
});
110110

111111
it(`'All Projects' shows ClusterResourceQuotas`, () => {
112112
nav.sidenav.clickNavLink(['Administration', 'ResourceQuotas']);
113113
projectDropdown.selectProject(allProjectsDropdownLabel);
114-
listPage.rows.shouldBeLoaded();
115-
listPage.filter.byName(clusterQuotaName);
116-
listPage.rows.shouldExist(clusterQuotaName);
117-
listPage.rows.clickRowByName(clusterQuotaName);
114+
listPage.dvRows.shouldBeLoaded();
115+
listPage.dvFilter.byName(clusterQuotaName);
116+
listPage.dvRows.shouldExist(clusterQuotaName);
117+
listPage.dvRows.clickRowByName(clusterQuotaName);
118118
detailsPage.isLoaded();
119119
detailsPage.breadcrumb(0).contains('ClusterResourceQuota');
120120
});
121121

122122
it(`Test namespace shows ResourceQuotas`, () => {
123123
nav.sidenav.clickNavLink(['Administration', 'ResourceQuotas']);
124124
projectDropdown.selectProject(testName);
125-
listPage.rows.shouldBeLoaded();
126-
listPage.filter.byName(quotaName);
127-
listPage.rows.shouldExist(quotaName);
125+
listPage.dvRows.shouldBeLoaded();
126+
listPage.dvFilter.byName(quotaName);
127+
listPage.dvRows.shouldExist(quotaName);
128128
});
129129

130130
it(`Test namespace shows AppliedClusterResourceQuotas`, () => {
131131
nav.sidenav.clickNavLink(['Administration', 'ResourceQuotas']);
132132
projectDropdown.selectProject(testName);
133-
listPage.rows.shouldBeLoaded();
134-
listPage.filter.byName(clusterQuotaName);
135-
listPage.rows.shouldExist(clusterQuotaName);
136-
listPage.rows.clickRowByName(clusterQuotaName);
133+
listPage.dvRows.shouldBeLoaded();
134+
listPage.dvFilter.byName(clusterQuotaName);
135+
listPage.dvRows.shouldExist(clusterQuotaName);
136+
listPage.dvRows.clickRowByName(clusterQuotaName);
137137
detailsPage.isLoaded();
138138
detailsPage.breadcrumb(0).contains('AppliedClusterResourceQuota');
139139
});

frontend/packages/integration-tests-cypress/tests/crud/resource-crud.cy.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,10 @@ describe('Kubernetes resource CRUD operations', () => {
109109
const dataViewResources = new Set([
110110
'HorizontalPodAutoscaler',
111111
'Job',
112+
'LimitRange',
112113
'Pod',
113114
'ReplicaSet',
115+
'ResourceQuota',
114116
'ReplicationController',
115117
'StatefulSet',
116118
]);

frontend/packages/integration-tests-cypress/views/alertmanager.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,11 @@ export const alertmanager = {
7070
),
7171
save: () => cy.byTestID('save-changes').should('be.enabled').click(),
7272
showAdvancedConfiguration: () => cy.byTestID('advanced-configuration').find('button').click(),
73-
validateCreation: (receiverName: string, type: string, label: string) => {
74-
cy.byLegacyTestID('item-filter').clear();
75-
cy.byLegacyTestID('item-filter').type(receiverName);
76-
listPage.rows.shouldExist(receiverName);
77-
listPage.rows.shouldExist(type);
78-
listPage.rows.shouldExist(label);
73+
validateCreation: (receiverName: string, typeCellName: string, labelCellName: string) => {
74+
listPage.dvFilter.byName(receiverName);
75+
listPage.dvRows.shouldExist(receiverName);
76+
listPage.dvRows.shouldExist(receiverName, typeCellName);
77+
listPage.dvRows.shouldExist(receiverName, labelCellName);
7978
},
8079
visitAlertmanagerPage: () => {
8180
cy.visit('/settings/cluster/alertmanagerconfig');

frontend/packages/integration-tests-cypress/views/list-page.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,8 @@ export const listPage = {
148148
cy.byTestID('popover-status-button').click();
149149
});
150150
},
151-
shouldExist: (resourceName: string) => {
152-
cy.get(`[data-test="data-view-cell-${resourceName}-name"]`)
153-
.contains(resourceName)
154-
.should('exist');
151+
shouldExist: (resourceName: string, cellName: string = 'name') => {
152+
cy.get(`[data-test="data-view-cell-${resourceName}-${cellName}"]`).should('exist');
155153
},
156154
shouldNotExist: (resourceName: string) => {
157155
cy.get(`[data-test="data-view-cell-${resourceName}-name"]`).should('not.exist');

0 commit comments

Comments
 (0)