@stoplight/spectral-url-versioning
Version:
There's no one right way to version, but there's a lot of objectively bad ways you want to avoid.
46 lines (38 loc) • 1.35 kB
text/typescript
import { IRuleResult, Spectral, Document, Ruleset } from '@stoplight/spectral-core';
import { httpAndFileResolver } from '@stoplight/spectral-ref-resolver';
import sourceRuleset from '../../src/ruleset';
export type RuleName = keyof Ruleset['rules'];
type Scenario = ReadonlyArray<
Readonly<{
name: string;
document: Record<string, unknown> | Document<unknown, any>;
errors: ReadonlyArray<Partial<IRuleResult>>;
}>
>;
export default (ruleName: RuleName, tests: Scenario): void => {
describe(`Rule ${ruleName}`, () => {
for (const testCase of tests) {
it.concurrent(testCase.name, async () => {
const s = createWithRules([ruleName]);
const doc = testCase.document instanceof Document ? testCase.document : JSON.stringify(testCase.document);
const errors = await s.run(doc);
expect(errors.filter(({ code }) => code === ruleName)).toEqual(
testCase.errors.map(error => expect.objectContaining(error) as unknown),
);
});
}
});
};
export function createWithRules(rules: (keyof Ruleset['rules'])[]): Spectral {
const s = new Spectral({ resolver: httpAndFileResolver });
s.setRuleset({
extends: [
[sourceRuleset, 'off'],
],
rules: rules.reduce((obj: any, name) => {
obj[name] = true;
return obj;
}, {}),
});
return s;
}