Skip to content

Instantly share code, notes, and snippets.

@Decoherence
Last active August 29, 2015 14:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Decoherence/46a5390729557c83da06 to your computer and use it in GitHub Desktop.
Save Decoherence/46a5390729557c83da06 to your computer and use it in GitHub Desktop.
Haskell: Testing Spock web server using PostgreSQL backend and the 'users' library for user management & session handling.
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-}
module Main where
import Database.PostgreSQL.Simple
import Data.Aeson hiding (json)
import Data.Monoid
import Data.Text (pack)
import GHC.Generics
import Web.Spock.Safe
import Web.Users.Postgresql
import Web.Users.Types
data UserDetails = UserDetails
deriving (Show, Eq, Generic)
instance FromJSON UserDetails
instance ToJSON UserDetails
type AppUser = User UserDetails
testUser :: AppUser
testUser = User "qubit" "me@chrislynch.io" (makePassword "password") True UserDetails
database :: ConnectInfo
database = defaultConnectInfo
{ connectDatabase = "testing"
, connectPassword = "testing"
}
prepareDatabase :: IO ()
prepareDatabase = do
db <- connect database
destroyUserBackend db -- FIXME: Remove database reset (only for testing)
initUserBackend db
createUser db testUser
countUsers db >>= putStrLn . (++) "User count: " . show
tUser <- getUserById db 1 :: IO (Maybe (User UserDetails))
print tUser
main :: IO ()
main = do
prepareDatabase
runSpock 8080 $ spockT id $
do get root $
text "Hello World!"
get ("hello" <//> var) $ \name ->
text ("Hello " <> name <> "!")
get "json" $ json (toJSON testUser)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment