1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- {-# LANGUAGE OverloadedStrings, TemplateHaskell, QuasiQuotes, TypeFamilies #-}
- {-# LANGUAGE EmptyDataDecls, FlexibleContexts, GADTs #-}
- {-# LANGUAGE GeneralizedNewtypeDeriving #-}
- {-# LANGUAGE MultiParamTypeClasses #-}
- {-# LANGUAGE CPP #-}
- module Yesod.PersistSpec where
- import Test.Hspec
- import Database.Persist.Sqlite
- import Network.Wai.Test
- import Yesod.Core
- import Data.Conduit
- import Blaze.ByteString.Builder.Char.Utf8 (fromText)
- import Yesod.Persist
- import Data.Text (Text)
- share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
- Person
- name Text
- |]
- data App = App
- { appConfig :: SqliteConf
- , appPool :: ConnectionPool
- }
- mkYesod "App" [parseRoutes|
- / HomeR GET
- |]
- instance Yesod App
- instance YesodPersist App where
- type YesodPersistBackend App = SqlBackend
- runDB = defaultRunDB appConfig appPool
- instance YesodPersistRunner App where
- getDBRunner = defaultGetDBRunner appPool
- getHomeR :: Handler TypedContent
- getHomeR = do
- runDB $ do
- runMigration migrateAll
- deleteWhere ([] :: [Filter Person])
- insert_ $ Person "Charlie"
- insert_ $ Person "Alice"
- insert_ $ Person "Bob"
- respondSourceDB typePlain $ selectSource [] [Asc PersonName] $= awaitForever toBuilder
- where
- toBuilder (Entity _ (Person name)) = do
- yield $ Chunk $ fromText name
- yield $ Chunk $ fromText "\n"
- yield Flush
- test :: String -> Session () -> Spec
- test name session = it name $ do
- let config = SqliteConf ":memory:" 1
- pool <- createPoolConfig config
- app <- toWaiApp $ App config pool
- runSession session app
- spec :: Spec
- spec = test "streaming" $ do
- sres <- request defaultRequest
- assertBody "Alice\nBob\nCharlie\n" sres
- assertStatus 200 sres
|