@@ -32,6 +32,19 @@ iso8601dates = [ "1985-04-12" ]
32invalidIso8601dates :: [Text]
32invalidIso8601dates :: [Text]
33invalidIso8601dates = [ "1999-13-12" ]
33invalidIso8601dates = [ "1999-13-12" ]
35+type ISO8601TimeSchema = 'SchemaObject '[ '("time", 'SchemaText IsTime) ]
37+iso8601times :: [Text]
43+invalidIso8601times :: [Text]
35type ISO8601DateTimeSchema = 'SchemaObject '[ '("datetime", 'SchemaText IsDateTime) ]
48type ISO8601DateTimeSchema = 'SchemaObject '[ '("datetime", 'SchemaText IsDateTime) ]
37-- | Taken from ISO8601 RFC 3339
50-- | Taken from ISO8601 RFC 3339
@@ -47,11 +60,10 @@ iso8601datetimes =
48invalidIso8601datetimes :: [Text]
61invalidIso8601datetimes :: [Text]
49invalidIso8601datetimes =
62invalidIso8601datetimes =
50− [ "1985-04-29T23:20:50.52Z"
51− , "1996-12-129T16:39:57-08:00"
63+ [ "1996-13-129T16:39:57-08:00"
52 , "1990-2-31T23:59:60Z"
64 , "1990-2-31T23:59:60Z"
53− , "1990-12-31T15:59:70"
65+ , "1990-12-32T15:59:70"
54− , "1937-01-01T12:00:27.87+24:20"
66+ , "1937-01-1T12::27.87+24:20"
57spec :: Spec
69spec :: Spec
@@ -82,6 +94,19 @@ spec = do
82 (decodeAndValidateJson json :: ParseResult (JsonRepr ISO8601DateSchema))
94 (decodeAndValidateJson json :: ParseResult (JsonRepr ISO8601DateSchema))
83 `shouldSatisfy` isValidationError
95 `shouldSatisfy` isValidationError
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
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
85 describe "ISO8601 datetime: " $ do
110 describe "ISO8601 datetime: " $ do
86 for_ iso8601datetimes $ \dt -> do
111 for_ iso8601datetimes $ \dt -> do
87 it ("validates correct datetime - " <> dt ^. unpacked) $ do
112 it ("validates correct datetime - " <> dt ^. unpacked) $ do