From 4681e650eec17c4442a7ecec495de399a25491b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Ro=C5=BCek?= Date: Tue, 8 Oct 2019 19:26:48 +0200 Subject: [PATCH] chore(karma): improve fixtures generation --- .gitignore | 2 +- scripts/generate-karma-fixtures.js | 24 ++++++++++++++++-------- setupKarma.ts | 19 +++++++++++++------ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index c51dcfc6c..ea39399a1 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ /binaries /rulesets -/src/__tests__/__fixtures__/oas-functions.json +/__karma__/__fixtures__/ /test-harness/tmp/ # testing diff --git a/scripts/generate-karma-fixtures.js b/scripts/generate-karma-fixtures.js index cafb2ece0..9bef59baa 100755 --- a/scripts/generate-karma-fixtures.js +++ b/scripts/generate-karma-fixtures.js @@ -2,16 +2,24 @@ const path = require('path'); const fs = require('fs'); -const target = path.join(__dirname, '../src/__tests__/__fixtures__/oas-functions.json'); +const baseDir = path.join(__dirname, '../__karma__/__fixtures__/'); -const fnsPath = path.join(__dirname, '../rulesets/oas/functions') +if (!fs.existsSync(baseDir)) { + fs.mkdirSync(baseDir); +} -const files = fs.readdirSync(fnsPath); +for (const spec of ['', '2', '3']) { + const target = path.join(baseDir, `oas${spec}-functions.json`); + const fnsPath = path.join(__dirname, `../rulesets/oas${spec}/functions`); + const bundledFns = {}; -const bundledFns = {}; + if (fs.existsSync(fnsPath)) { + const files = fs.readdirSync(fnsPath); -for (const file of files) { - bundledFns[file] = fs.readFileSync(path.join(fnsPath, file), 'utf-8') -} + for (const file of files) { + bundledFns[file] = fs.readFileSync(path.join(fnsPath, file), 'utf-8'); + } + } -fs.writeFileSync(target, JSON.stringify(bundledFns, null, 2)) + fs.writeFileSync(target, JSON.stringify(bundledFns, null, 2)); +} diff --git a/setupKarma.ts b/setupKarma.ts index 6b4749432..c50b71479 100644 --- a/setupKarma.ts +++ b/setupKarma.ts @@ -6,7 +6,12 @@ const oas2Schema = JSON.parse(JSON.stringify(require('./rulesets/oas2/schemas/ma const oas3Ruleset = JSON.parse(JSON.stringify(require('./rulesets/oas3/index.json'))); const oas3Schema = JSON.parse(JSON.stringify(require('./rulesets/oas3/schemas/main.json'))); -const oasFunctions = JSON.parse(JSON.stringify(require('./src/__tests__/__fixtures__/oas-functions.json'))); +const oasFunctions = { + // import path used for require must be deterministic here at compile-time (not run-time), hence no loop can be used + '': JSON.parse(JSON.stringify(require('./__karma__/__fixtures__/oas-functions.json'))), + '2': JSON.parse(JSON.stringify(require('./__karma__/__fixtures__/oas2-functions.json'))), + '3': JSON.parse(JSON.stringify(require('./__karma__/__fixtures__/oas3-functions.json'))), +}; const { fetch } = window; let fetchMock: FetchMockSandbox; @@ -40,11 +45,13 @@ beforeEach(() => { body: JSON.parse(JSON.stringify(oas3Schema)), }); - for (const [name, fn] of Object.entries(oasFunctions)) { - fetchMock.get(`https://unpkg.com/@stoplight/spectral/rulesets/oas/functions/${name}`, { - status: 200, - body: fn, - }); + for (const [spec, fns] of Object.entries(oasFunctions)) { + for (const [name, fn] of Object.entries(fns)) { + fetchMock.get(`https://unpkg.com/@stoplight/spectral/rulesets/oas${spec}/functions/${name}`, { + status: 200, + body: fn, + }); + } } });