Skip to content

Commit 03fc0ac

Browse files
authored
Merge branch 'main' into fix/2361-blank-preview-panel-vscode-1.116
2 parents 436ad8f + eb3bba6 commit 03fc0ac

3 files changed

Lines changed: 39 additions & 8 deletions

File tree

calm-hub-ui/src/hub/components/diagram-section/DiagramSection.test.tsx

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@ import { render, screen } from '@testing-library/react';
22
import { MemoryRouter } from 'react-router-dom';
33
import userEvent from '@testing-library/user-event';
44
import { DiagramSection } from './DiagramSection.js';
5-
import { describe, it, expect, vi } from 'vitest';
5+
import { beforeEach, describe, it, expect, vi } from 'vitest';
66
import { Data } from '../../../model/calm.js';
77

8+
const calmServiceMock = {
9+
fetchDecoratorValues: vi.fn().mockResolvedValue([]),
10+
};
11+
812
vi.mock('react-router-dom', async () => {
913
const actual = await vi.importActual('react-router-dom');
1014
return {
@@ -23,7 +27,7 @@ vi.mock('../../../visualizer/components/drawer/Drawer.js', () => ({
2327

2428
vi.mock('../../../service/calm-service.js', () => ({
2529
CalmService: vi.fn().mockImplementation(() => ({
26-
fetchDecoratorValues: vi.fn().mockResolvedValue([]),
30+
fetchDecoratorValues: calmServiceMock.fetchDecoratorValues,
2731
})),
2832
}));
2933

@@ -44,6 +48,11 @@ const patternData: Data & { calmType: 'Patterns' } = {
4448
};
4549

4650
describe('DiagramSection', () => {
51+
beforeEach(() => {
52+
vi.clearAllMocks();
53+
calmServiceMock.fetchDecoratorValues.mockResolvedValue([]);
54+
});
55+
4756
describe('with architecture data', () => {
4857
it('renders title with namespace, id, and version', () => {
4958
render(
@@ -68,6 +77,23 @@ describe('DiagramSection', () => {
6877
expect(screen.getByTestId('drawer')).toBeInTheDocument();
6978
expect(screen.getByTestId('drawer')).toHaveTextContent('Drawer for test-arch');
7079
});
80+
81+
it('uses selected architecture id in deployment decorator target', async () => {
82+
render(
83+
<MemoryRouter>
84+
<DiagramSection data={architectureData} />
85+
</MemoryRouter>
86+
);
87+
88+
await screen.findByTestId('drawer');
89+
90+
expect(calmServiceMock.fetchDecoratorValues).toHaveBeenCalledWith(
91+
'arch-namespace',
92+
'/calm/namespaces/arch-namespace/architectures/test-arch/versions/1-0-0',
93+
'deployment'
94+
);
95+
});
96+
7197
});
7298

7399
describe('with pattern data', () => {

calm-hub-ui/src/hub/components/diagram-section/DiagramSection.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useState, useEffect, useMemo } from 'react';
22
import { useSearchParams } from 'react-router-dom';
33
import { IoConstructOutline, IoGridOutline, IoEyeOutline, IoCodeOutline, IoRocketOutline } from 'react-icons/io5';
4-
import { Data, isSlug } from '../../../model/calm.js';
4+
import { Data } from '../../../model/calm.js';
55
import { JsonRenderer } from '../json-renderer/JsonRenderer.js';
66
import { Drawer } from '../../../visualizer/components/drawer/Drawer.js';
77
import { SectionHeader } from '../section-header/SectionHeader.js';
@@ -41,9 +41,7 @@ export function DiagramSection({ data, onItemSelect, hasDetailsPanel }: DiagramS
4141
return;
4242
}
4343
const versionPath = data.version.replace(/\./g, '-');
44-
const target = isSlug(data.id)
45-
? `/calm/namespaces/${data.name}/${data.id}/versions/${versionPath}`
46-
: `/calm/namespaces/${data.name}/architectures/${data.id}/versions/${versionPath}`;
44+
const target = `/calm/namespaces/${data.name}/architectures/${data.id}/versions/${versionPath}`;
4745
calmService.fetchDecoratorValues(data.name, target, 'deployment').then((values) => setDecorators(values as DeploymentDecorator[]));
4846
}, [data, isArchitecture, calmService]);
4947

calm-hub-ui/src/hub/components/tree-navigation/TreeNavigation.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -816,8 +816,15 @@ export function TreeNavigation({ onDataLoad, onAdrLoad, onControlLoad, onInterfa
816816
}, [selectedNamespace, calmService, adrService]);
817817

818818
const handleVersionClick = useCallback((version: string, type: string) => {
819-
navigate(`${basePath}/${selectedNamespace}/${mapTypeInUIToTypeInUrl(type as TypeInUI)}/${selectedResourceID}/${version}`);
820-
}, [navigate, selectedNamespace, selectedResourceID]);
819+
const resourceIDForRoute = type === 'Architectures'
820+
? architectureSummaries
821+
.find((summary) => (summary.customId ?? summary.id.toString()) === selectedResourceID || summary.name === selectedResourceID)
822+
?.id
823+
?.toString() ?? selectedResourceID
824+
: selectedResourceID;
825+
826+
navigate(`${basePath}/${selectedNamespace}/${mapTypeInUIToTypeInUrl(type as TypeInUI)}/${resourceIDForRoute}/${version}`);
827+
}, [navigate, selectedNamespace, selectedResourceID, architectureSummaries]);
821828

822829
const getResourceIDs = (type: string): string[] => {
823830
const toId = (s: ResourceSummary) => s.customId ?? s.id.toString();

0 commit comments

Comments
 (0)