@@ -32,6 +32,19 @@ iso8601dates = [ "1985-04-12" ]
3232invalidIso8601dates :: [Text]
3333invalidIso8601dates = [ "1999-13-12" ]
3434
35+type ISO8601TimeSchema = 'SchemaObject '[ '("time", 'SchemaText IsTime) ]
36+
37+iso8601times :: [Text]
38+iso8601times =
39+ [ "19:23:00"
40+ , "00:00:00"
41+ , "23:47:12" ]
42+
43+invalidIso8601times :: [Text]
44+invalidIso8601times =
45+ [ "00:60:00"
46+ , "24:01:02" ]
47+
3548type ISO8601DateTimeSchema = 'SchemaObject '[ '("datetime", 'SchemaText IsDateTime) ]
3649
3750-- | Taken from ISO8601 RFC 3339
@@ -47,11 +60,10 @@ iso8601datetimes =
4760
4861invalidIso8601datetimes :: [Text]
4962invalidIso8601datetimes =
50− [ "1985-04-29T23:20:50.52Z"
51− , "1996-12-129T16:39:57-08:00"
63+ [ "1996-13-129T16:39:57-08:00"
5264 , "1990-2-31T23:59:60Z"
53− , "1990-12-31T15:59:70"
54− , "1937-01-01T12:00:27.87+24:20"
65+ , "1990-12-32T15:59:70"
66+ , "1937-01-1T12::27.87+24:20"
5567 ]
5668
5769spec :: Spec
@@ -82,6 +94,19 @@ spec = do
8294 (decodeAndValidateJson json :: ParseResult (JsonRepr ISO8601DateSchema))
8395 `shouldSatisfy` isValidationError
8496
97+ describe "ISO8601 time: " $ do
98+ for_ iso8601times $ \dt -> do
99+ it ("validates correct time - " <> dt ^. unpacked) $ do
100+ let json = "{\"time\": \"" <> (dt ^. unpacked . packedChars) <> "\" }"
101+ (decodeAndValidateJson json :: ParseResult (JsonRepr ISO8601TimeSchema))
102+ `shouldSatisfy` isValid
103+
104+ for_ invalidIso8601times $ \dt -> do
105+ it ("fails to validate incorrect time - " <> dt ^. unpacked) $ do
106+ let json = "{\"time\": \"" <> (dt ^. unpacked . packedChars) <> "\" }"
107+ (decodeAndValidateJson json :: ParseResult (JsonRepr ISO8601TimeSchema))
108+ `shouldSatisfy` isValidationError
109+
85110 describe "ISO8601 datetime: " $ do
86111 for_ iso8601datetimes $ \dt -> do
87112 it ("validates correct datetime - " <> dt ^. unpacked) $ do