forked from microsoft/typespec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscalar-constraints.test.ts
128 lines (114 loc) · 3.26 KB
/
scalar-constraints.test.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import { strictEqual } from "assert";
import { describe, it } from "vitest";
import { oapiForModel } from "./test-host.js";
describe("scalar constraints", () => {
describe("numeric constraints", () => {
const scalarNumberTypes = [
"int8",
"int16",
"int32",
"uint8",
"uint16",
"uint32",
"integer",
"float32",
"float64",
"numeric",
"float",
"safeint",
];
describe("@minValue/@maxValue", () => {
for (const numType of scalarNumberTypes) {
it(numType, async () => {
const schemas = await oapiForModel(
"Test",
`
@minValue(1)
@maxValue(2)
scalar Test extends ${numType};
`
);
strictEqual(schemas.schemas.Test.minimum, 1);
strictEqual(schemas.schemas.Test.maximum, 2);
});
}
it("can be applied on a union", async () => {
const schemas = await oapiForModel(
"Test",
`
@minValue(1)
@maxValue(2)
union Test {int32, string, null};
`
);
strictEqual(schemas.schemas.Test.minimum, 1);
strictEqual(schemas.schemas.Test.maximum, 2);
});
});
describe("@minValueExclusive/@maxValueExclusive", () => {
for (const numType of scalarNumberTypes) {
it(numType, async () => {
const schemas = await oapiForModel(
"Test",
`
@minValueExclusive(1)
@maxValueExclusive(2)
scalar Test extends ${numType};
`
);
strictEqual(schemas.schemas.Test.minimum, 1);
strictEqual(schemas.schemas.Test.exclusiveMaximum, true);
strictEqual(schemas.schemas.Test.maximum, 2);
strictEqual(schemas.schemas.Test.exclusiveMaximum, true);
});
it("can be applied on a union", async () => {
const schemas = await oapiForModel(
"Test",
`
@minValueExclusive(1)
@maxValueExclusive(2)
union Test {int32, string, null};
`
);
strictEqual(schemas.schemas.Test.minimum, 1);
strictEqual(schemas.schemas.Test.exclusiveMaximum, true);
strictEqual(schemas.schemas.Test.maximum, 2);
strictEqual(schemas.schemas.Test.exclusiveMaximum, true);
});
}
});
});
describe("string constraints", () => {
function assertStringConstraints(schema: any) {
strictEqual(schema.minLength, 1);
strictEqual(schema.maxLength, 2);
strictEqual(schema.pattern, "a|b");
strictEqual(schema.format, "ipv4");
}
const decorators = `
@minLength(1)
@maxLength(2)
@pattern("a|b")
@format("ipv4")`;
it("on scalar declaration", async () => {
const schemas = await oapiForModel(
"Test",
`
${decorators}
scalar Test extends string;
`
);
assertStringConstraints(schemas.schemas.Test);
});
it("on union declaration", async () => {
const schemas = await oapiForModel(
"Test",
`
${decorators}
union Test {string, int32, null};
`
);
assertStringConstraints(schemas.schemas.Test);
});
});
});