Skip to content

Commit 2588171

Browse files
committed
feat(schema): Add primitive Schema records
1 parent 40d6b28 commit 2588171

7 files changed

Lines changed: 110 additions & 1 deletion

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import java.util.Set;
4+
5+
public record IntegerSchema(
6+
Set<TypeName> types,
7+
Long minimum,
8+
Long maximum,
9+
Long exclusiveMinimum,
10+
Long exclusiveMaximum,
11+
Long multipleOf,
12+
String format)
13+
implements Schema {}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import java.util.Set;
4+
5+
public record NullSchema() implements Schema {
6+
@Override
7+
public Set<TypeName> types() {
8+
return Set.of(TypeName.NULL);
9+
}
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import java.util.Set;
4+
5+
public record NumberSchema(
6+
Set<TypeName> types,
7+
Number minimum,
8+
Number maximum,
9+
Number exclusiveMinimum,
10+
Number exclusiveMaximum,
11+
Number multipleOf,
12+
String format)
13+
implements Schema {}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import java.util.Set;
4+
5+
public record RefSchema(String pointer) implements Schema {
6+
@Override
7+
public Set<TypeName> types() {
8+
return Set.of();
9+
}
10+
}

src/main/java/com/retailsvc/http/spec/schema/Schema.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Set;
44

5-
public sealed interface Schema permits BooleanSchema {
5+
public sealed interface Schema
6+
permits StringSchema, NumberSchema, IntegerSchema, BooleanSchema, NullSchema, RefSchema {
67
Set<TypeName> types();
78
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import java.util.List;
4+
import java.util.Set;
5+
6+
public record StringSchema(
7+
Set<TypeName> types,
8+
String pattern,
9+
Integer minLength,
10+
Integer maxLength,
11+
String format,
12+
List<String> enumValues)
13+
implements Schema {}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.retailsvc.http.spec.schema;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.List;
6+
import java.util.Set;
7+
import org.junit.jupiter.api.Test;
8+
9+
class PrimitiveSchemasTest {
10+
@Test
11+
void stringSchemaCarriesAllStringFields() {
12+
StringSchema s =
13+
new StringSchema(Set.of(TypeName.STRING), "^x.*$", 1, 64, "uuid", List.of("a", "b"));
14+
assertThat(s.pattern()).isEqualTo("^x.*$");
15+
assertThat(s.minLength()).isEqualTo(1);
16+
assertThat(s.maxLength()).isEqualTo(64);
17+
assertThat(s.format()).isEqualTo("uuid");
18+
assertThat(s.enumValues()).containsExactly("a", "b");
19+
}
20+
21+
@Test
22+
void numberSchemaCarriesAllNumericConstraints() {
23+
NumberSchema n = new NumberSchema(Set.of(TypeName.NUMBER), 0, 100, null, 100, 5, "double");
24+
assertThat(n.minimum()).isEqualTo(0);
25+
assertThat(n.maximum()).isEqualTo(100);
26+
assertThat(n.exclusiveMaximum()).isEqualTo(100);
27+
assertThat(n.multipleOf()).isEqualTo(5);
28+
}
29+
30+
@Test
31+
void integerSchemaUsesLongConstraints() {
32+
IntegerSchema i =
33+
new IntegerSchema(Set.of(TypeName.INTEGER), 1L, 2_000_000_000L, null, null, null, "int64");
34+
assertThat(i.maximum()).isEqualTo(2_000_000_000L);
35+
assertThat(i.format()).isEqualTo("int64");
36+
}
37+
38+
@Test
39+
void nullSchemaTypesIsAlwaysNull() {
40+
assertThat(new NullSchema().types()).containsExactly(TypeName.NULL);
41+
}
42+
43+
@Test
44+
void refSchemaTypesIsEmpty() {
45+
RefSchema r = new RefSchema("#/components/schemas/User");
46+
assertThat(r.pointer()).isEqualTo("#/components/schemas/User");
47+
assertThat(r.types()).isEmpty();
48+
}
49+
}

0 commit comments

Comments
 (0)