Skip to content

Commit 77c76d8

Browse files
Add failover version for active-active domains (#1003)
Add a component that shows the failover version(s) for an active-active domain
1 parent 8a089bf commit 77c76d8

File tree

4 files changed

+75
-3
lines changed

4 files changed

+75
-3
lines changed

src/views/domain-page/config/domain-page-metadata-extended-table.config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createElement } from 'react';
22

33
import DomainPageMetadataClusters from '../domain-page-metadata-clusters/domain-page-metadata-clusters';
44
import DomainPageMetadataDescription from '../domain-page-metadata-description/domain-page-metadata-description';
5+
import DomainPageMetadataFailoverVersion from '../domain-page-metadata-failover-version/domain-page-metadata-failover-version';
56
import DomainPageMetadataMode from '../domain-page-metadata-mode/domain-page-metadata-mode';
67
import { type MetadataItem } from '../domain-page-metadata-table/domain-page-metadata-table.types';
78
import DomainPageMetadataViewJson from '../domain-page-metadata-view-json/domain-page-metadata-view-json';
@@ -53,7 +54,8 @@ const domainPageMetadataExtendedTableConfig = [
5354
label: 'Failover version',
5455
description: 'The failover version of the domain',
5556
kind: 'simple',
56-
getValue: ({ domainDescription }) => domainDescription.failoverVersion,
57+
getValue: ({ domainDescription }) =>
58+
createElement(DomainPageMetadataFailoverVersion, domainDescription),
5759
},
5860
{
5961
key: 'describeDomainJson',

src/views/domain-page/config/domain-page-metadata-table.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { ListTableItem } from '@/components/list-table/list-table.types';
22

33
import DomainPageMetadataClusters from '../domain-page-metadata-clusters/domain-page-metadata-clusters';
4+
import DomainPageMetadataFailoverVersion from '../domain-page-metadata-failover-version/domain-page-metadata-failover-version';
45
import DomainPageMetadataMode from '../domain-page-metadata-mode/domain-page-metadata-mode';
56
import { type DomainDescription } from '../domain-page.types';
67

@@ -29,8 +30,7 @@ const domainPageMetadataTableConfig: Array<ListTableItem<DomainDescription>> = [
2930
{
3031
key: 'failoverVersion',
3132
label: 'Failover version',
32-
renderValue: (domainDescription: DomainDescription) =>
33-
domainDescription.failoverVersion,
33+
renderValue: DomainPageMetadataFailoverVersion,
3434
},
3535
];
3636

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { render, screen } from '@/test-utils/rtl';
2+
3+
import { type Props as SublistTableProps } from '@/components/list-table-nested/sublist-table/sublist-table.types';
4+
import { mockActiveActiveDomain } from '@/views/shared/active-active/__fixtures__/active-active-domain';
5+
6+
import { mockDomainDescription } from '../../__fixtures__/domain-description';
7+
import DomainPageMetadataFailoverVersion from '../domain-page-metadata-failover-version';
8+
9+
jest.mock('@/components/list-table-nested/sublist-table/sublist-table', () =>
10+
jest.fn(({ items }: SublistTableProps) => (
11+
<div data-testid="mock-sublist-table">{JSON.stringify(items)}</div>
12+
))
13+
);
14+
15+
jest.mock('@/views/shared/active-active/helpers/is-active-active-domain');
16+
17+
describe(DomainPageMetadataFailoverVersion.name, () => {
18+
beforeEach(() => {
19+
jest.clearAllMocks();
20+
});
21+
22+
it('renders failover version as text for non-active-active domains', () => {
23+
render(<DomainPageMetadataFailoverVersion {...mockDomainDescription} />);
24+
25+
expect(screen.getByText('123456')).toBeInTheDocument();
26+
expect(screen.queryByTestId('mock-sublist-table')).not.toBeInTheDocument();
27+
});
28+
29+
it('renders SublistTable for active-active domains', () => {
30+
render(<DomainPageMetadataFailoverVersion {...mockActiveActiveDomain} />);
31+
32+
const sublistTable = screen.getByTestId('mock-sublist-table');
33+
expect(sublistTable).toBeInTheDocument();
34+
expect(sublistTable).toHaveTextContent(
35+
/{"key":"cluster0","label":"cluster0","value":"0"}/
36+
);
37+
expect(sublistTable).toHaveTextContent(
38+
/{"key":"cluster1","label":"cluster1","value":"2"}/
39+
);
40+
});
41+
});
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import SublistTable from '@/components/list-table-nested/sublist-table/sublist-table';
2+
import isActiveActiveDomain from '@/views/shared/active-active/helpers/is-active-active-domain';
3+
4+
import { type DomainDescription } from '../domain-page.types';
5+
6+
export default function DomainPageMetadataFailoverVersion(
7+
domainDescription: DomainDescription
8+
) {
9+
if (isActiveActiveDomain(domainDescription)) {
10+
return (
11+
<SublistTable
12+
items={Object.values(domainDescription.activeClusters.regionToCluster)
13+
.sort(
14+
(
15+
{ activeClusterName: clusterA },
16+
{ activeClusterName: clusterB }
17+
) => (clusterA > clusterB ? 1 : -1)
18+
)
19+
.map(({ activeClusterName, failoverVersion }) => ({
20+
key: activeClusterName,
21+
label: activeClusterName,
22+
value: failoverVersion,
23+
}))}
24+
/>
25+
);
26+
}
27+
28+
return domainDescription.failoverVersion;
29+
}

0 commit comments

Comments
 (0)