Skip to content

Commit 673d62d

Browse files
committed
Add validation tests for map
1 parent ab8f008 commit 673d62d

File tree

1 file changed

+116
-0
lines changed
  • json-schema-validator-objects/src/commonTest/kotlin/io/github/optimumcode/json/schema/objects/wrapper

1 file changed

+116
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package io.github.optimumcode.json.schema.objects.wrapper
2+
3+
import io.github.optimumcode.json.pointer.JsonPointer
4+
import io.github.optimumcode.json.schema.JsonSchema
5+
import io.github.optimumcode.json.schema.OutputCollector
6+
import io.github.optimumcode.json.schema.SchemaType
7+
import io.github.optimumcode.json.schema.ValidationOutput
8+
import io.kotest.assertions.asClue
9+
import io.kotest.core.spec.style.FunSpec
10+
import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder
11+
import io.kotest.matchers.collections.shouldHaveSize
12+
import io.kotest.matchers.shouldBe
13+
14+
class ValidationTest : FunSpec() {
15+
init {
16+
val schema =
17+
JsonSchema.fromDefinition(
18+
"""
19+
{
20+
"properties": {
21+
"simple": {
22+
"type": "integer"
23+
},
24+
"collection": {
25+
"type": "array",
26+
"items": {
27+
"type": "string"
28+
}
29+
},
30+
"sub-map": {
31+
"properties": {
32+
"inner": {
33+
"type": "string"
34+
}
35+
}
36+
}
37+
},
38+
"additionalProperties": false,
39+
"required": ["simple"]
40+
}
41+
""".trimIndent(),
42+
defaultType = SchemaType.DRAFT_2020_12,
43+
)
44+
45+
test("valid object") {
46+
val result =
47+
schema.validate(
48+
wrapAsElement(
49+
mapOf(
50+
"simple" to 1,
51+
"collection" to
52+
listOf(
53+
"test1",
54+
"test2",
55+
),
56+
"sub-map" to
57+
mapOf(
58+
"inner" to "inner1",
59+
),
60+
),
61+
),
62+
OutputCollector.basic(),
63+
)
64+
65+
result.asClue {
66+
it.valid shouldBe true
67+
}
68+
}
69+
70+
test("invalid object") {
71+
val result =
72+
schema.validate(
73+
wrapAsElement(
74+
mapOf(
75+
"simple" to 1.5,
76+
"collection" to
77+
listOf(
78+
"test1",
79+
1,
80+
),
81+
"sub-map" to
82+
mapOf(
83+
"inner" to 42,
84+
),
85+
),
86+
),
87+
OutputCollector.basic(),
88+
)
89+
90+
result.asClue {
91+
it.valid shouldBe false
92+
it.errors shouldHaveSize 3
93+
it.errors.shouldContainExactlyInAnyOrder(
94+
ValidationOutput.OutputUnit(
95+
valid = false,
96+
keywordLocation = JsonPointer("/properties/simple/type"),
97+
instanceLocation = JsonPointer("/simple"),
98+
error = "element is not a integer",
99+
),
100+
ValidationOutput.OutputUnit(
101+
valid = false,
102+
keywordLocation = JsonPointer("/properties/collection/items/type"),
103+
instanceLocation = JsonPointer("/collection/1"),
104+
error = "element is not a string",
105+
),
106+
ValidationOutput.OutputUnit(
107+
valid = false,
108+
keywordLocation = JsonPointer("/properties/sub-map/properties/inner/type"),
109+
instanceLocation = JsonPointer("/sub-map/inner"),
110+
error = "element is not a string",
111+
),
112+
)
113+
}
114+
}
115+
}
116+
}

0 commit comments

Comments
 (0)