Skip to content

Commit e4aa151

Browse files
committed
feat: adjust date time property suffix rule (#1536)
Signed-off-by: Tronje Krop <[email protected]>
1 parent 301b550 commit e4aa151

File tree

3 files changed

+29
-72
lines changed

3 files changed

+29
-72
lines changed

server/zally-ruleset-zalando/src/main/kotlin/org/zalando/zally/ruleset/zalando/DateTimePropertiesSuffixRule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import org.zalando.zally.rule.api.Violation
1313
ruleSet = ZalandoRuleSet::class,
1414
id = "235",
1515
severity = Severity.SHOULD,
16-
title = "Name date/time properties using the \"_at\" suffix"
16+
title = "Name date/time properties using the common suffix"
1717
)
1818
class DateTimePropertiesSuffixRule(rulesConfig: Config) {
1919

@@ -22,7 +22,7 @@ class DateTimePropertiesSuffixRule(rulesConfig: Config) {
2222
.map { Regex(it) }
2323
.toSet()
2424

25-
private val propertyFormats = setOf("date", "date-time")
25+
private val propertyFormats = setOf("date", "time", "date-time")
2626

2727
@Check(severity = Severity.SHOULD)
2828
fun validate(context: Context): List<Violation> {

server/zally-ruleset-zalando/src/main/resources/reference.conf

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,11 @@ ProprietaryHeadersRule {
216216

217217
DateTimePropertiesSuffixRule {
218218
patterns: [
219-
".*_at"
219+
".*_at",
220+
".*_time",
221+
".*_timestamp",
222+
".*_date",
223+
".*_day",
220224
]
221225
}
222226

server/zally-ruleset-zalando/src/test/kotlin/org/zalando/zally/ruleset/zalando/DateTimePropertiesSuffixRuleTest.kt

Lines changed: 22 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class DateTimePropertiesSuffixRuleTest {
1414
private val rule = DateTimePropertiesSuffixRule(rulesConfig)
1515

1616
@Test
17-
fun `rule should pass with correct 'date-time' fields`() {
17+
fun `rule should pass with correct format and suffix`() {
1818
@Language("YAML")
1919
val content = """
2020
openapi: '3.0.1'
@@ -28,44 +28,18 @@ class DateTimePropertiesSuffixRuleTest {
2828
created_at:
2929
type: string
3030
format: date-time
31-
modified_at:
31+
modified_time:
3232
type: string
33-
format: date-time
34-
occurred_at:
33+
format: time
34+
occurred_timestamp:
3535
type: string
3636
format: date-time
37-
returned_at:
38-
type: string
39-
format: date-time
40-
""".trimIndent()
41-
val violations = rule.validate(DefaultContextFactory().getOpenApiContext(content))
42-
assertThat(violations).isEmpty()
43-
}
44-
45-
@Test
46-
fun `rule should pass with correct 'date' fields`() {
47-
@Language("YAML")
48-
val content = """
49-
openapi: '3.0.1'
50-
info:
51-
title: Test API
52-
version: 1.0.0
53-
components:
54-
schemas:
55-
Car:
56-
properties:
57-
created_at:
37+
returned_date:
5838
type: string
5939
format: date
60-
modified_at:
61-
type: string
62-
format: date
63-
occurred_at:
40+
delivered_day:
6441
type: string
65-
format: date
66-
returned_at:
67-
type: string
68-
format: date
42+
format: date
6943
""".trimIndent()
7044
val violations = rule.validate(DefaultContextFactory().getOpenApiContext(content))
7145
assertThat(violations).isEmpty()
@@ -84,12 +58,15 @@ class DateTimePropertiesSuffixRuleTest {
8458
Car:
8559
properties:
8660
created:
87-
type: string
61+
type: string
62+
modified:
63+
type: enum
64+
enum: [ "yes", "no" ]
8865
occurred:
8966
type: string
9067
returned:
9168
type: string
92-
modified:
69+
delivered:
9370
type: int
9471
""".trimIndent()
9572
val violations = rule.validate(DefaultContextFactory().getOpenApiContext(content))
@@ -111,50 +88,26 @@ class DateTimePropertiesSuffixRuleTest {
11188
created:
11289
type: string
11390
format: date-time
91+
modified:
92+
type: string
93+
format: time
11494
occurred:
11595
type: string
116-
format: date
96+
format: date-time
11797
returned:
11898
type: string
119-
format: date-time
120-
modified:
99+
format: date
100+
delivered:
121101
type: string
122102
format: date
123103
""".trimIndent()
124104
val violations = rule.validate(DefaultContextFactory().getOpenApiContext(content))
125105
assertThat(violations.map { it.description }).containsExactly(
126106
rule.generateMessage("created", "string", "date-time"),
127-
rule.generateMessage("occurred", "string", "date"),
128-
rule.generateMessage("returned", "string", "date-time"),
129-
rule.generateMessage("modified", "string", "date")
130-
)
131-
}
132-
133-
@Test
134-
fun `rule should support different patterns`() {
135-
@Language("YAML")
136-
val content = """
137-
openapi: '3.0.1'
138-
info:
139-
title: Test API
140-
version: 1.0.0
141-
components:
142-
schemas:
143-
Car:
144-
properties:
145-
created:
146-
type: string
147-
format: date-time
148-
modified:
149-
type: string
150-
format: date
151-
""".trimIndent()
152-
val newConfig = rulesConfig.withValue("DateTimePropertiesSuffixRule/patterns", ConfigValueFactory.fromIterable(listOf("was_.*")))
153-
val customRule = DateTimePropertiesSuffixRule(newConfig)
154-
val violations = customRule.validate(DefaultContextFactory().getOpenApiContext(content))
155-
assertThat(violations.map { it.description }).containsExactly(
156-
customRule.generateMessage("created", "string", "date-time"),
157-
customRule.generateMessage("modified", "string", "date")
107+
rule.generateMessage("modified", "string", "time"),
108+
rule.generateMessage("occurred", "string", "date-time"),
109+
rule.generateMessage("returned", "string", "date"),
110+
rule.generateMessage("delivered", "string", "date")
158111
)
159112
}
160113
}

0 commit comments

Comments
 (0)