Skip to content

Commit ed20aa7

Browse files
authored
updated date-time string format regexp to fully comply to standard (#493)
1 parent 7027e1b commit ed20aa7

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

openapi3/schema_formats.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func init() {
9090
DefineStringFormat("date", `^[0-9]{4}-(0[0-9]|10|11|12)-([0-2][0-9]|30|31)$`)
9191

9292
// date-time
93-
DefineStringFormat("date-time", `^[0-9]{4}-(0[0-9]|10|11|12)-([0-2][0-9]|30|31)T[0-9]{2}:[0-9]{2}:[0-9]{2}(.[0-9]+)?(Z|(\+|-)[0-9]{2}:[0-9]{2})?$`)
93+
DefineStringFormat("date-time", `^[0-9]{4}-(0[0-9]|10|11|12)-([0-2][0-9]|30|31)T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+)?(Z|(\+|-)[0-9]{2}:[0-9]{2})?$`)
9494

9595
}
9696

openapi3/schema_issue492_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package openapi3
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestIssue492(t *testing.T) {
10+
spec := []byte(`components:
11+
schemas:
12+
Server:
13+
properties:
14+
time:
15+
$ref: "#/components/schemas/timestamp"
16+
name:
17+
type: string
18+
type: object
19+
timestamp:
20+
type: string
21+
format: date-time
22+
openapi: "3.0.1"
23+
`)
24+
25+
s, err := NewLoader().LoadFromData(spec)
26+
require.NoError(t, err)
27+
28+
// verify that the expected format works
29+
err = s.Components.Schemas["Server"].Value.VisitJSON(map[string]interface{}{
30+
"name": "kin-openapi",
31+
"time": "2001-02-03T04:05:06.789Z",
32+
})
33+
require.NoError(t, err)
34+
35+
// verify that the issue is fixed
36+
err = s.Components.Schemas["Server"].Value.VisitJSON(map[string]interface{}{
37+
"name": "kin-openapi",
38+
"time": "2001-02-03T04:05:06:789Z",
39+
})
40+
require.EqualError(t, err, "Error at \"/time\": string doesn't match the format \"date-time\" (regular expression \"^[0-9]{4}-(0[0-9]|10|11|12)-([0-2][0-9]|30|31)T[0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?(Z|(\\+|-)[0-9]{2}:[0-9]{2})?$\")\nSchema:\n {\n \"format\": \"date-time\",\n \"type\": \"string\"\n }\n\nValue:\n \"2001-02-03T04:05:06:789Z\"\n")
41+
}

0 commit comments

Comments
 (0)