0
0
mirror of https://github.com/renovatebot/renovate.git synced 2024-12-22 13:38:32 +00:00
renovatebot_renovate/lib/modules/manager/gitlabci-include/extract.spec.ts

107 lines
3.4 KiB
TypeScript

import { codeBlock } from 'common-tags';
import { Fixtures } from '../../../../test/fixtures';
import { GlobalConfig } from '../../../config/global';
import { extractPackageFile } from '.';
const yamlFileMultiConfig = Fixtures.get('gitlab-ci.1.yaml');
const yamlFileSingleConfig = Fixtures.get('gitlab-ci.2.yaml');
const yamlWithEmptyIncludeConfig = Fixtures.get('gitlab-ci.3.yaml');
const yamlWithTriggerRef = Fixtures.get('gitlab-ci.4.yaml');
describe('modules/manager/gitlabci-include/extract', () => {
describe('extractPackageFile()', () => {
it('returns null for empty', () => {
expect(extractPackageFile('nothing here')).toBeNull();
});
it('returns null for include block without any actual includes', () => {
const res = extractPackageFile(yamlWithEmptyIncludeConfig);
expect(res).toBeNull();
});
it('extracts single include block', () => {
const res = extractPackageFile(yamlFileSingleConfig);
expect(res?.deps).toMatchSnapshot();
expect(res?.deps).toHaveLength(1);
});
it('extracts multiple include blocks', () => {
const res = extractPackageFile(yamlFileMultiConfig);
expect(res?.deps).toMatchSnapshot();
expect(res?.deps).toHaveLength(3);
});
it('extracts multiple embedded include blocks', () => {
const res = extractPackageFile(yamlWithTriggerRef);
expect(res?.deps).toHaveLength(2);
expect(res?.deps).toMatchObject([
{
currentValue: 'master',
datasource: 'gitlab-tags',
depName: 'mikebryant/include-source-example',
},
{
currentValue: '1.0.0',
datasource: 'gitlab-tags',
depName: 'mikebryant/include-source-example',
},
]);
});
it('ignores includes without project and file keys', () => {
const includeWithoutProjectRef = `include:
- 'https://gitlab.com/mikebryant/include-source-example.yml'
- remote: 'https://gitlab.com/mikebryant/include-source-example.yml'
- local: mikebryant/include-source-example`;
const res = extractPackageFile(includeWithoutProjectRef);
expect(res).toBeNull();
});
it('normalizes configured endpoints', () => {
const endpoints = [
'http://gitlab.test/api/v4',
'http://gitlab.test/api/v4/',
];
for (const endpoint of endpoints) {
GlobalConfig.set({ platform: 'gitlab', endpoint });
const res = extractPackageFile(yamlFileMultiConfig);
expect(res?.deps[0].registryUrls).toEqual(['http://gitlab.test']);
}
});
it('supports multi-document files', () => {
const multiDocFile = codeBlock`
other:
content: to be ignored
---
include:
- project: mikebryant/include-source-example
ref: 1.0.0
---
include:
- project: mikebryant/include-source-example2
ref: 2.0.0
---
more:
content: to be ignored
`;
const res = extractPackageFile(multiDocFile);
expect(res).toMatchObject({
deps: [
{
currentValue: '1.0.0',
datasource: 'gitlab-tags',
depName: 'mikebryant/include-source-example',
},
{
currentValue: '2.0.0',
datasource: 'gitlab-tags',
depName: 'mikebryant/include-source-example2',
},
],
});
});
});
});