import './helpers/mockRequestAtlassian'; import api from '../../index'; import { MOCK_CLOUD_ID, MOCK_ERROR_MESSAGE, MOCK_ERROR_TYPE, MOCK_GET_EVENT_SOURCE, MOCK_METRIC_DEF_ID, MOCK_METRIC_DEF_WITH_DERIVED_SOURCES, MOCK_METRIC_DEF_WITH_PAGINATED_SOURCES, MOCK_QUERY_ERROR, } from '../fixtures/mocks'; import { mockRequestGraph } from './helpers/requestMocks'; import { GRAPHQL_GATEWAY_SOURCE } from '../../helpers/constants'; const compassApp = api.compass.asApp(); // @ts-ignore const requestGraphSpy = jest.spyOn(compassApp.api, 'requestGraph'); describe('getMetricSources', () => { beforeEach(() => { jest.clearAllMocks(); }); test('transforms GqlErrors', async () => { mockRequestGraph(requestGraphSpy, [ { message: MOCK_ERROR_MESSAGE, extensions: { errorSource: GRAPHQL_GATEWAY_SOURCE, classification: MOCK_ERROR_TYPE, }, }, ]); const resp = await compassApp.getMetricSources( MOCK_CLOUD_ID, MOCK_METRIC_DEF_ID, ); expect(resp).toMatchSnapshot(); }); test('transform metricDefinition QueryErrors', async () => { mockRequestGraph(requestGraphSpy, [], { compass: { metricDefinition: MOCK_QUERY_ERROR, }, } as any); const resp = await compassApp.getMetricSources( MOCK_CLOUD_ID, MOCK_METRIC_DEF_ID, ); expect(resp).toMatchSnapshot(); }); test('transform successful metricDefinition result', async () => { mockRequestGraph(requestGraphSpy, [], { compass: { metricDefinition: MOCK_METRIC_DEF_WITH_PAGINATED_SOURCES, }, } as any); const resp = await compassApp.getMetricSources( MOCK_CLOUD_ID, MOCK_METRIC_DEF_ID, ); expect(resp.data.metricSources).toHaveLength(1); expect(resp).toMatchSnapshot(); }); test('can include derived metric sources', async () => { mockRequestGraph(requestGraphSpy, [], { compass: { metricDefinition: MOCK_METRIC_DEF_WITH_DERIVED_SOURCES, }, } as any); const resp = await compassApp.getMetricSources( MOCK_CLOUD_ID, MOCK_METRIC_DEF_ID, ); expect(resp.data.metricSources).toHaveLength(1); expect(resp.data.metricSources[0].derivedFrom).toEqual([ MOCK_GET_EVENT_SOURCE(), ]); }); test('can include paginated metric sources', async () => { mockRequestGraph(requestGraphSpy, [], { compass: { metricDefinition: MOCK_METRIC_DEF_WITH_PAGINATED_SOURCES, }, } as any); const resp = await compassApp.getMetricSources( MOCK_CLOUD_ID, MOCK_METRIC_DEF_ID, ); expect(requestGraphSpy.mock.calls[0][1]).toEqual({ cloudId: MOCK_CLOUD_ID, metricDefinitionId: MOCK_METRIC_DEF_ID, }); }); test('errors if component cannot be transformed', async () => { mockRequestGraph(requestGraphSpy, [], { invalid_response: 'hello world', } as any); const resp = await compassApp.getMetricSources( MOCK_CLOUD_ID, MOCK_METRIC_DEF_ID, ); expect(resp).toMatchSnapshot(); }); });