@@ -17,14 +17,14 @@ import Servant.Elm
1717import Test.Hspec (Spec, describe, hspec, it)
1818import Test.HUnit (Assertion, assertEqual)
1919
20−import Common (testApi)
20+import Common (testApi, SomeRecord(..), PolymorphicData(..))
2121
2222
2323main :: IO ()
2424main = hspec spec
2525
2626spec :: Test.Hspec.Spec
27−spec = do
27+spec =
2828 describe "encoding a simple api" $
2929 do it "does it" $
3030 do expected <-
@@ -122,6 +122,30 @@ spec = do
122122 })
123123 (Proxy :: Proxy ("one" :> Get '[JSON] Int)))
124124 generated `itemsShouldBe` expected
125+ it "works with polymorphic data" $
126+ do expected <-
127+ mapM
128+ (\(fpath, header) -> do
129+ source <- T.readFile fpath
130+ return (fpath, header, source))
131+ [ ( "test/elm-sources/getPolymorphicData.elm"
132+ , "module GetPolymorphicData exposing (..)\n\n" <>
133+ "import Http\n" <>
134+ "import Json.Decode exposing (..)\n" <>
135+ "import Url.Builder\n\n" <>
136+ "type PolymorphicData a b = PolymorphicData a b\n" <>
137+ "type SomeRecord = SomeRecord { recordId : Int, recordname : String }\n\n" <>
138+ "jsonDecPolymorphicData : Json.Decode.Decoder a -> Json.Decode.Decoder b -> Json.Decode.Decoder (PolymorphicData a b)\n"<>
139+ "jsonDecPolymorphicData _ _ = Debug.todo \"finish\"\n\n" <>
140+ "jsonDecSomeRecord : Json.Decode.Decoder SomeRecord\n"<>
141+ "jsonDecSomeRecord = Debug.todo \"finish\"\n\n\n")]
142+ let generated =
143+ map
144+ (<> "\n")
145+ (generateElmForAPIWith
146+ defElmOptions
147+ (Proxy :: Proxy ( "polymorphicData" :> Get '[JSON] (PolymorphicData [String] SomeRecord))))
148+ generated `itemsShouldBe` expected
125149
126150itemsShouldBe :: [Text] -> [(String, Text, Text)] -> IO ()
127151itemsShouldBe actual expected =
@@ -138,7 +162,7 @@ shouldBeDiff a (fpath,header,b) =
138162 (Diff.getGroupedDiff
139163 (lines (T.unpack actual))
140164 (lines (T.unpack expected))))
141− actual expected
165+ expected actual
142166 where
143167 actual = T.strip $ header <> a
144168 expected = T.strip b