mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-18 17:57:11 +03:00
;web: tests: refactor, add a test for --forecast (#1390)
This commit is contained in:
parent
1f94aa1628
commit
3651a5f5f4
@ -6,6 +6,7 @@
|
||||
module Hledger.Web.Application
|
||||
( makeApplication
|
||||
, makeFoundation
|
||||
, makeFoundationWith
|
||||
) where
|
||||
|
||||
import Data.IORef (newIORef, writeIORef)
|
||||
@ -50,3 +51,11 @@ makeFoundation conf opts' = do
|
||||
s <- staticSite
|
||||
jref <- newIORef nulljournal
|
||||
return $ App conf s manager opts' jref
|
||||
|
||||
-- Make a Foundation with the given Journal as its state.
|
||||
makeFoundationWith :: Journal -> AppConfig DefaultEnv Extra -> WebOpts -> IO App
|
||||
makeFoundationWith j' conf opts' = do
|
||||
manager <- newManager defaultManagerSettings
|
||||
s <- staticSite
|
||||
jref <- newIORef j'
|
||||
return $ App conf s manager opts' jref
|
||||
|
@ -4,7 +4,7 @@ cabal-version: 1.12
|
||||
--
|
||||
-- see: https://github.com/sol/hpack
|
||||
--
|
||||
-- hash: 80d248f9e183a9f4f099aab192fd5041fe081ed554baa8ba48b8a3fc4ed777c3
|
||||
-- hash: 0c023ce93e25342762ee67e15231e3d07bff45c813ae6ad729c8b3823ab45a3e
|
||||
|
||||
name: hledger-web
|
||||
version: 1.19.99
|
||||
@ -236,6 +236,7 @@ test-suite test
|
||||
, hledger-lib
|
||||
, hledger-web
|
||||
, hspec
|
||||
, text
|
||||
, yesod
|
||||
, yesod-test
|
||||
if (flag(dev)) || (flag(library-only))
|
||||
|
@ -170,5 +170,6 @@ tests:
|
||||
- hledger
|
||||
- hledger-web
|
||||
- hspec
|
||||
- text
|
||||
- yesod
|
||||
- yesod-test
|
||||
|
@ -1,48 +1,44 @@
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE NoMonomorphismRestriction #-}
|
||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||
|
||||
module Main where
|
||||
|
||||
-- cabal missing-home-modules workaround from hledger-lib needed here ?
|
||||
-- {-# LANGUAGE PackageImports #-}
|
||||
|
||||
module Main where
|
||||
|
||||
import qualified Data.Text as T
|
||||
import Test.Hspec (hspec)
|
||||
import Yesod.Default.Config
|
||||
import Yesod.Test
|
||||
|
||||
import Hledger.Web.Application (makeFoundation)
|
||||
import Hledger.Web.Foundation
|
||||
import Hledger.Web.Settings (parseExtra)
|
||||
import Hledger.Web.WebOptions -- (defwebopts, cliopts_)
|
||||
-- import Hledger.Cli.CliOptions -- (defcliopts, reportspec_)
|
||||
-- import Hledger -- .Reports.ReportOptions (defreportopts, forecast_)
|
||||
import Hledger.Web
|
||||
import Hledger.Web.Application
|
||||
-- import Hledger.Web.Foundation
|
||||
import Hledger.Web.Import hiding (get, j)
|
||||
import Hledger.Cli hiding (tests)
|
||||
|
||||
|
||||
runTestsWith :: AppConfig DefaultEnv Extra -> WebOpts -> Journal -> YesodSpec App -> IO ()
|
||||
runTestsWith yesodconf hledgerwebopts j specs = do
|
||||
app <- makeFoundationWith j yesodconf hledgerwebopts
|
||||
hspec $ yesodSpec app specs
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
conf <- Yesod.Default.Config.loadConfig $
|
||||
(configSettings Testing){ csParseExtra = parseExtra }
|
||||
|
||||
foundation <- makeFoundation conf defwebopts
|
||||
hspec $ yesodSpec foundation specs
|
||||
-- https://hackage.haskell.org/package/yesod-test-1.6.10/docs/Yesod-Test.html
|
||||
-- http://hspec.github.io/writing-specs.html
|
||||
|
||||
-- run hledger-web with some forecasted transactions
|
||||
-- XXX problem: these tests use makeFoundation, bypassing the journal setup in Hledger.Web.Main
|
||||
-- d <- getCurrentDay
|
||||
-- let
|
||||
-- ropts = defreportopts{forecast_=Just nulldatespan}
|
||||
-- rspec = case reportOptsToSpec d ropts of
|
||||
-- Left e -> error $ "failed to set up report options for tests, shouldn't happen: " ++ show e
|
||||
-- Right rs -> rs
|
||||
-- foundationForecast <- makeFoundation conf
|
||||
-- defwebopts{cliopts_=defcliopts{file_=["hledger-web/tests/forecast.j"], reportspec_=rspec}}
|
||||
-- hspec $ yesodSpec foundationForecast specsForecast
|
||||
-- XXX these tests use makeFoundation, bypassing the startup code in Hledger.Web.Main
|
||||
|
||||
-- https://hackage.haskell.org/package/yesod-test/docs/Yesod-Test.html
|
||||
-- Be careful about the opts/files provided here, unusual combinations might cause problems.
|
||||
-- Eg journalReload can reload the user's default journal if cliopts{file_} is left empty.
|
||||
|
||||
specs :: YesodSpec App
|
||||
specs = do
|
||||
ydescribe "hledger-web basic functionality" $ do
|
||||
conf <- Yesod.Default.Config.loadConfig $ (configSettings Testing){ csParseExtra = parseExtra }
|
||||
|
||||
-- basic tests
|
||||
runTestsWith conf defwebopts nulljournal $ do
|
||||
ydescribe "hledger-web" $ do
|
||||
|
||||
yit "serves a reasonable-looking journal page" $ do
|
||||
get JournalR
|
||||
@ -54,22 +50,26 @@ specs = do
|
||||
statusIs 200
|
||||
bodyContains "accounts"
|
||||
|
||||
-- specsForecast :: YesodSpec App
|
||||
-- specsForecast = do
|
||||
-- ydescribe "hledger-web --forecast" $ do
|
||||
-- yit "serves a reasonable-looking journal page" $ do
|
||||
-- get JournalR
|
||||
-- statusIs 200
|
||||
-- bodyContains "Add a transaction"
|
||||
-- test with forecasted transactions
|
||||
d <- getCurrentDay
|
||||
let
|
||||
ropts = defreportopts{forecast_=Just nulldatespan}
|
||||
rspec = case reportOptsToSpec d ropts of
|
||||
Left e -> error $ "failed to set up report options for tests, shouldn't happen: " ++ show e
|
||||
Right rs -> rs
|
||||
copts = defcliopts{reportspec_=rspec, file_=[""]} -- non-empty, see file_ note above
|
||||
wopts = defwebopts{cliopts_=copts}
|
||||
j <- fmap (journalTransform copts) $ readJournal' (T.unlines -- PARTIAL: readJournal' should not fail
|
||||
["~ monthly"
|
||||
," assets 10"
|
||||
," income"
|
||||
])
|
||||
runTestsWith conf wopts j $ do
|
||||
ydescribe "hledger-web --forecast" $ do
|
||||
|
||||
yit "serves a journal page showing forecasted transactions" $ do
|
||||
get JournalR
|
||||
statusIs 200
|
||||
bodyContains "id=\"transaction-0-1\"" -- 0 indicates a fileless (forecasted) txn
|
||||
bodyContains "id=\"transaction-0-2\"" -- etc.
|
||||
|
||||
|
||||
|
||||
-- post "/" $ do
|
||||
-- addNonce
|
||||
-- fileByLabel "Choose a file" "tests/main.hs" "text/plain" -- talk about self-reference
|
||||
-- byLabel "What's on the file?" "Some Content"
|
||||
-- statusIs 200
|
||||
-- htmlCount ".message" 1
|
||||
-- htmlAllContain ".message" "Some Content"
|
||||
-- htmlAllContain ".message" "text/plain"
|
||||
|
Loading…
Reference in New Issue
Block a user