@@ -18,13 +18,14 @@ import Test.Hspec (Spec, describe, hspec, it)
1818import Test.HUnit (Assertion, assertEqual)
1919
2020import Common (testApi)
21+import PolymorphicData (SomeRecord(..), PolymorphicData(..))
2122
2223
2324main :: IO ()
2425main = hspec spec
2526
2627spec :: Test.Hspec.Spec
27−spec = do
28+spec =
2829 describe "encoding a simple api" $
2930 do it "does it" $
3031 do expected <-
@@ -122,6 +123,30 @@ spec = do
122123 })
123124 (Proxy :: Proxy ("one" :> Get '[JSON] Int)))
124125 generated `itemsShouldBe` expected
126+ it "works with polymorphic data" $
127+ do expected <-
128+ mapM
129+ (\(fpath, header) -> do
130+ source <- T.readFile fpath
131+ return (fpath, header, source))
132+ [ ( "test/elm-sources/getPolymorphicData.elm"
133+ , "module GetPolymorphicData exposing (..)\n\n" <>
134+ "import Http\n" <>
135+ "import Json.Decode exposing (..)\n" <>
136+ "import Url.Builder\n\n" <>
137+ "type PolymorphicData a b = PolymorphicData a b\n" <>
138+ "type SomeRecord = SomeRecord { recordId : Int, recordname : String }\n\n" <>
139+ "jsonDecPolymorphicData : Json.Decode.Decoder a -> Json.Decode.Decoder b -> Json.Decode.Decoder (PolymorphicData a b)\n"<>
140+ "jsonDecPolymorphicData _ _ = Debug.todo \"finish\"\n\n" <>
141+ "jsonDecSomeRecord : Json.Decode.Decoder SomeRecord\n"<>
142+ "jsonDecSomeRecord = Debug.todo \"finish\"\n\n\n")]
143+ let generated =
144+ map
145+ (<> "\n")
146+ (generateElmForAPIWith
147+ defElmOptions
148+ (Proxy :: Proxy ( "polymorphicData" :> Get '[JSON] (PolymorphicData [String] SomeRecord))))
149+ generated `itemsShouldBe` expected
125150
126151itemsShouldBe :: [Text] -> [(String, Text, Text)] -> IO ()
127152itemsShouldBe actual expected =
@@ -138,7 +163,7 @@ shouldBeDiff a (fpath,header,b) =
138163 (Diff.getGroupedDiff
139164 (lines (T.unpack actual))
140165 (lines (T.unpack expected))))
141− actual expected
166+ expected actual
142167 where
143168 actual = T.strip $ header <> a
144169 expected = T.strip b