@@ -18,13 +18,14 @@ import Test.Hspec (Spec, describe, hspec, it)
18import Test.HUnit (Assertion, assertEqual)
18import Test.HUnit (Assertion, assertEqual)
20import Common (testApi)
20import Common (testApi)
21+import PolymorphicData (SomeRecord(..), PolymorphicData(..))
23main :: IO ()
24main :: IO ()
24main = hspec spec
25main = hspec spec
26spec :: Test.Hspec.Spec
27spec :: Test.Hspec.Spec
28 describe "encoding a simple api" $
29 describe "encoding a simple api" $
29 do it "does it" $
30 do it "does it" $
30 do expected <-
31 do expected <-
@@ -122,6 +123,30 @@ spec = do
123 (Proxy :: Proxy ("one" :> Get '[JSON] Int)))
124 (Proxy :: Proxy ("one" :> Get '[JSON] Int)))
124 generated `itemsShouldBe` expected
125 generated `itemsShouldBe` expected
126+ it "works with polymorphic data" $
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" <>
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")]
146+ (generateElmForAPIWith
148+ (Proxy :: Proxy ( "polymorphicData" :> Get '[JSON] (PolymorphicData [String] SomeRecord))))
149+ generated `itemsShouldBe` expected
126itemsShouldBe :: [Text] -> [(String, Text, Text)] -> IO ()
151itemsShouldBe :: [Text] -> [(String, Text, Text)] -> IO ()
127itemsShouldBe actual expected =
152itemsShouldBe actual expected =
@@ -138,7 +163,7 @@ shouldBeDiff a (fpath,header,b) =
138 (Diff.getGroupedDiff
163 (Diff.getGroupedDiff
139 (lines (T.unpack actual))
164 (lines (T.unpack actual))
140 (lines (T.unpack expected))))
165 (lines (T.unpack expected))))
141− actual expected
166+ expected actual
143 actual = T.strip $ header <> a
168 actual = T.strip $ header <> a
144 expected = T.strip b
169 expected = T.strip b