{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wno-missing-local-signatures #-}
module SpecHelper
( module SpecHelper
, module X
) where
import Test.Hspec as X
import Yesod.Core
import Yesod.Paginator as X
import Yesod.Paginator.Prelude as X
import Yesod.Paginator.Widgets as X
import Yesod.Test as X
data App = App
mkYesod "App" [parseRoutes|
/simple/#ItemsCount/#PerPage/#Natural SimpleR GET
/ellipsed/#ItemsCount/#PerPage/#Natural EllipsedR GET
/simple-param-name/#ItemsCount/#PerPage/#Natural/#PageParamName SimpleParamNameR GET
/ellipsed-param-name/#ItemsCount/#PerPage/#Natural/#PageParamName EllipsedParamNameR GET
|]
instance Yesod App
getSimpleR :: ItemsCount -> PerPage -> Natural -> Handler Html
getSimpleR total per elements = do
pages <- paginate per $ genericReplicate total ()
defaultLayout [whamlet|^{simple elements pages}|]
getEllipsedR :: ItemsCount -> PerPage -> Natural -> Handler Html
getEllipsedR total per elements = do
pages <- paginate per $ genericReplicate total ()
defaultLayout [whamlet|^{ellipsed elements pages}|]
getSimpleParamNameR
:: ItemsCount -> PerPage -> Natural -> PageParamName -> Handler Html
getSimpleParamNameR total per elements pageParamName = do
let
config = PaginationConfig
{ paginationConfigPerPage = per
, paginationConfigPageParamName = pageParamName
}
pages <- paginateWith config $ genericReplicate total ()
defaultLayout [whamlet|^{simpleWith config elements pages}|]
getEllipsedParamNameR
:: ItemsCount -> PerPage -> Natural -> PageParamName -> Handler Html
getEllipsedParamNameR total per elements pageParamName = do
let
config = PaginationConfig
{ paginationConfigPerPage = per
, paginationConfigPageParamName = pageParamName
}
pages <- paginateWith config $ genericReplicate total ()
defaultLayout [whamlet|^{ellipsedWith config elements pages}|]
withApp :: SpecWith (TestApp App) -> Spec
withApp = before $ pure (App, id)