mirror of
https://github.com/qfpl/applied-fp-course.git
synced 2024-12-02 08:53:20 +03:00
cccc88a650
Not sure at the moment how to weave that into the storyline for level05 and added some more explanation for level06
57 lines
1.6 KiB
Haskell
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\"]"
|