renovate/lib/modules/manager/bazel/rules/index.spec.ts

446 lines
12 KiB
TypeScript

import { parseArchiveUrl } from './http';
import { extractDepsFromFragmentData } from '.';
describe('modules/manager/bazel/rules/index', () => {
it('parses archiveUrl', () => {
expect(parseArchiveUrl('')).toBeNull();
expect(parseArchiveUrl(null)).toBeNull();
expect(parseArchiveUrl(null)).toBeNull();
expect(parseArchiveUrl('https://example.com/')).toBeNull();
expect(parseArchiveUrl('https://github.com/foo/bar')).toBeNull();
// Archive of a commit.
expect(
parseArchiveUrl(
'https://github.com/foo/bar/archive/abcdef0123abcdef0123abcdef0123abcdef0123.tar.gz',
),
).toEqual({
datasource: 'github-tags',
packageName: 'foo/bar',
currentDigest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
});
// Archive of a release
expect(
parseArchiveUrl(
'https://github.com/foo/bar/releases/download/1.2.3/foobar-1.2.3.tar.gz',
),
).toEqual({
datasource: 'github-releases',
packageName: 'foo/bar',
currentValue: '1.2.3',
});
// Archive of a tag.
expect(
parseArchiveUrl(
'https://github.com/aspect-build/rules_js/archive/refs/tags/v1.1.2.tar.gz',
),
).toEqual({
datasource: 'github-tags',
packageName: 'aspect-build/rules_js',
currentValue: 'v1.1.2',
});
});
describe('git', () => {
it('extracts git dependencies', () => {
expect(
extractDepsFromFragmentData({ rule: 'foo_bar', name: 'foo_bar' }),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'git_repository',
name: 'foo_bar',
}),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'git_repository',
name: 'foo_bar',
tag: '1.2.3',
}),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'git_repository',
name: 'foo_bar',
tag: '1.2.3',
remote: 'https://github.com/foo/bar',
}),
).toEqual([
{
datasource: 'github-releases',
depType: 'git_repository',
depName: 'foo_bar',
packageName: 'foo/bar',
currentValue: '1.2.3',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'git_repository',
name: 'foo_bar',
commit: 'abcdef0123abcdef0123abcdef0123abcdef0123',
remote: 'https://github.com/foo/bar',
}),
).toEqual([
{
datasource: 'github-releases',
depType: 'git_repository',
depName: 'foo_bar',
packageName: 'foo/bar',
currentDigest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'git_repository',
name: 'foo_bar',
tag: '1.2.3',
remote: 'https://gitlab.com/foo/bar',
}),
).toMatchObject([
{
currentValue: '1.2.3',
depName: 'foo_bar',
depType: 'git_repository',
skipReason: 'unsupported-datasource',
},
]);
});
});
describe('go', () => {
it('extracts go dependencies', () => {
expect(
extractDepsFromFragmentData({ rule: 'foo_bar', name: 'foo_bar' }),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({ rule: 'go_repository', name: 'foo_bar' }),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'go_repository',
name: 'foo_bar',
tag: '1.2.3',
}),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'go_repository',
name: 'foo_bar',
tag: '1.2.3',
importpath: 'foo/bar/baz',
}),
).toEqual([
{
datasource: 'go',
depType: 'go_repository',
depName: 'foo_bar',
packageName: 'foo/bar/baz',
currentValue: '1.2.3',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'go_repository',
name: 'foo_bar',
commit: 'abcdef0123abcdef0123abcdef0123abcdef0123',
importpath: 'foo/bar/baz',
}),
).toEqual([
{
datasource: 'go',
depType: 'go_repository',
depName: 'foo_bar',
packageName: 'foo/bar/baz',
currentDigest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
digestOneAndOnly: true,
},
]);
expect(
extractDepsFromFragmentData({
rule: 'go_repository',
name: 'foo_bar',
tag: '1.2.3',
importpath: 'foo/bar/baz',
remote: 'https://github.com/foo/bar',
}),
).toEqual([
{
datasource: 'go',
depType: 'go_repository',
depName: 'foo_bar',
packageName: 'github.com/foo/bar',
currentValue: '1.2.3',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'go_repository',
name: 'foo_bar',
tag: '1.2.3',
importpath: 'foo/bar/baz',
remote: 'https://example.com/foo/bar',
}),
).toEqual([
{
datasource: 'go',
depType: 'go_repository',
depName: 'foo_bar',
packageName: 'foo/bar/baz',
currentValue: '1.2.3',
skipReason: 'unsupported-remote',
},
]);
});
});
describe('http', () => {
it('extracts http dependencies', () => {
expect(
extractDepsFromFragmentData({ rule: 'foo_bar', name: 'foo_bar' }),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({ rule: 'http_archive', name: 'foo_bar' }),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'http_archive',
name: 'foo_bar',
sha256: 'abcdef0123abcdef0123abcdef0123abcdef0123',
}),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'http_archive',
name: 'foo_bar',
sha256: 'abcdef0123abcdef0123abcdef0123abcdef0123',
url: 'https://github.com/foo/bar/archive/abcdef0123abcdef0123abcdef0123abcdef0123.tar.gz',
}),
).toEqual([
{
currentDigest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
datasource: 'github-tags',
depName: 'foo_bar',
depType: 'http_archive',
packageName: 'foo/bar',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'http_archive',
name: 'foo_bar',
sha256: 'abcdef0123abcdef0123abcdef0123abcdef0123',
urls: [
'https://example.com/foo/bar',
'https://github.com/foo/bar/archive/abcdef0123abcdef0123abcdef0123abcdef0123.tar.gz',
],
}),
).toEqual([
{
currentDigest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
datasource: 'github-tags',
depName: 'foo_bar',
depType: 'http_archive',
packageName: 'foo/bar',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'http_archive',
name: 'foo_bar',
sha256: 'abcdef0123abcdef0123abcdef0123abcdef0123',
url: 'https://github.com/foo/bar/releases/download/1.2.3/foobar-1.2.3.tar.gz',
}),
).toEqual([
{
currentValue: '1.2.3',
datasource: 'github-releases',
depName: 'foo_bar',
depType: 'http_archive',
packageName: 'foo/bar',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'http_archive',
name: 'foo_bar',
sha256: 'abcdef0123abcdef0123abcdef0123abcdef0123',
urls: [
'https://example.com/foo/bar',
'https://github.com/foo/bar/releases/download/1.2.3/foobar-1.2.3.tar.gz',
],
}),
).toEqual([
{
currentValue: '1.2.3',
datasource: 'github-releases',
depName: 'foo_bar',
depType: 'http_archive',
packageName: 'foo/bar',
},
]);
expect(
extractDepsFromFragmentData({
rule: 'http_archive',
name: 'aspect_rules_js',
sha256:
'db9f446752fe4100320cf8487e8fd476b9af0adf6b99b601bcfd70b289bb0598',
urls: [
'https://github.com/aspect-build/rules_js/archive/refs/tags/v1.1.2.tar.gz',
],
}),
).toEqual([
{
currentValue: 'v1.1.2',
datasource: 'github-tags',
depName: 'aspect_rules_js',
depType: 'http_archive',
packageName: 'aspect-build/rules_js',
},
]);
});
});
describe('docker', () => {
it('extracts docker dependencies', () => {
expect(
extractDepsFromFragmentData({ rule: 'foo_bar', name: 'foo_bar' }),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'container_pull',
name: 'foo_bar',
tag: '1.2.3',
digest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
repository: 'example.com/foo/bar',
registry: 'https://example.com',
}),
).toEqual([
{
currentDigest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
currentValue: '1.2.3',
datasource: 'docker',
depName: 'foo_bar',
depType: 'container_pull',
packageName: 'example.com/foo/bar',
registryUrls: ['https://example.com'],
versioning: 'docker',
},
]);
});
});
describe('oci', () => {
it('extracts oci dependencies', () => {
expect(
extractDepsFromFragmentData({ rule: 'foo_bar', name: 'foo_bar' }),
).toBeEmptyArray();
expect(
extractDepsFromFragmentData({
rule: 'oci_pull',
name: 'foo_bar',
tag: '1.2.3',
digest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
image: 'example.com/foo/bar',
}),
).toEqual([
{
currentDigest: 'abcdef0123abcdef0123abcdef0123abcdef0123',
currentValue: '1.2.3',
datasource: 'docker',
depName: 'foo_bar',
depType: 'oci_pull',
packageName: 'example.com/foo/bar',
versioning: 'docker',
},
]);
});
});
describe('maven', () => {
it('extracts maven dependencies', () => {
expect(
extractDepsFromFragmentData({
rule: 'maven_install',
artifacts: [
'com.example1:foo:1.1.1',
{
_function: 'maven.artifact',
group: 'com.example2',
artifact: 'bar',
version: '2.2.2',
},
{
_function: 'maven.artifact',
'0': 'com.example3',
'1': 'baz',
'2': '3.3.3',
},
],
repositories: [
'https://example1.com/maven2',
'https://example2.com/maven2',
],
}),
).toEqual([
{
currentValue: '1.1.1',
datasource: 'maven',
versioning: 'gradle',
depType: 'maven_install',
depName: 'com.example1:foo',
registryUrls: [
'https://example1.com/maven2',
'https://example2.com/maven2',
],
},
{
currentValue: '2.2.2',
datasource: 'maven',
versioning: 'gradle',
depType: 'maven_install',
depName: 'com.example2:bar',
registryUrls: [
'https://example1.com/maven2',
'https://example2.com/maven2',
],
},
{
currentValue: '3.3.3',
datasource: 'maven',
versioning: 'gradle',
depType: 'maven_install',
depName: 'com.example3:baz',
registryUrls: [
'https://example1.com/maven2',
'https://example2.com/maven2',
],
},
]);
});
});
});