1
1
mirror of https://github.com/qfpl/applied-fp-course.git synced 2024-12-02 08:53:20 +03:00
applied-fp-course/level06/tests/Test.hs
Sean Chalmers cccc88a650 Forgot the DbComment module.
Not sure at the moment how to weave that into the storyline for level05
and added some more explanation for level06
2017-08-24 14:53:08 +10:00

57 lines
1.6 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad (join)
import Test.Hspec
import Test.Hspec.Wai
import qualified System.Exit as Exit
import qualified FirstApp.Conf as Conf
import qualified FirstApp.DB as DB
import qualified FirstApp.Main as Main
import qualified FirstApp.Types as Types
import qualified FirstApp.AppM as AppM
main :: IO ()
main = do
let dieWith m = print m >> Exit.exitFailure
-- Keeping everything in sync with out larger application changes.
reqsE <- Main.prepareAppReqs
case reqsE of
Left err -> dieWith err
Right env -> do
let app' = pure ( Main.app env )
-- Write a function to clear the comments for a specific topic.
-- This will be run before each test is run.
flushTopic =
error "Flush topic not implemented"
-- Run the tests with a DB topic flush between each spec
hspec . with ( flushTopic >> app' ) $ do
-- AddRq Spec
describe "POST /topic/add" $ do
it "Should return 200 with well formed request" $ do
post "/fudge/add" "Fred" `shouldRespondWith` "Success"
it "Should 400 on empty input" $
post "/fudge/add" "" `shouldRespondWith` 400
-- ViewRq Spec
describe "GET /topic/view" $ do
it "Should return 200 with content" $ do
post "/fudge/add" "Fred"
get "/fudge/view" `shouldRespondWith` 200
-- ListRq Spec
describe "GET /list" $ do
it "Should return 200 with content" $ do
post "/fudge/add" "Fred"
get "/list" `shouldRespondWith` "[\"fudge\"]"