-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathjava.test.ts
More file actions
118 lines (114 loc) · 3.55 KB
/
Copy pathjava.test.ts
File metadata and controls
118 lines (114 loc) · 3.55 KB
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
import assert from "node:assert/strict";
import test from "node:test";
import type { JSONSchema7 } from "json-schema";
import {
collectNestedDiscriminatedUnionTypeNames,
schemaTypeToJava,
} from "./java.js";
test("nested discriminated array items use their named Java type", () => {
const definitions: Record<string, JSONSchema7> = {
MessageResult: {
anyOf: [
{ $ref: "#/definitions/MessageDelivered" },
{ $ref: "#/definitions/MessageRejected" },
],
},
MessageDelivered: {
type: "object",
additionalProperties: false,
properties: {
status: { const: "delivered" },
actions: {
type: "array",
items: { $ref: "#/definitions/ActionChoice" },
},
},
},
MessageRejected: {
type: "object",
additionalProperties: false,
properties: {
status: { const: "rejected" },
reason: { type: "string" },
},
},
ActionChoice: {
anyOf: [
{ $ref: "#/definitions/PhoneAction" },
{ $ref: "#/definitions/EmailAction" },
],
},
PhoneAction: {
type: "object",
title: "PhoneAction",
additionalProperties: false,
properties: {
kind: { const: "phone" },
number: { type: "string" },
sources: {
type: "object",
additionalProperties: { $ref: "#/definitions/ActionSource" },
},
},
},
EmailAction: {
type: "object",
title: "EmailAction",
additionalProperties: false,
properties: {
kind: { const: "email" },
address: { type: "string" },
sources: {
type: "object",
additionalProperties: { $ref: "#/definitions/ActionSource" },
},
},
},
ActionSource: {
anyOf: [
{ $ref: "#/definitions/LocalActionSource" },
{ $ref: "#/definitions/RemoteActionSource" },
],
},
LocalActionSource: {
type: "object",
title: "LocalActionSource",
additionalProperties: false,
properties: {
location: { const: "local" },
},
},
RemoteActionSource: {
type: "object",
title: "RemoteActionSource",
additionalProperties: false,
properties: {
location: { const: "remote" },
url: { type: "string" },
},
},
};
const standaloneTypes = new Map<string, JSONSchema7>();
const promotedUnionTypes = collectNestedDiscriminatedUnionTypeNames(
{ $ref: "#/definitions/MessageResult" },
definitions
);
const result = schemaTypeToJava(
{
type: "array",
items: { $ref: "#/definitions/ActionChoice" },
},
false,
"MessageEnvelope",
"actions",
new Map(),
{
definitions,
standaloneTypes,
promotedUnionTypes,
}
);
assert.equal(result.javaType, "List<ActionChoice>");
assert.deepEqual([...standaloneTypes.keys()], ["ActionChoice"]);
assert.deepEqual([...promotedUnionTypes], ["ActionChoice", "ActionSource"]);
});