UNPKG

@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
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; }