import MockAdapter from 'axios-mock-adapter'; import Api from '~/api'; import { mockCiConfigPath, mockCiYml, mockDefaultBranch, mockLintResponse, mockProjectPath, } from '../mock_data'; import httpStatus from '~/lib/utils/http_status'; import axios from '~/lib/utils/axios_utils'; import { resolvers } from '~/pipeline_editor/graphql/resolvers'; jest.mock('~/api', () => { return { getRawFile: jest.fn(), }; }); describe('~/pipeline_editor/graphql/resolvers', () => { describe('Query', () => { describe('blobContent', () => { beforeEach(() => { Api.getRawFile.mockResolvedValue({ data: mockCiYml, }); }); afterEach(() => { Api.getRawFile.mockReset(); }); it('resolves lint data with type names', async () => { const result = resolvers.Query.blobContent(null, { projectPath: mockProjectPath, path: mockCiConfigPath, ref: mockDefaultBranch, }); expect(Api.getRawFile).toHaveBeenCalledWith(mockProjectPath, mockCiConfigPath, { ref: mockDefaultBranch, }); // eslint-disable-next-line no-underscore-dangle expect(result.__typename).toBe('BlobContent'); await expect(result.rawData).resolves.toBe(mockCiYml); }); }); }); describe('Mutation', () => { describe('lintCI', () => { let mock; let result; const endpoint = '/ci/lint'; beforeEach(async () => { mock = new MockAdapter(axios); mock.onPost(endpoint).reply(httpStatus.OK, mockLintResponse); result = await resolvers.Mutation.lintCI(null, { endpoint, content: 'content', dry_run: true, }); }); afterEach(() => { mock.restore(); }); /* eslint-disable no-underscore-dangle */ it('lint data has correct type names', async () => { expect(result.__typename).toBe('CiLintContent'); expect(result.jobs[0].__typename).toBe('CiLintJob'); expect(result.jobs[1].__typename).toBe('CiLintJob'); expect(result.jobs[1].only.__typename).toBe('CiLintJobOnlyPolicy'); }); /* eslint-enable no-underscore-dangle */ it('lint data is as expected', () => { expect(result).toMatchSnapshot(); }); }); }); });