From 37d9b9140a7e29725a4982d3f1f52715984b84c5 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Wed, 18 Jan 2023 13:17:09 -0500 Subject: [PATCH] add unit test for catalogClusterLocator Signed-off-by: Ruben Vallejo --- .../CatalogClusterLocator.test.ts | 67 +++++++++++++------ 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts b/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts index 2a2432f858..81ee863cb7 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/CatalogClusterLocator.test.ts @@ -18,39 +18,66 @@ import '@backstage/backend-common'; import { CatalogClusterLocator } from './CatalogClusterLocator'; import { CatalogApi } from '@backstage/catalog-client'; +const mockCatalogApi = { + getEntityByRef: jest.fn(), + getEntities: async () => ({ + items: [ + { + apiVersion: 'version', + kind: 'User', + metadata: { + annotations: { + 'kubernetes.io/api-server': 'https://apiserver.com', + 'kubernetes.io/api-server-certificate-authority': 'caData', + 'kubernetes.io/auth-provider': 'aws', + 'kubernetes.io/oidc-token-provider': 'google', + 'kubernetes.io/skip-metrics-lookup': 'true', + 'kubernetes.io/skip-tls-verify': 'true', + 'kubernetes.io/dashboard-url': 'my-url', + 'kubernetes.io/dashboard-app': 'my-app', + }, + name: 'owned', + namespace: 'default', + }, + }, + ], + }), +} as unknown as CatalogApi; + describe('CatalogClusterLocator', () => { - it('empty clusters returns empty cluster details', async () => { - const mockCatalogApi = { + it('returns empty cluster details when the cluster is empty', async () => { + const emptyMockCatalogApi = { getEntityByRef: jest.fn(), getEntities: async () => ({ - items: [ - { - apiVersion: 'version', - kind: 'User', - metadata: { - annotations: { - 'kubernetes.io/api-server': 'https://apiserver.com', - 'kubernetes.io/api-server-certificate-authority': 'caData', - 'kubernetes.io/auth-provider': 'aws', - }, - name: 'owned', - namespace: 'default', - }, - }, - ], + items: [], }), } as Partial as CatalogApi; - const sut = CatalogClusterLocator.fromConfig(mockCatalogApi); + const clusterSupplier = + CatalogClusterLocator.fromConfig(emptyMockCatalogApi); - const result = await sut.getClusters(); + const result = await clusterSupplier.getClusters(); + + expect(result).toHaveLength(0); + expect(result).toStrictEqual([]); + }); + + it('returns the cluster details provided by annotations', async () => { + const clusterSupplier = CatalogClusterLocator.fromConfig(mockCatalogApi); + + const result = await clusterSupplier.getClusters(); expect(result).toHaveLength(1); - expect(result[0]).toMatchObject({ + expect(result[0]).toStrictEqual({ name: 'owned', url: 'https://apiserver.com', caData: 'caData', authProvider: 'aws', + oidcTokenProvider: 'google', + skipMetricsLookup: true, + skipTLSVerify: true, + dashboardUrl: 'my-url', + dashboardApp: 'my-app', }); }); });