0
0
Fork 0
mirror of https://github.com/renovatebot/renovate.git synced 2025-02-28 18:44:03 +00:00
renovatebot_renovate/lib/modules/manager/devbox/extract.spec.ts
Sergei Zharinov 19ae54fb09
refactor(devbox): Refactor schema and improve logging (#33978)
Co-authored-by: Will Brennan <will.brennan@cultureamp.com>
Co-authored-by: Will Brennan <will@moondev.co.uk>
Co-authored-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2025-01-31 21:14:25 +00:00

291 lines
7 KiB
TypeScript

import { codeBlock } from 'common-tags';
import { extractPackageFile } from '.';
describe('modules/manager/devbox/extract', () => {
describe('extractPackageFile', () => {
it('returns null when the devbox JSON file is empty', () => {
const result = extractPackageFile('', 'devbox.lock');
expect(result).toBeNull();
});
it('returns null when the devbox JSON file is malformed', () => {
const result = extractPackageFile('malformed json}}}}}', 'devbox.lock');
expect(result).toBeNull();
});
it('returns null when the devbox JSON file has no packages', () => {
const result = extractPackageFile('{}', 'devbox.lock');
expect(result).toBeNull();
});
it('returns a package dependency when the devbox JSON file has a single package', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": ["nodejs@20.1.8"]
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
],
});
});
it('returns a package dependency when the devbox JSON file has a single package with a version object', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8"
}
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
],
});
});
it('returns invalid-version when the devbox JSON file has a single package with an invalid version', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "^20.1.8"
}
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
currentValue: '^20.1.8',
datasource: 'devbox',
depName: 'nodejs',
skipReason: 'invalid-version',
},
],
});
});
it('returns a package dependency when the devbox JSON file has multiple packages', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": ["nodejs@20.1.8", "yarn@1.22.10"]
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
},
],
});
});
it('returns a package dependency when the devbox JSON file has multiple packages with in a packages object', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10"
}
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
},
],
});
});
it('returns a package dependency when the devbox JSON file has multiple packages with package objects', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": {
"version": "20.1.8"
},
"yarn": {
"version": "1.22.10"
}
}
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
},
],
});
});
it('returns invalid dependencies', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10",
"invalid": "invalid"
}
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
},
{
currentValue: 'invalid',
datasource: 'devbox',
depName: 'invalid',
skipReason: 'invalid-version',
},
],
});
});
it('returns invalid dependencies with package objects', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": {
"nodejs": "20.1.8",
"yarn": "1.22.10",
"invalid": {
"version": "invalid"
}
}
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
},
{
currentValue: 'invalid',
datasource: 'devbox',
depName: 'invalid',
skipReason: 'invalid-version',
},
],
});
});
it('returns invalid dependencies from the packages array', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": ["nodejs@20.1.8", "yarn@1.22.10", "invalid@invalid", "invalid2"]
}
`,
'devbox.lock',
);
expect(result).toEqual({
deps: [
{
depName: 'nodejs',
currentValue: '20.1.8',
datasource: 'devbox',
},
{
depName: 'yarn',
currentValue: '1.22.10',
datasource: 'devbox',
},
{
currentValue: 'invalid',
datasource: 'devbox',
depName: 'invalid',
skipReason: 'invalid-version',
},
{
datasource: 'devbox',
depName: 'invalid2',
skipReason: 'not-a-version',
},
],
});
});
it('returns null if there are no dependencies', () => {
const result = extractPackageFile(
codeBlock`
{
"packages": []
}
`,
'devbox.lock',
);
expect(result).toBeNull();
});
});
});