forked from microsoft/typespec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathids.test.ts
95 lines (82 loc) · 2.55 KB
/
ids.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
import { expectDiagnostics } from "@typespec/compiler/testing";
import assert from "assert";
import { describe, it } from "vitest";
import { emitSchema, emitSchemaWithDiagnostics } from "./utils.js";
describe("implicit ids", () => {
it("when bundling, sets the id based on the declaration name", async () => {
const schemas = await emitSchema(
`
model Foo {}
`,
{ bundleId: "types.json" }
);
assert.strictEqual(schemas["types.json"].$defs.Foo.$id, "Foo");
});
it("when not bundling, sets the id based on the declaration name and file path", async () => {
const schemas = await emitSchema(`
model Foo {}
`);
assert.strictEqual(schemas["Foo.json"].$id, "Foo.json");
});
it("with a base URI, sets the id based on the declaration name and file path", async () => {
const schemas = await emitSchema(`
@baseUri("http://example.org")
namespace Test {
model Foo {}
}
`);
assert.strictEqual(schemas["Foo.json"].$id, "http://example.org/Foo.json");
});
it("emit diagnostic on duplicate IDs", async () => {
const [_, diagnostics] = await emitSchemaWithDiagnostics(`
namespace Test1 {
model Foo {}
}
namespace Test2 {
model Foo {}
}
`);
expectDiagnostics(diagnostics, [
{
code: "@typespec/json-schema/duplicate-id",
message: `There are multiple types with the same id "Foo.json".`,
},
{
code: "@typespec/json-schema/duplicate-id",
message: `There are multiple types with the same id "Foo.json".`,
},
]);
});
});
describe("explicit ids with $id", () => {
it("sets the id explicitly without a baseURI", async () => {
const schemas = await emitSchema(`
@id("bar")
model Foo {}
`);
assert.strictEqual(schemas["Foo.json"].$id, "bar");
});
it("sets the id relative to the base URI when present", async () => {
const schemas = await emitSchema(`
@baseUri("http://example.org")
namespace Test {
@id("bar")
model Foo {}
}
`);
assert.strictEqual(schemas["Foo.json"].$id, "http://example.org/bar");
});
it("sets the id relative to the base URI when present and when bundling", async () => {
const schemas = await emitSchema(
`
@baseUri("http://example.org")
namespace Test {
@id("bar")
model Foo {}
}
`,
{ bundleId: "types.json" }
);
assert.strictEqual(schemas["types.json"].$defs.Foo.$id, "http://example.org/bar");
});
});