-
Notifications
You must be signed in to change notification settings - Fork 2
/
input.test-utils.ts
72 lines (55 loc) · 1.96 KB
/
input.test-utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import path from "path"
import {jest} from "@jest/globals"
import yaml from "js-yaml"
import _ from "lodash"
import {Input} from "../core/input"
import {logger} from "../core/logger"
import {OpenapiLoader} from "../core/openapi-loader"
import {OpenapiValidator} from "../core/openapi-validator"
type Version = "3.0.x" | "3.1.x"
function getTestVersions(): Version[] {
if (process.argv.find((arg) => ["--updateSnapshot", "-u"].includes(arg))) {
logger.warn("Running with --updateSnapshot - only testing one version")
return ["3.0.x"]
}
return ["3.0.x", "3.1.x"]
}
export const testVersions = getTestVersions()
function fileForVersion(version: Version) {
switch (version) {
case "3.0.x":
return path.join(__dirname, "unit-test-inputs-3.0.3.yaml")
case "3.1.x":
return path.join(__dirname, "unit-test-inputs-3.1.0.yaml")
default:
throw new Error(`unsupported test version '${version}'`)
}
}
const getValidator = _.memoize(async (skipValidation: boolean) => {
const validator = await OpenapiValidator.create()
if (skipValidation) {
jest.spyOn(validator, "validate").mockResolvedValue()
}
return validator
})
export async function unitTestInput(version: Version, skipValidation = false) {
const validator = await getValidator(skipValidation)
const file = fileForVersion(version)
const loader = await OpenapiLoader.create(file, validator)
return {input: new Input(loader, {extractInlineSchemas: true}), file}
}
export async function createTestInputFromYamlString(
str: string,
skipValidation = true,
): Promise<Input> {
const spec = yaml.load(str)
if (typeof spec !== "object" || !spec) {
throw new Error("failed to load spec from yaml")
}
const validator = await OpenapiValidator.create()
if (skipValidation) {
jest.spyOn(validator, "validate").mockResolvedValue()
}
const loader = await OpenapiLoader.createFromLiteral(spec, validator)
return new Input(loader, {extractInlineSchemas: true})
}