mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-31 17:51:49 +00:00
87088344a2
* feat: add support for smithy framework * docs: remove comment and exclude from schema validation * docs: use relativ link
278 lines
7.4 KiB
TypeScript
278 lines
7.4 KiB
TypeScript
import { codeBlock } from 'common-tags';
|
|
import { extractPackageFile } from './index.ts';
|
|
|
|
const packageFile = 'smithy-build.json';
|
|
|
|
describe('modules/manager/smithy/extract', () => {
|
|
describe('extractPackageFile()', () => {
|
|
it('returns null for empty content', () => {
|
|
expect(extractPackageFile('', packageFile)).toBeNull();
|
|
});
|
|
|
|
it('returns null for malformed JSON', () => {
|
|
expect(extractPackageFile('malformed json}}}', packageFile)).toBeNull();
|
|
});
|
|
|
|
it('returns null when maven is not an object', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": "invalid"
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toBeNull();
|
|
});
|
|
|
|
it('returns null when dependencies is not an array', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"dependencies": "software.amazon.smithy:smithy-aws-traits:1.37.0"
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toBeNull();
|
|
});
|
|
|
|
it('returns null when there is no maven section', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"sources": ["model"]
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toBeNull();
|
|
});
|
|
|
|
it('returns null when only repositories are defined', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"repositories": [{ "url": "https://repo.example.com/maven" }]
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toBeNull();
|
|
});
|
|
|
|
it('returns null for an empty dependencies array', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"dependencies": []
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toBeNull();
|
|
});
|
|
|
|
it('extracts dependencies from a file with comments', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
// dependencies used for code generation
|
|
"dependencies": [
|
|
"software.amazon.smithy:smithy-aws-traits:1.37.0"
|
|
]
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toEqual({
|
|
deps: [
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-aws-traits',
|
|
currentValue: '1.37.0',
|
|
datasource: 'maven',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it('extracts multiple dependencies including version ranges', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"dependencies": [
|
|
"software.amazon.smithy:smithy-aws-traits:1.37.0",
|
|
"software.amazon.smithy:smithy-model:[1.0,2.0)"
|
|
]
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toEqual({
|
|
deps: [
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-aws-traits',
|
|
currentValue: '1.37.0',
|
|
datasource: 'maven',
|
|
},
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-model',
|
|
currentValue: '[1.0,2.0)',
|
|
datasource: 'maven',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it('skips dependencies with variables or invalid coordinates', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"dependencies": [
|
|
"software.amazon.smithy:smithy-aws-traits:\${SMITHY_VERSION}",
|
|
"\${GROUP_ID}:smithy-model:1.0.0",
|
|
"software.amazon.smithy:smithy-cli",
|
|
"software.amazon.smithy:smithy-build:",
|
|
"single",
|
|
"group:artifact:1.0.0:classifier",
|
|
":artifact:1.0.0",
|
|
"group::1.0.0"
|
|
]
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toEqual({
|
|
deps: [
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-aws-traits',
|
|
datasource: 'maven',
|
|
skipReason: 'contains-variable',
|
|
},
|
|
{
|
|
depName: '${GROUP_ID}:smithy-model:1.0.0',
|
|
skipReason: 'contains-variable',
|
|
},
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-cli',
|
|
datasource: 'maven',
|
|
skipReason: 'unspecified-version',
|
|
},
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-build',
|
|
datasource: 'maven',
|
|
skipReason: 'unspecified-version',
|
|
},
|
|
{
|
|
depName: 'single',
|
|
skipReason: 'invalid-dependency-specification',
|
|
},
|
|
{
|
|
depName: 'group:artifact:1.0.0:classifier',
|
|
skipReason: 'invalid-dependency-specification',
|
|
},
|
|
{
|
|
depName: ':artifact:1.0.0',
|
|
skipReason: 'invalid-dependency-specification',
|
|
},
|
|
{
|
|
depName: 'group::1.0.0',
|
|
skipReason: 'invalid-dependency-specification',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it('drops non-string dependency entries', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"dependencies": [
|
|
42,
|
|
{},
|
|
"software.amazon.smithy:smithy-aws-traits:1.37.0"
|
|
]
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toEqual({
|
|
deps: [
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-aws-traits',
|
|
currentValue: '1.37.0',
|
|
datasource: 'maven',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it('extracts registry urls from repositories', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"dependencies": [
|
|
"software.amazon.smithy:smithy-aws-traits:1.37.0"
|
|
],
|
|
"repositories": [
|
|
{ "url": "https://repo.example.com/maven" },
|
|
{
|
|
"url": "https://other.example.com/maven",
|
|
"httpCredentials": "user:\${PASSWORD}"
|
|
},
|
|
{ "id": "no-url" },
|
|
{ "url": "https://\${PRIVATE_HOST}/maven" }
|
|
]
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toEqual({
|
|
deps: [
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-aws-traits',
|
|
currentValue: '1.37.0',
|
|
datasource: 'maven',
|
|
},
|
|
],
|
|
registryUrls: [
|
|
'https://repo.example.com/maven',
|
|
'https://other.example.com/maven',
|
|
],
|
|
});
|
|
});
|
|
|
|
it('omits registry urls when all repository urls contain variables', () => {
|
|
const content = codeBlock`
|
|
{
|
|
"version": "1.0",
|
|
"maven": {
|
|
"dependencies": [
|
|
"software.amazon.smithy:smithy-aws-traits:1.37.0"
|
|
],
|
|
"repositories": [
|
|
{ "url": "https://\${PRIVATE_HOST}/maven" }
|
|
]
|
|
}
|
|
}
|
|
`;
|
|
|
|
expect(extractPackageFile(content, packageFile)).toEqual({
|
|
deps: [
|
|
{
|
|
depName: 'software.amazon.smithy:smithy-aws-traits',
|
|
currentValue: '1.37.0',
|
|
datasource: 'maven',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
});
|
|
});
|