{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Main where
import Data.Aeson
import Data.Maybe (fromJust)
import Network.Wai.Test (SResponse (simpleBody))
import Test.Hspec
import Test.Hspec.Wai
import Tests.Versioning.Servant.Fixtures
import Versioning.Base
main :: IO ()
main = hspec $ with (pure app) $ do
let headers = [("Content-Type", "application/json")]
decodeV2 = fromJust . decode @(Foo V2)
describe "VersionedJSON" $ do
it "given the latest version returns latest version" $ do
res <- request "POST" "foo" headers fooJsonV2
liftIO $ decodeV2 (simpleBody res) `shouldBe` decodeV2 fooJsonV2
it "given a previous version returns latest version" $ do
res <- request "POST" "foo" headers fooJsonV0
liftIO $ decodeV2 (simpleBody res) `shouldBe` decodeV2 fooJsonV2