Skip to content

Commit 9ec55c2

Browse files
fix: providers mapping bug fix
Co-authored-by: Łukasz Goral <lukasz.goral@sap.com>
1 parent 7ace7a1 commit 9ec55c2

File tree

2 files changed

+24
-47
lines changed

2 files changed

+24
-47
lines changed

src/components/Graphs/graphUtils.spec.ts

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, it, expect, vi } from 'vitest';
2-
import { getStatusCondition, resolveProviderType, generateColorMap, buildTreeData } from './graphUtils';
2+
import { getStatusCondition, resolveProviderTypeFromApiVersion, generateColorMap, buildTreeData } from './graphUtils';
33
import { ProviderConfigs, ManagedResourceGroup, ManagedResourceItem } from '../../lib/shared/types';
44

55
describe('getStatusCondition', () => {
@@ -26,41 +26,24 @@ describe('getStatusCondition', () => {
2626
});
2727
});
2828

29-
describe('resolveProviderType', () => {
30-
it('returns correct providerType if found', () => {
31-
const configs: ProviderConfigs[] = [
32-
{
33-
provider: 'provider-a',
34-
items: [
35-
{ metadata: { name: 'foo' }, apiVersion: 'btp/v1' },
36-
{ metadata: { name: 'bar' }, apiVersion: 'cloudfoundry/v1' },
37-
],
38-
},
39-
{
40-
provider: 'provider-b',
41-
items: [{ metadata: { name: 'baz' }, apiVersion: 'gardener/v1' }],
42-
},
43-
] as any;
44-
expect(resolveProviderType('foo', configs)).toBe('provider-btp');
45-
expect(resolveProviderType('bar', configs)).toBe('provider-cf');
46-
expect(resolveProviderType('baz', configs)).toBe('provider-gardener');
29+
describe('resolveProviderTypeFromApiVersion', () => {
30+
it('extracts domain from apiVersion and removes "account." prefix', () => {
31+
expect(resolveProviderTypeFromApiVersion('account.btp.sap.crossplane.io/v1alpha1')).toBe('btp.sap.crossplane.io');
4732
});
4833

49-
it('returns apiVersion or configName if no match for known providers', () => {
50-
const configs: ProviderConfigs[] = [
51-
{
52-
provider: 'provider-a',
53-
items: [{ metadata: { name: 'other' }, apiVersion: 'custom/v1' }],
54-
},
55-
] as any;
56-
expect(resolveProviderType('other', configs)).toBe('custom/v1');
34+
it('extracts domain from apiVersion without "account." prefix', () => {
35+
expect(resolveProviderTypeFromApiVersion('cloudfoundry.crossplane.io/v1alpha1')).toBe('cloudfoundry.crossplane.io');
36+
expect(resolveProviderTypeFromApiVersion('gardener.crossplane.io/v1beta1')).toBe('gardener.crossplane.io');
37+
expect(resolveProviderTypeFromApiVersion('kubernetes.crossplane.io/v1')).toBe('kubernetes.crossplane.io');
38+
});
39+
40+
it('returns "unknown" for empty apiVersion', () => {
41+
expect(resolveProviderTypeFromApiVersion('')).toBe('unknown');
5742
});
5843

59-
it('returns configName if not found', () => {
60-
const configs: ProviderConfigs[] = [
61-
{ provider: 'provider-a', items: [{ metadata: { name: 'foo' }, apiVersion: 'btp/v1' }] },
62-
] as any;
63-
expect(resolveProviderType('notfound', configs)).toBe('notfound');
44+
it('handles apiVersion without version part', () => {
45+
expect(resolveProviderTypeFromApiVersion('btp.sap.crossplane.io')).toBe('btp.sap.crossplane.io');
46+
expect(resolveProviderTypeFromApiVersion('account.btp.sap.crossplane.io')).toBe('btp.sap.crossplane.io');
6447
});
6548
});
6649

src/components/Graphs/graphUtils.ts

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,15 @@ export const getStatusCondition = (conditions?: Condition[]): Condition | undefi
88
return conditions.find((c) => c.type === 'Ready' || c.type === 'Healthy');
99
};
1010

11-
export const resolveProviderType = (configName: string, providerConfigsList: ProviderConfigs[]): string => {
12-
for (const configList of providerConfigsList || []) {
13-
const match = configList.items?.find((item) => item.metadata?.name === configName);
14-
15-
if (match) {
16-
const apiVersion = match.apiVersion?.toLowerCase() || '';
17-
if (apiVersion.includes('btp')) return 'provider-btp';
18-
if (apiVersion.includes('cloudfoundry')) return 'provider-cf';
19-
if (apiVersion.includes('gardener')) return 'provider-gardener';
20-
if (apiVersion.includes('kubernetes')) return 'provider-kubernetes';
21-
return apiVersion || configName;
22-
}
23-
}
11+
export const resolveProviderTypeFromApiVersion = (apiVersion: string): string => {
12+
// Extract domain from apiVersion (e.g. "account.btp.sap.crossplane.io/v1alpha1" -> "account.btp.sap.crossplane.io")
13+
const domain = apiVersion?.split('/')[0] || '';
14+
15+
// Remove "account" to normalize provider names
16+
// e.g "account.btp.sap.crossplane.io" -> "btp.sap.crossplane.io"
17+
const normalizedDomain = domain.replace(/^account\./, '');
2418

25-
return configName;
19+
return normalizedDomain || 'unknown';
2620
};
2721

2822
export const generateColorMap = (items: NodeData[], colorBy: string): Record<string, string> => {
@@ -98,7 +92,7 @@ export function buildTreeData(
9892
const id = `${name}-${apiVersion}`;
9993
const kind = item?.kind;
10094
const providerConfigName = item?.spec?.providerConfigRef?.name ?? 'unknown';
101-
const providerType = resolveProviderType(providerConfigName, providerConfigsList);
95+
const providerType = resolveProviderTypeFromApiVersion(apiVersion);
10296
const statusCond = getStatusCondition(item?.status?.conditions);
10397
const status = statusCond?.status === 'True' ? 'OK' : 'ERROR';
10498

0 commit comments

Comments
 (0)