fix tests, types and cleanup

This commit is contained in:
Moustafa Baiou
2020-10-20 00:22:44 -04:00
committed by moustafab
parent e2085293a6
commit beaa0a82db
5 changed files with 62 additions and 12 deletions
@@ -66,6 +66,7 @@ describe('KubernetesClientProvider', () => {
authProvider: 'serviceAccount',
},
new Set(['pods', 'services']),
'',
);
expect(result).toStrictEqual({
@@ -129,6 +130,7 @@ describe('KubernetesClientProvider', () => {
authProvider: 'serviceAccount',
},
new Set(['pods', 'services']),
'',
);
expect(result).toStrictEqual({
@@ -178,6 +180,7 @@ describe('KubernetesClientProvider', () => {
authProvider: 'serviceAccount',
},
new Set<any>(['foo']),
'',
),
).toThrow('unrecognised type=foo');
@@ -254,4 +257,46 @@ describe('KubernetesClientProvider', () => {
},
);
});
it('should always add a labelSelector query', async () => {
clientMock.listPodForAllNamespaces.mockResolvedValueOnce({
body: {
items: [
{
metadata: {
name: 'pod-name',
},
},
],
},
});
clientMock.listServiceForAllNamespaces.mockResolvedValueOnce({
body: {
items: [
{
metadata: {
name: 'service-name',
},
},
],
},
});
await sut.fetchObjectsForService(
'some-service',
{
name: 'cluster1',
url: 'http://localhost:9999',
serviceAccountToken: 'token',
authProvider: 'serviceAccount',
},
new Set(['pods', 'services']),
'',
);
const mockCall = clientMock.listPodForAllNamespaces.mock.calls[0];
const actualSelector = mockCall[mockCall.length - 1];
const expectedSelector = 'backstage.io/kubernetes-id=some-service';
expect(actualSelector).toBe(expectedSelector);
});
});
@@ -116,7 +116,9 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher {
serviceId,
clusterDetails,
type,
labelSelector,
labelSelector.length !== 0
? labelSelector
: `backstage.io/kubernetes-id=${serviceId}`,
).catch(captureKubernetesErrorsRethrowOthers);
});
@@ -20,7 +20,7 @@ import { ClusterDetails } from '..';
const TEST_SERVICE_ID = 'my-service';
const fetchObjectsByServiceId = jest.fn();
const fetchObjectsForService = jest.fn();
const getClustersByServiceId = jest.fn();
@@ -64,7 +64,7 @@ const mockFetch = (mock: jest.Mock) => {
);
};
describe('handleGetKubernetesObjectsByServiceId', () => {
describe('handleGetKubernetesObjectsForService', () => {
beforeEach(() => {
jest.resetAllMocks();
});
@@ -79,22 +79,23 @@ describe('handleGetKubernetesObjectsByServiceId', () => {
]),
);
mockFetch(fetchObjectsByServiceId);
mockFetch(fetchObjectsForService);
const result = await handleGetKubernetesObjectsForService(
TEST_SERVICE_ID,
{
fetchObjectsForService: fetchObjectsByServiceId,
fetchObjectsForService: fetchObjectsForService,
},
{
getClustersByServiceId,
},
getVoidLogger(),
{},
'',
);
expect(getClustersByServiceId.mock.calls.length).toBe(1);
expect(fetchObjectsByServiceId.mock.calls.length).toBe(1);
expect(fetchObjectsForService.mock.calls.length).toBe(1);
expect(result).toStrictEqual({
items: [
{
@@ -153,12 +154,12 @@ describe('handleGetKubernetesObjectsByServiceId', () => {
]),
);
mockFetch(fetchObjectsByServiceId);
mockFetch(fetchObjectsForService);
const result = await handleGetKubernetesObjectsForService(
TEST_SERVICE_ID,
{
fetchObjectsForService: fetchObjectsByServiceId,
fetchObjectsForService: fetchObjectsForService,
},
{
getClustersByServiceId,
@@ -169,10 +170,11 @@ describe('handleGetKubernetesObjectsByServiceId', () => {
google: 'google_token_123',
},
},
'',
);
expect(getClustersByServiceId.mock.calls.length).toBe(1);
expect(fetchObjectsByServiceId.mock.calls.length).toBe(2);
expect(fetchObjectsForService.mock.calls.length).toBe(2);
expect(result).toStrictEqual({
items: [
{
@@ -80,7 +80,7 @@ export const makeRouter = (
serviceLocator,
logger,
requestBody,
labelSelector,
labelSelector ? labelSelector.toString() : '',
);
res.send(response);
} catch (e) {
@@ -54,8 +54,9 @@ export class KubernetesBackendClient implements KubernetesApi {
private parseLabelSelector(params: V1LabelSelector): string {
// TODO: figure out how to convert the selector to the full query param from the yaml
// (as shown here https://github.com/kubernetes/apimachinery/blob/master/pkg/labels/selector.go)
return Object.keys(params.matchLabels)
.map(key => `${key}=${params[key]}`)
const { matchLabels } = params;
return Object.keys(matchLabels)
.map(key => `${key}=${matchLabels[key]}`)
.join(',');
}