0
0
mirror of https://github.com/renovatebot/renovate.git synced 2024-12-22 13:38:32 +00:00
renovatebot_renovate/lib/util/package-rules/jsonata.spec.ts
Rhys Arkins 32ecb4ccc8
feat(packageRules): matchJsonata (#31826)
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2024-10-08 11:32:30 +00:00

83 lines
2.7 KiB
TypeScript

import { JsonataMatcher } from './jsonata';
describe('util/package-rules/jsonata', () => {
const matcher = new JsonataMatcher();
it('should return true for a matching JSONata expression', async () => {
const result = await matcher.matches(
{ depName: 'lodash' },
{ matchJsonata: ['depName = "lodash"'] },
);
expect(result).toBeTrue();
});
it('should return false for a non-matching JSONata expression', async () => {
const result = await matcher.matches(
{ depName: 'lodash' },
{ matchJsonata: ['depName = "react"'] },
);
expect(result).toBeFalse();
});
it('should return false for an invalid JSONata expression', async () => {
const result = await matcher.matches(
{ depName: 'lodash' },
{ matchJsonata: ['depName = '] },
);
expect(result).toBeFalse();
});
it('should return null if matchJsonata is not defined', async () => {
const result = await matcher.matches({ depName: 'lodash' }, {});
expect(result).toBeNull();
});
it('should return true for a complex JSONata expression', async () => {
const result = await matcher.matches(
{ depName: 'lodash', version: '4.17.21' },
{ matchJsonata: ['depName = "lodash" and version = "4.17.21"'] },
);
expect(result).toBeTrue();
});
it('should return false for a complex JSONata expression with non-matching version', async () => {
const result = await matcher.matches(
{ depName: 'lodash', version: '4.17.20' },
{ matchJsonata: ['depName = "lodash" and version = "4.17.21"'] },
);
expect(result).toBeFalse();
});
it('should return true for a JSONata expression with nested properties', async () => {
const result = await matcher.matches(
{ dep: { name: 'lodash', version: '4.17.21' } },
{ matchJsonata: ['dep.name = "lodash" and dep.version = "4.17.21"'] },
);
expect(result).toBeTrue();
});
it('should return false for a JSONata expression with nested properties and non-matching version', async () => {
const result = await matcher.matches(
{ dep: { name: 'lodash', version: '4.17.20' } },
{ matchJsonata: ['dep.name = "lodash" and dep.version = "4.17.21"'] },
);
expect(result).toBeFalse();
});
it('should return true if any JSONata expression matches', async () => {
const result = await matcher.matches(
{ depName: 'lodash' },
{ matchJsonata: ['depName = "react"', 'depName = "lodash"'] },
);
expect(result).toBeTrue();
});
it('should catch evaluate errors', async () => {
const result = await matcher.matches(
{ depName: 'lodash' },
{ matchJsonata: ['$notafunction()'] },
);
expect(result).toBeFalse();
});
});