Merge pull request #57 from mtlstats/batch-edit
Allow editing of player/goalie YTD/lifetime stats at once
This commit is contained in:
commit
ddb9394ab7
|
@ -1,164 +0,0 @@
|
|||
{- |
|
||||
|
||||
mtlstats
|
||||
Copyright (C) 2019 Rhéal Lamothe
|
||||
<rheal.lamothe@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
-}
|
||||
|
||||
module Mtlstats.Actions.EditGoalie
|
||||
( editGoalieNumber
|
||||
, editGoalieName
|
||||
, editGoalieYtdGames
|
||||
, editGoalieYtdMins
|
||||
, editGoalieYtdGoals
|
||||
, editGoalieYtdWins
|
||||
, editGoalieYtdLosses
|
||||
, editGoalieYtdTies
|
||||
, editGoalieLtGames
|
||||
, editGoalieLtMins
|
||||
, editGoalieLtGoals
|
||||
, editGoalieLtWins
|
||||
, editGoalieLtLosses
|
||||
, editGoalieLtTies
|
||||
) where
|
||||
|
||||
import Control.Monad (void)
|
||||
import Data.Maybe (fromMaybe)
|
||||
import Lens.Micro ((^.), (&), (.~), (%~))
|
||||
|
||||
import Mtlstats.Types
|
||||
import Mtlstats.Util
|
||||
|
||||
-- | Edits a goalie's number
|
||||
editGoalieNumber
|
||||
:: Int
|
||||
-- ^ New goalie number
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieNumber num = editGoalie (gNumber .~ num) EGMenu
|
||||
|
||||
-- | Edits a goalie's name
|
||||
editGoalieName
|
||||
:: String
|
||||
-- ^ The new name
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieName name = editGoalie (gName .~ name) EGMenu
|
||||
|
||||
-- | Edits a goalie's YTD games
|
||||
editGoalieYtdGames
|
||||
:: Int
|
||||
-- ^ The number of games played
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieYtdGames games = editGoalie (gYtd.gsGames .~ games) EGYtd
|
||||
|
||||
-- | Edits a goalie's YTD minutes
|
||||
editGoalieYtdMins
|
||||
:: Int
|
||||
-- ^ The number of minutes played
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieYtdMins mins = editGoalie (gYtd.gsMinsPlayed .~ mins) EGYtd
|
||||
|
||||
-- | Edits a goalie's YTD goals allowed
|
||||
editGoalieYtdGoals
|
||||
:: Int
|
||||
-- ^ The number of goals
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieYtdGoals goals = editGoalie (gYtd.gsGoalsAllowed .~ goals) EGYtd
|
||||
|
||||
-- | Edits a goalie's YTD wins
|
||||
editGoalieYtdWins
|
||||
:: Int
|
||||
-- ^ The number of wins
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieYtdWins wins = editGoalie (gYtd.gsWins .~ wins) EGYtd
|
||||
|
||||
-- | Edits a goalie's YTD losses
|
||||
editGoalieYtdLosses
|
||||
:: Int
|
||||
-- ^ The number of losses
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieYtdLosses losses = editGoalie (gYtd.gsLosses .~ losses) EGYtd
|
||||
|
||||
-- | Edits a goalie's YTD ties
|
||||
editGoalieYtdTies
|
||||
:: Int
|
||||
-- ^ The number of ties
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieYtdTies ties = editGoalie (gYtd.gsTies .~ ties) EGYtd
|
||||
|
||||
-- | Edits a goalie's lifetime games played
|
||||
editGoalieLtGames
|
||||
:: Int
|
||||
-- ^ The number of games
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieLtGames games = editGoalie (gLifetime.gsGames .~ games) EGLifetime
|
||||
|
||||
-- | Edits a goalie's lifetime minutes played
|
||||
editGoalieLtMins
|
||||
:: Int
|
||||
-- ^ The number of minutes
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieLtMins mins = editGoalie (gLifetime.gsMinsPlayed .~ mins) EGLifetime
|
||||
|
||||
-- | Edits a goalie's lifetime goals allowed
|
||||
editGoalieLtGoals
|
||||
:: Int
|
||||
-- ^ The number of goals
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieLtGoals goals = editGoalie (gLifetime.gsGoalsAllowed .~ goals) EGLifetime
|
||||
|
||||
-- | Edits a goalie's lifetime wins
|
||||
editGoalieLtWins
|
||||
:: Int
|
||||
-- ^ The number of wins
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieLtWins wins = editGoalie (gLifetime.gsWins .~ wins) EGLifetime
|
||||
|
||||
-- | Edits a goalie's lifetime losses
|
||||
editGoalieLtLosses
|
||||
:: Int
|
||||
-- ^ The number of losses
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieLtLosses losses = editGoalie (gLifetime.gsLosses .~ losses) EGLifetime
|
||||
|
||||
-- | Edits a goalie's lifetime ties
|
||||
editGoalieLtTies
|
||||
:: Int
|
||||
-- ^ The number of ties
|
||||
-> ProgState
|
||||
-> ProgState
|
||||
editGoalieLtTies ties = editGoalie (gLifetime.gsTies .~ ties) EGLifetime
|
||||
|
||||
editGoalie :: (Goalie -> Goalie) -> EditGoalieMode -> ProgState -> ProgState
|
||||
editGoalie f mode s = fromMaybe s $ do
|
||||
gid <- s^.progMode.editGoalieStateL.egsSelectedGoalie
|
||||
void $ nth gid $ s^.database.dbGoalies
|
||||
Just $ s
|
||||
& database.dbGoalies %~ modifyNth gid f
|
||||
& progMode.editGoalieStateL.egsMode .~ mode
|
|
@ -46,23 +46,23 @@ selectC = promptController goalieToEditPrompt
|
|||
|
||||
editC :: EditGoalieMode -> Controller
|
||||
editC = \case
|
||||
EGMenu -> menuC
|
||||
EGNumber -> numberC
|
||||
EGName -> nameC
|
||||
EGYtd -> ytdMenuC
|
||||
EGLifetime -> lifetimeMenuC
|
||||
EGYtdGames -> ytdGamesC
|
||||
EGYtdMins -> ytdMinsC
|
||||
EGYtdGoals -> ytdGoalsC
|
||||
EGYtdWins -> ytdWinsC
|
||||
EGYtdLosses -> ytdLossesC
|
||||
EGYtdTies -> ytdTiesC
|
||||
EGLtGames -> ltGamesC
|
||||
EGLtMins -> ltMinsC
|
||||
EGLtGoals -> ltGoalsC
|
||||
EGLtWins -> ltWinsC
|
||||
EGLtLosses -> ltLossesC
|
||||
EGLtTies -> ltTiesC
|
||||
EGMenu -> menuC
|
||||
EGNumber -> numberC
|
||||
EGName -> nameC
|
||||
EGYtd -> ytdMenuC
|
||||
EGLifetime -> lifetimeMenuC
|
||||
EGYtdGames b -> ytdGamesC b
|
||||
EGYtdMins b -> ytdMinsC b
|
||||
EGYtdGoals b -> ytdGoalsC b
|
||||
EGYtdWins b -> ytdWinsC b
|
||||
EGYtdLosses b -> ytdLossesC b
|
||||
EGYtdTies -> ytdTiesC
|
||||
EGLtGames b -> ltGamesC b
|
||||
EGLtMins b -> ltMinsC b
|
||||
EGLtGoals b -> ltGoalsC b
|
||||
EGLtWins b -> ltWinsC b
|
||||
EGLtLosses b -> ltLossesC b
|
||||
EGLtTies -> ltTiesC
|
||||
|
||||
menuC :: Controller
|
||||
menuC = menuControllerWith header editGoalieMenu
|
||||
|
@ -79,38 +79,38 @@ ytdMenuC = menuControllerWith header editGoalieYtdMenu
|
|||
lifetimeMenuC :: Controller
|
||||
lifetimeMenuC = menuControllerWith header editGoalieLtMenu
|
||||
|
||||
ytdGamesC :: Controller
|
||||
ytdGamesC = promptController editGoalieYtdGamesPrompt
|
||||
ytdGamesC :: Bool -> Controller
|
||||
ytdGamesC = promptController . editGoalieYtdGamesPrompt
|
||||
|
||||
ytdMinsC :: Controller
|
||||
ytdMinsC = promptController editGoalieYtdMinsPrompt
|
||||
ytdMinsC :: Bool -> Controller
|
||||
ytdMinsC = promptController . editGoalieYtdMinsPrompt
|
||||
|
||||
ytdGoalsC :: Controller
|
||||
ytdGoalsC = promptController editGoalieYtdGoalsPrompt
|
||||
ytdGoalsC :: Bool -> Controller
|
||||
ytdGoalsC = promptController . editGoalieYtdGoalsPrompt
|
||||
|
||||
ytdWinsC :: Controller
|
||||
ytdWinsC = promptController editGoalieYtdWinsPrompt
|
||||
ytdWinsC :: Bool -> Controller
|
||||
ytdWinsC = promptController . editGoalieYtdWinsPrompt
|
||||
|
||||
ytdLossesC :: Controller
|
||||
ytdLossesC = promptController editGoalieYtdLossesPrompt
|
||||
ytdLossesC :: Bool -> Controller
|
||||
ytdLossesC = promptController . editGoalieYtdLossesPrompt
|
||||
|
||||
ytdTiesC :: Controller
|
||||
ytdTiesC = promptController editGoalieYtdTiesPrompt
|
||||
|
||||
ltGamesC :: Controller
|
||||
ltGamesC = promptController editGoalieLtGamesPrompt
|
||||
ltGamesC :: Bool -> Controller
|
||||
ltGamesC = promptController . editGoalieLtGamesPrompt
|
||||
|
||||
ltMinsC :: Controller
|
||||
ltMinsC = promptController editGoalieLtMinsPrompt
|
||||
ltMinsC :: Bool -> Controller
|
||||
ltMinsC = promptController . editGoalieLtMinsPrompt
|
||||
|
||||
ltGoalsC :: Controller
|
||||
ltGoalsC = promptController editGoalieLtGoalsPrompt
|
||||
ltGoalsC :: Bool -> Controller
|
||||
ltGoalsC = promptController . editGoalieLtGoalsPrompt
|
||||
|
||||
ltWinsC :: Controller
|
||||
ltWinsC = promptController editGoalieLtWinsPrompt
|
||||
ltWinsC :: Bool -> Controller
|
||||
ltWinsC = promptController . editGoalieLtWinsPrompt
|
||||
|
||||
ltLossesC :: Controller
|
||||
ltLossesC = promptController editGoalieLtLossesPrompt
|
||||
ltLossesC :: Bool -> Controller
|
||||
ltLossesC = promptController . editGoalieLtLossesPrompt
|
||||
|
||||
ltTiesC :: Controller
|
||||
ltTiesC = promptController editGoalieLtTiesPrompt
|
||||
|
|
|
@ -38,18 +38,18 @@ editPlayerC :: EditPlayerState -> Controller
|
|||
editPlayerC eps
|
||||
| null $ eps^.epsSelectedPlayer = selectPlayerC
|
||||
| otherwise = case eps^.epsMode of
|
||||
EPMenu -> menuC
|
||||
EPNumber -> numberC
|
||||
EPName -> nameC
|
||||
EPPosition -> positionC
|
||||
EPYtd -> ytdC
|
||||
EPLifetime -> lifetimeC
|
||||
EPYtdGoals -> ytdGoalsC
|
||||
EPYtdAssists -> ytdAssistsC
|
||||
EPYtdPMin -> ytdPMinC
|
||||
EPLtGoals -> ltGoalsC
|
||||
EPLtAssists -> ltAssistsC
|
||||
EPLtPMin -> ltPMinC
|
||||
EPMenu -> menuC
|
||||
EPNumber -> numberC
|
||||
EPName -> nameC
|
||||
EPPosition -> positionC
|
||||
EPYtd -> ytdC
|
||||
EPLifetime -> lifetimeC
|
||||
EPYtdGoals b -> ytdGoalsC b
|
||||
EPYtdAssists b -> ytdAssistsC b
|
||||
EPYtdPMin -> ytdPMinC
|
||||
EPLtGoals b -> ltGoalsC b
|
||||
EPLtAssists b -> ltAssistsC b
|
||||
EPLtPMin -> ltPMinC
|
||||
|
||||
selectPlayerC :: Controller
|
||||
selectPlayerC = promptController playerToEditPrompt
|
||||
|
@ -72,20 +72,20 @@ ytdC = menuControllerWith header editPlayerYtdMenu
|
|||
lifetimeC :: Controller
|
||||
lifetimeC = menuControllerWith header editPlayerLtMenu
|
||||
|
||||
ytdGoalsC :: Controller
|
||||
ytdGoalsC = promptController editPlayerYtdGoalsPrompt
|
||||
ytdGoalsC :: Bool -> Controller
|
||||
ytdGoalsC = promptController . editPlayerYtdGoalsPrompt
|
||||
|
||||
ytdAssistsC :: Controller
|
||||
ytdAssistsC = promptController editPlayerYtdAssistsPrompt
|
||||
ytdAssistsC :: Bool -> Controller
|
||||
ytdAssistsC = promptController . editPlayerYtdAssistsPrompt
|
||||
|
||||
ytdPMinC :: Controller
|
||||
ytdPMinC = promptController editPlayerYtdPMinPrompt
|
||||
|
||||
ltGoalsC :: Controller
|
||||
ltGoalsC = promptController editPlayerLtGoalsPrompt
|
||||
ltGoalsC :: Bool -> Controller
|
||||
ltGoalsC = promptController . editPlayerLtGoalsPrompt
|
||||
|
||||
ltAssistsC :: Controller
|
||||
ltAssistsC = promptController editPlayerLtAssistsPrompt
|
||||
ltAssistsC :: Bool -> Controller
|
||||
ltAssistsC = promptController . editPlayerLtAssistsPrompt
|
||||
|
||||
ltPMinC :: Controller
|
||||
ltPMinC = promptController editPlayerLtPMinPrompt
|
||||
|
|
|
@ -51,13 +51,14 @@ editGoalieMenu = Menu "*** EDIT GOALTENDER ***" () $ map
|
|||
editGoalieYtdMenu :: Menu ()
|
||||
editGoalieYtdMenu = editMenu "*** EDIT GOALTENDER YEAR-TO-DATE ***"
|
||||
-- key, label, value
|
||||
[ ( '1', "Edit YTD games", EGYtdGames )
|
||||
, ( '2', "Edit YTD minutes", EGYtdMins )
|
||||
, ( '3', "Edit YTD goals", EGYtdGoals )
|
||||
, ( '4', "Edit YTD wins", EGYtdWins )
|
||||
, ( '5', "Edit YTD losses", EGYtdLosses )
|
||||
, ( '6', "Edit YTD ties", EGYtdTies )
|
||||
, ( 'R', "Return to edit menu", EGMenu )
|
||||
[ ( '1', "Edit all YTD stats", EGYtdGames True )
|
||||
, ( '2', "Edit YTD games", EGYtdGames False )
|
||||
, ( '3', "Edit YTD minutes", EGYtdMins False )
|
||||
, ( '4', "Edit YTD goals", EGYtdGoals False )
|
||||
, ( '5', "Edit YTD wins", EGYtdWins False )
|
||||
, ( '6', "Edit YTD losses", EGYtdLosses False )
|
||||
, ( '7', "Edit YTD ties", EGYtdTies )
|
||||
, ( 'R', "Return to edit menu", EGMenu )
|
||||
]
|
||||
|
||||
-- | The 'Goalie' lifetime edit menu
|
||||
|
@ -65,13 +66,14 @@ editGoalieLtMenu :: Menu ()
|
|||
editGoalieLtMenu = editMenu
|
||||
"*** EDIT GOALTENDER LIFETIME ***"
|
||||
-- key, label, value
|
||||
[ ( '1', "Edit lifetime games", EGLtGames )
|
||||
, ( '2', "Edit lifetime minutes", EGLtMins )
|
||||
, ( '3', "Edit lifetime goals", EGLtGoals )
|
||||
, ( '4', "Edit lifetime wins", EGLtWins )
|
||||
, ( '5', "Edit lifetime losses", EGLtLosses )
|
||||
, ( '6', "Edit lifetime ties", EGLtTies )
|
||||
, ( 'R', "Return to edit menu", EGMenu )
|
||||
[ ( '1', "Edit all lifetime stats", EGLtGames True )
|
||||
, ( '2', "Edit lifetime games", EGLtGames False )
|
||||
, ( '3', "Edit lifetime minutes", EGLtMins False )
|
||||
, ( '4', "Edit lifetime goals", EGLtGoals False )
|
||||
, ( '5', "Edit lifetime wins", EGLtWins False )
|
||||
, ( '6', "Edit lifetime losses", EGLtLosses False )
|
||||
, ( '7', "Edit lifetime ties", EGLtTies )
|
||||
, ( 'R', "Return to edit menu", EGMenu )
|
||||
]
|
||||
|
||||
editMenu :: String -> [(Char, String, EditGoalieMode)] -> Menu ()
|
||||
|
|
|
@ -53,10 +53,11 @@ editPlayerYtdMenu :: Menu ()
|
|||
editPlayerYtdMenu = editMenu
|
||||
"*** EDIT PLAYER YEAR-TO-DATE ***"
|
||||
-- key, label, value
|
||||
[ ( '1', "Edit YTD goals", EPYtdGoals )
|
||||
, ( '2', "Edit YTD assists", EPYtdAssists )
|
||||
, ( '3', "Edit YTD penalty mins", EPYtdPMin )
|
||||
, ( 'R', "Return to player edit menu", EPMenu )
|
||||
[ ( '1', "Edit all YTD stats", EPYtdGoals True )
|
||||
, ( '2', "Edit YTD goals", EPYtdGoals False )
|
||||
, ( '3', "Edit YTD assists", EPYtdAssists False )
|
||||
, ( '4', "Edit YTD penalty mins", EPYtdPMin )
|
||||
, ( 'R', "Return to player edit menu", EPMenu )
|
||||
]
|
||||
|
||||
-- | The 'Player' lifetime stats edit menu
|
||||
|
@ -64,10 +65,11 @@ editPlayerLtMenu :: Menu ()
|
|||
editPlayerLtMenu = editMenu
|
||||
"*** EDIT PLAYER LIFETIME ***"
|
||||
-- key, label, value
|
||||
[ ( '1', "Edit lifetime goals", EPLtGoals )
|
||||
, ( '2', "Edit lifetime assits", EPLtAssists )
|
||||
, ( '3', "Edit lifetime penalty mins", EPLtPMin )
|
||||
, ( 'R', "Return to edit player menu", EPMenu )
|
||||
[ ( '1', "Edit all lifetime stats", EPLtGoals True )
|
||||
, ( '2', "Edit lifetime goals", EPLtGoals False )
|
||||
, ( '3', "Edit lifetime assits", EPLtAssists False )
|
||||
, ( '4', "Edit lifetime penalty mins", EPLtPMin )
|
||||
, ( 'R', "Return to edit player menu", EPMenu )
|
||||
]
|
||||
|
||||
editMenu :: String -> [(Char, String, EditPlayerMode)] -> Menu ()
|
||||
|
|
|
@ -31,6 +31,7 @@ module Mtlstats.Prompt (
|
|||
ucStrPrompt,
|
||||
namePrompt,
|
||||
numPrompt,
|
||||
numPromptWithFallback,
|
||||
selectPrompt,
|
||||
-- * Individual prompts
|
||||
playerNumPrompt,
|
||||
|
@ -47,7 +48,6 @@ import Control.Monad (when)
|
|||
import Control.Monad.Extra (whenJust)
|
||||
import Control.Monad.Trans.State (gets, modify)
|
||||
import Data.Char (isDigit, toUpper)
|
||||
import Data.Foldable (forM_)
|
||||
import Lens.Micro ((^.), (&), (.~), (?~), (%~))
|
||||
import Lens.Micro.Extras (view)
|
||||
import Text.Read (readMaybe)
|
||||
|
@ -145,12 +145,25 @@ numPrompt
|
|||
-> (Int -> Action ())
|
||||
-- ^ The callback function for the result
|
||||
-> Prompt
|
||||
numPrompt pStr act = Prompt
|
||||
numPrompt pStr = numPromptWithFallback pStr $ return ()
|
||||
|
||||
-- | Builds a numeric prompt with a fallback action
|
||||
numPromptWithFallback
|
||||
:: String
|
||||
-- ^ The prompt string
|
||||
-> Action ()
|
||||
-- ^ The action to call on invalid (or blank) input
|
||||
-> (Int -> Action ())
|
||||
-- ^ The callback function for the result
|
||||
-> Prompt
|
||||
numPromptWithFallback pStr fallback act = Prompt
|
||||
{ promptDrawer = drawSimplePrompt pStr
|
||||
, promptProcessChar = \ch str -> if isDigit ch
|
||||
then str ++ [ch]
|
||||
else str
|
||||
, promptAction = \inStr -> forM_ (readMaybe inStr) act
|
||||
, promptAction = \inStr -> case readMaybe inStr of
|
||||
Nothing -> fallback
|
||||
Just n -> act n
|
||||
, promptSpecialKey = const $ return ()
|
||||
}
|
||||
|
||||
|
|
|
@ -37,12 +37,13 @@ module Mtlstats.Prompt.EditGoalie
|
|||
, editGoalieLtTiesPrompt
|
||||
) where
|
||||
|
||||
import Control.Monad.Trans.State (modify)
|
||||
import Lens.Micro ((.~))
|
||||
import Control.Monad.Extra (whenJustM)
|
||||
import Control.Monad.Trans.State (gets, modify)
|
||||
import Lens.Micro ((^.), (.~), (%~))
|
||||
|
||||
import Mtlstats.Actions.EditGoalie
|
||||
import Mtlstats.Prompt
|
||||
import Mtlstats.Types
|
||||
import Mtlstats.Util
|
||||
|
||||
-- | Prompt to select a 'Goalie' for editing
|
||||
goalieToEditPrompt :: Prompt
|
||||
|
@ -51,70 +52,150 @@ goalieToEditPrompt = selectGoaliePrompt "Goalie to edit: " $
|
|||
|
||||
-- | Prompt to edit a goalie's number
|
||||
editGoalieNumberPrompt :: Prompt
|
||||
editGoalieNumberPrompt = numPrompt "Goalie number: " $
|
||||
modify . editGoalieNumber
|
||||
editGoalieNumberPrompt = editNum "Goalie number: " EGMenu
|
||||
(gNumber .~)
|
||||
|
||||
-- | Prompt to edit a goalie's name
|
||||
editGoalieNamePrompt :: Prompt
|
||||
editGoalieNamePrompt = namePrompt "Goalie name: " $
|
||||
modify . editGoalieName
|
||||
editGoalieNamePrompt = namePrompt "Goalie name: " $ \name ->
|
||||
if null name
|
||||
then goto EGMenu
|
||||
else editGoalie EGMenu $ gName .~ name
|
||||
|
||||
-- | Prompt to edit a goalie's YTD games played
|
||||
editGoalieYtdGamesPrompt :: Prompt
|
||||
editGoalieYtdGamesPrompt = numPrompt "Year-to-date games played: " $
|
||||
modify . editGoalieYtdGames
|
||||
editGoalieYtdGamesPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieYtdGamesPrompt batchMode =
|
||||
editNum "Year-to-date games played: " mode
|
||||
(gYtd.gsGames .~)
|
||||
where
|
||||
mode = if batchMode then EGYtdMins True else EGYtd
|
||||
|
||||
-- | Prompt to edit a goalie's YTD minutes played
|
||||
editGoalieYtdMinsPrompt :: Prompt
|
||||
editGoalieYtdMinsPrompt = numPrompt "Year-to-date minutes played: " $
|
||||
modify . editGoalieYtdMins
|
||||
editGoalieYtdMinsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieYtdMinsPrompt batchMode =
|
||||
editNum "Year-to-date minutes played: " mode
|
||||
(gYtd.gsMinsPlayed .~)
|
||||
where
|
||||
mode = if batchMode then EGYtdGoals True else EGYtd
|
||||
|
||||
-- | Prompt to edit a goalie's YTD goales allowed
|
||||
editGoalieYtdGoalsPrompt :: Prompt
|
||||
editGoalieYtdGoalsPrompt = numPrompt "Year-to-date goals allowed: " $
|
||||
modify . editGoalieYtdGoals
|
||||
editGoalieYtdGoalsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieYtdGoalsPrompt batchMode =
|
||||
editNum "Year-to-date goals allowed: " mode
|
||||
(gYtd.gsGoalsAllowed .~)
|
||||
where
|
||||
mode = if batchMode then EGYtdWins True else EGYtd
|
||||
|
||||
-- | Prompt to edit a goalie's YTD wins
|
||||
editGoalieYtdWinsPrompt :: Prompt
|
||||
editGoalieYtdWinsPrompt = numPrompt "Year-to-date wins: " $
|
||||
modify . editGoalieYtdWins
|
||||
editGoalieYtdWinsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieYtdWinsPrompt batchMode =
|
||||
editNum "Year-to-date wins: " mode
|
||||
(gYtd.gsWins .~)
|
||||
where
|
||||
mode = if batchMode then EGYtdLosses True else EGYtd
|
||||
|
||||
-- | Prompt to edit a goalie's YTD losses
|
||||
editGoalieYtdLossesPrompt :: Prompt
|
||||
editGoalieYtdLossesPrompt = numPrompt "Year-to-date losses: " $
|
||||
modify . editGoalieYtdLosses
|
||||
editGoalieYtdLossesPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieYtdLossesPrompt batchMode =
|
||||
editNum "Year-to-date losses: " mode
|
||||
(gYtd.gsLosses .~)
|
||||
where
|
||||
mode = if batchMode then EGYtdTies else EGYtd
|
||||
|
||||
-- | Prompt to edit a goalie's YTD ties
|
||||
editGoalieYtdTiesPrompt :: Prompt
|
||||
editGoalieYtdTiesPrompt = numPrompt "Year-to-date ties: " $
|
||||
modify . editGoalieYtdTies
|
||||
editGoalieYtdTiesPrompt = editNum "Year-to-date ties: " EGYtd
|
||||
(gYtd.gsTies .~)
|
||||
|
||||
-- | Prompt to edit a goalie's lifetime games played
|
||||
editGoalieLtGamesPrompt :: Prompt
|
||||
editGoalieLtGamesPrompt = numPrompt "Lifetime games played: " $
|
||||
modify . editGoalieLtGames
|
||||
editGoalieLtGamesPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieLtGamesPrompt batchMode =
|
||||
editNum "Lifetime games played: " mode
|
||||
(gLifetime.gsGames .~)
|
||||
where
|
||||
mode = if batchMode then EGLtMins True else EGLifetime
|
||||
|
||||
-- | Prompt to edit a goalie's lifetime minutes played
|
||||
editGoalieLtMinsPrompt :: Prompt
|
||||
editGoalieLtMinsPrompt = numPrompt "Lifetime minutes played: " $
|
||||
modify . editGoalieLtMins
|
||||
editGoalieLtMinsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieLtMinsPrompt batchMode =
|
||||
editNum "Lifetime minutes played: " mode
|
||||
(gLifetime.gsMinsPlayed .~)
|
||||
where
|
||||
mode = if batchMode then EGLtGoals True else EGLifetime
|
||||
|
||||
-- | Prompt to edit a goalie's lifetime goals allowed
|
||||
editGoalieLtGoalsPrompt :: Prompt
|
||||
editGoalieLtGoalsPrompt = numPrompt "Lifetime goals allowed: " $
|
||||
modify . editGoalieLtGoals
|
||||
editGoalieLtGoalsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieLtGoalsPrompt batchMode =
|
||||
editNum "Lifetime goals allowed: " mode
|
||||
(gLifetime.gsGoalsAllowed .~)
|
||||
where
|
||||
mode = if batchMode then EGLtWins True else EGLifetime
|
||||
|
||||
-- | Prompt to edit a goalie's lifetime wins
|
||||
editGoalieLtWinsPrompt :: Prompt
|
||||
editGoalieLtWinsPrompt = numPrompt "Lifetime wins: " $
|
||||
modify . editGoalieLtWins
|
||||
editGoalieLtWinsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieLtWinsPrompt batchMode =
|
||||
editNum "Lifetime wins: " mode
|
||||
(gLifetime.gsWins .~)
|
||||
where
|
||||
mode = if batchMode then EGLtLosses True else EGLifetime
|
||||
|
||||
-- | Prompt to edit a goalie's lifetime losses
|
||||
editGoalieLtLossesPrompt :: Prompt
|
||||
editGoalieLtLossesPrompt = numPrompt "Lifetime losses: " $
|
||||
modify . editGoalieLtLosses
|
||||
editGoalieLtLossesPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates whether or not we're in batch mode
|
||||
-> Prompt
|
||||
editGoalieLtLossesPrompt batchMode =
|
||||
editNum "Lifetime losses: " mode
|
||||
(gLifetime.gsLosses .~)
|
||||
where
|
||||
mode = if batchMode then EGLtTies else EGLifetime
|
||||
|
||||
-- | Prompt to edit a goalie's lifetime ties
|
||||
editGoalieLtTiesPrompt :: Prompt
|
||||
editGoalieLtTiesPrompt = numPrompt "Lifetime ties: " $
|
||||
modify . editGoalieLtTies
|
||||
editGoalieLtTiesPrompt = editNum "Lifetime ties: " EGLifetime
|
||||
(gLifetime.gsTies .~)
|
||||
|
||||
editNum
|
||||
:: String
|
||||
-> EditGoalieMode
|
||||
-> (Int -> Goalie -> Goalie)
|
||||
-> Prompt
|
||||
editNum pStr mode f = numPromptWithFallback pStr
|
||||
(goto mode)
|
||||
(editGoalie mode . f)
|
||||
|
||||
editGoalie :: EditGoalieMode -> (Goalie -> Goalie) -> Action ()
|
||||
editGoalie mode f =
|
||||
whenJustM (gets (^.progMode.editGoalieStateL.egsSelectedGoalie)) $ \gid -> do
|
||||
modify $ database.dbGoalies %~ modifyNth gid f
|
||||
goto mode
|
||||
|
||||
goto :: EditGoalieMode -> Action ()
|
||||
goto = modify . (progMode.editGoalieStateL.egsMode .~)
|
||||
|
|
|
@ -41,52 +41,87 @@ import Mtlstats.Util
|
|||
|
||||
-- | Prompt to edit a player's number
|
||||
editPlayerNumPrompt :: Prompt
|
||||
editPlayerNumPrompt = numPrompt "Player number: " $
|
||||
editPlayer EPMenu . (pNumber .~)
|
||||
editPlayerNumPrompt = editNum "Player number: " EPMenu
|
||||
(pNumber .~)
|
||||
|
||||
-- | Prompt to edit a player's name
|
||||
editPlayerNamePrompt :: Prompt
|
||||
editPlayerNamePrompt = namePrompt "Player name: " $
|
||||
editPlayer EPMenu . (pName .~)
|
||||
editPlayerNamePrompt = namePrompt "Player name: " $ \name ->
|
||||
if null name
|
||||
then goto EPMenu
|
||||
else editPlayer EPMenu $ pName .~ name
|
||||
|
||||
-- | Prompt to edit a player's position
|
||||
editPlayerPosPrompt :: Prompt
|
||||
editPlayerPosPrompt = ucStrPrompt "Player position: " $
|
||||
editPlayer EPMenu . (pPosition .~)
|
||||
editPlayerPosPrompt = ucStrPrompt "Player position: " $ \pos ->
|
||||
if null pos
|
||||
then goto EPMenu
|
||||
else editPlayer EPMenu $ pPosition .~ pos
|
||||
|
||||
-- | Prompt to edit a player's year-to-date goals
|
||||
editPlayerYtdGoalsPrompt :: Prompt
|
||||
editPlayerYtdGoalsPrompt = numPrompt "Year-to-date goals: " $
|
||||
editPlayer EPYtd . (pYtd.psGoals .~)
|
||||
editPlayerYtdGoalsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates wheter or not we're editing in batch mode
|
||||
-> Prompt
|
||||
editPlayerYtdGoalsPrompt batchMode = editNum "Year-to-date goals: " mode
|
||||
(pYtd.psGoals .~)
|
||||
where
|
||||
mode = if batchMode then EPYtdAssists True else EPYtd
|
||||
|
||||
-- | Prompt to edit a player's year-to-date assists
|
||||
editPlayerYtdAssistsPrompt :: Prompt
|
||||
editPlayerYtdAssistsPrompt = numPrompt "Year-to-date assists: " $
|
||||
editPlayer EPYtd . (pYtd.psAssists .~)
|
||||
editPlayerYtdAssistsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates wheter or not we're editing in batch mode
|
||||
-> Prompt
|
||||
editPlayerYtdAssistsPrompt batchMode = editNum "Year-to-date assists: " mode
|
||||
(pYtd.psAssists .~)
|
||||
where
|
||||
mode = if batchMode then EPYtdPMin else EPYtd
|
||||
|
||||
-- | Prompt to edit a player's year-to-date penalty minutes
|
||||
editPlayerYtdPMinPrompt :: Prompt
|
||||
editPlayerYtdPMinPrompt = numPrompt "Year-to-date penalty minutes: " $
|
||||
editPlayer EPYtd . (pYtd.psPMin .~)
|
||||
editPlayerYtdPMinPrompt = editNum "Year-to-date penalty minutes: " EPYtd
|
||||
(pYtd.psPMin .~)
|
||||
|
||||
-- | Prompt to edit a player's lifetime goals
|
||||
editPlayerLtGoalsPrompt :: Prompt
|
||||
editPlayerLtGoalsPrompt = numPrompt "Lifetime goals: " $
|
||||
editPlayer EPLifetime . (pLifetime.psGoals .~)
|
||||
editPlayerLtGoalsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates wheter or not we're editing in batch mode
|
||||
-> Prompt
|
||||
editPlayerLtGoalsPrompt batchMode = editNum "Lifetime goals: " mode
|
||||
(pLifetime.psGoals .~)
|
||||
where
|
||||
mode = if batchMode then EPLtAssists True else EPLifetime
|
||||
|
||||
-- | Prompt to edit a player's lifetime assists
|
||||
editPlayerLtAssistsPrompt :: Prompt
|
||||
editPlayerLtAssistsPrompt = numPrompt "Lifetime assists: " $
|
||||
editPlayer EPLifetime . (pLifetime.psAssists .~)
|
||||
editPlayerLtAssistsPrompt
|
||||
:: Bool
|
||||
-- ^ Indicates wheter or not we're editing in batch mode
|
||||
-> Prompt
|
||||
editPlayerLtAssistsPrompt batchMode = editNum "Lifetime assists: " mode
|
||||
(pLifetime.psAssists .~)
|
||||
where
|
||||
mode = if batchMode then EPLtPMin else EPLifetime
|
||||
|
||||
-- | Prompt to edit a player's lifetime penalty minutes
|
||||
editPlayerLtPMinPrompt :: Prompt
|
||||
editPlayerLtPMinPrompt = numPrompt "Lifetime penalty minutes: " $
|
||||
editPlayer EPLifetime . (pLifetime.psPMin .~)
|
||||
editPlayerLtPMinPrompt = editNum "Lifetime penalty minutes: " EPLifetime
|
||||
(pLifetime.psPMin .~)
|
||||
|
||||
editNum
|
||||
:: String
|
||||
-> EditPlayerMode
|
||||
-> (Int -> Player -> Player)
|
||||
-> Prompt
|
||||
editNum pStr mode f = numPromptWithFallback pStr
|
||||
(goto mode)
|
||||
(editPlayer mode . f)
|
||||
|
||||
editPlayer :: EditPlayerMode -> (Player -> Player) -> Action ()
|
||||
editPlayer mode f =
|
||||
whenJustM (gets (^.progMode.editPlayerStateL.epsSelectedPlayer)) $ \pid ->
|
||||
modify
|
||||
$ (database.dbPlayers %~ modifyNth pid f)
|
||||
. (progMode.editPlayerStateL.epsMode .~ mode)
|
||||
whenJustM (gets (^.progMode.editPlayerStateL.epsSelectedPlayer)) $ \pid -> do
|
||||
modify $ database.dbPlayers %~ modifyNth pid f
|
||||
goto mode
|
||||
|
||||
goto :: EditPlayerMode -> Action ()
|
||||
goto = modify . (progMode.editPlayerStateL.epsMode .~)
|
||||
|
|
|
@ -347,11 +347,11 @@ data EditPlayerMode
|
|||
| EPPosition
|
||||
| EPYtd
|
||||
| EPLifetime
|
||||
| EPYtdGoals
|
||||
| EPYtdAssists
|
||||
| EPYtdGoals Bool
|
||||
| EPYtdAssists Bool
|
||||
| EPYtdPMin
|
||||
| EPLtGoals
|
||||
| EPLtAssists
|
||||
| EPLtGoals Bool
|
||||
| EPLtAssists Bool
|
||||
| EPLtPMin
|
||||
deriving (Eq, Show)
|
||||
|
||||
|
@ -369,17 +369,17 @@ data EditGoalieMode
|
|||
| EGName
|
||||
| EGYtd
|
||||
| EGLifetime
|
||||
| EGYtdGames
|
||||
| EGYtdMins
|
||||
| EGYtdGoals
|
||||
| EGYtdWins
|
||||
| EGYtdLosses
|
||||
| EGYtdGames Bool
|
||||
| EGYtdMins Bool
|
||||
| EGYtdGoals Bool
|
||||
| EGYtdWins Bool
|
||||
| EGYtdLosses Bool
|
||||
| EGYtdTies
|
||||
| EGLtGames
|
||||
| EGLtMins
|
||||
| EGLtGoals
|
||||
| EGLtWins
|
||||
| EGLtLosses
|
||||
| EGLtGames Bool
|
||||
| EGLtMins Bool
|
||||
| EGLtGoals Bool
|
||||
| EGLtWins Bool
|
||||
| EGLtLosses Bool
|
||||
| EGLtTies
|
||||
deriving (Eq, Show)
|
||||
|
||||
|
|
|
@ -1,537 +0,0 @@
|
|||
{-
|
||||
|
||||
mtlstats
|
||||
Copyright (C) 2019 Rhéal Lamothe
|
||||
<rheal.lamothe@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
-}
|
||||
|
||||
module Actions.EditGoalieSpec (spec) where
|
||||
|
||||
import Data.Maybe (fromJust)
|
||||
import Lens.Micro ((^.), (&), (.~))
|
||||
import Test.Hspec (Spec, context, describe, it, shouldBe)
|
||||
|
||||
import Mtlstats.Actions.EditGoalie
|
||||
import Mtlstats.Types
|
||||
import Mtlstats.Util
|
||||
|
||||
spec :: Spec
|
||||
spec = describe "EditGoalie" $ do
|
||||
editGoalieNumberSpec
|
||||
editGoalieNameSpec
|
||||
editGoalieYtdGamesSpec
|
||||
editGoalieYtdMinsSpec
|
||||
editGoalieYtdGoalsSpec
|
||||
editGoalieYtdWinsSpec
|
||||
editGoalieYtdLossesSpec
|
||||
editGoalieYtdTiesSpec
|
||||
editGoalieLtGamesSpec
|
||||
editGoalieLtMinsSpec
|
||||
editGoalieLtGoalsSpec
|
||||
editGoalieLtWinsSpec
|
||||
editGoalieLtLossesSpec
|
||||
editGoalieLtTiesSpec
|
||||
|
||||
editGoalieNumberSpec :: Spec
|
||||
editGoalieNumberSpec = describe "editGoalieNumber" $ editTest
|
||||
(editGoalieNumber 5)
|
||||
EGNumber
|
||||
(uncurry newGoalie)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, (5, "Joe")
|
||||
, (3, "Bob")
|
||||
, EGMenu
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, (2, "Joe")
|
||||
, (5, "Bob")
|
||||
, EGMenu
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, (2, "Joe")
|
||||
, (3, "Bob")
|
||||
, EGNumber
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, (2, "Joe")
|
||||
, (3, "Bob")
|
||||
, EGNumber
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieNameSpec :: Spec
|
||||
editGoalieNameSpec = describe "editGoalieName" $ editTest
|
||||
(editGoalieName "foo")
|
||||
EGName
|
||||
(uncurry newGoalie)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "foo" )
|
||||
, ( 3, "Bob" )
|
||||
, EGMenu
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe" )
|
||||
, ( 3, "foo" )
|
||||
, EGMenu
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe" )
|
||||
, ( 3, "Bob" )
|
||||
, EGName
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe" )
|
||||
, ( 3, "Bob" )
|
||||
, EGName
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieYtdGamesSpec :: Spec
|
||||
editGoalieYtdGamesSpec = describe "editGoalieYtdGames" $ editTest
|
||||
(editGoalieYtdGames 1)
|
||||
EGYtdGames
|
||||
(\(num, name, games) -> newGoalie num name & gYtd.gsGames .~ games)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdGames
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdGames
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieYtdMinsSpec :: Spec
|
||||
editGoalieYtdMinsSpec = describe "editGoalieYtdMins" $ editTest
|
||||
(editGoalieYtdMins 1)
|
||||
EGYtdMins
|
||||
(\(num, name, mins) -> newGoalie num name & gYtd.gsMinsPlayed .~ mins)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, (2, "Joe", 0 )
|
||||
, (3, "Bob", 1 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdMins
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdMins
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieYtdGoalsSpec :: Spec
|
||||
editGoalieYtdGoalsSpec = describe "editGoalieYtdGoals" $ editTest
|
||||
(editGoalieYtdGoals 1)
|
||||
EGYtdGoals
|
||||
(\(num, name, goals) -> newGoalie num name & gYtd.gsGoalsAllowed .~ goals)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdGoals
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdGoals
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieYtdWinsSpec :: Spec
|
||||
editGoalieYtdWinsSpec = describe "editGoalieYtdWins" $ editTest
|
||||
(editGoalieYtdWins 1)
|
||||
EGYtdWins
|
||||
(\(num, name, wins) -> newGoalie num name & gYtd.gsWins .~ wins)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdWins
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdWins
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieYtdLossesSpec :: Spec
|
||||
editGoalieYtdLossesSpec = describe "editGoalieYtdLosses" $ editTest
|
||||
(editGoalieYtdLosses 1)
|
||||
EGYtdLosses
|
||||
(\(num, name, losses) -> newGoalie num name & gYtd.gsLosses .~ losses)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdLosses
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdLosses
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieYtdTiesSpec :: Spec
|
||||
editGoalieYtdTiesSpec = describe "editGoalieYtdTies" $ editTest
|
||||
(editGoalieYtdTies 1)
|
||||
EGYtdTies
|
||||
(\(num, name, ties) -> newGoalie num name & gYtd.gsTies .~ ties)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGYtd
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdTies
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGYtdTies
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieLtGamesSpec :: Spec
|
||||
editGoalieLtGamesSpec = describe "editGoalieLtGames" $ editTest
|
||||
(editGoalieLtGames 1)
|
||||
EGLtGames
|
||||
(\(num, name, games) -> newGoalie num name & gLifetime.gsGames .~ games)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtGames
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtGames
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieLtMinsSpec :: Spec
|
||||
editGoalieLtMinsSpec = describe "editGoalieLtMins" $ editTest
|
||||
(editGoalieLtMins 1)
|
||||
EGLtMins
|
||||
(\(num, name, mins) -> newGoalie num name & gLifetime.gsMinsPlayed .~ mins)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtMins
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtMins
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieLtGoalsSpec :: Spec
|
||||
editGoalieLtGoalsSpec = describe "editGoalieLtGoals" $ editTest
|
||||
(editGoalieLtGoals 1)
|
||||
EGLtGoals
|
||||
(\(num, name, goals) -> newGoalie num name & gLifetime.gsGoalsAllowed .~ goals)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtGoals
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtGoals
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieLtWinsSpec :: Spec
|
||||
editGoalieLtWinsSpec = describe "editGoalieLtWins" $ editTest
|
||||
(editGoalieLtWins 1)
|
||||
EGLtWins
|
||||
(\(num, name, wins) -> newGoalie num name & gLifetime.gsWins .~ wins)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtWins
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtWins
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieLtLossesSpec :: Spec
|
||||
editGoalieLtLossesSpec = describe "editGoalieLtLosses" $ editTest
|
||||
(editGoalieLtLosses 1)
|
||||
EGLtLosses
|
||||
(\(num, name, losses) -> newGoalie num name & gLifetime.gsLosses .~ losses)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtLosses
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtLosses
|
||||
)
|
||||
]
|
||||
|
||||
editGoalieLtTiesSpec :: Spec
|
||||
editGoalieLtTiesSpec = describe "editGoalieLtTies" $ editTest
|
||||
(editGoalieLtTies 1)
|
||||
EGLtTies
|
||||
(\(num, name, ties) -> newGoalie num name & gLifetime.gsTies .~ ties)
|
||||
[ ( "set Joe"
|
||||
, Just 0
|
||||
, ( 2, "Joe", 1 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "set Bob"
|
||||
, Just 1
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 1 )
|
||||
, EGLifetime
|
||||
)
|
||||
, ( "out of bounds"
|
||||
, Just 2
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtTies
|
||||
)
|
||||
, ( "no goalie selected"
|
||||
, Nothing
|
||||
, ( 2, "Joe", 0 )
|
||||
, ( 3, "Bob", 0 )
|
||||
, EGLtTies
|
||||
)
|
||||
]
|
||||
|
||||
editTest
|
||||
:: (ProgState -> ProgState)
|
||||
-> EditGoalieMode
|
||||
-> (a -> Goalie)
|
||||
-> [(String, Maybe Int, a, a, EditGoalieMode)]
|
||||
-> Spec
|
||||
editTest func setMode mkGoalie params = do
|
||||
mapM_
|
||||
(\(setLabel, setGid, joeData, bobData, expectMode) -> context setLabel $ do
|
||||
let
|
||||
egs = newEditGoalieState
|
||||
& egsSelectedGoalie .~ setGid
|
||||
& egsMode .~ setMode
|
||||
|
||||
ps = func $ progState $ EditGoalie egs
|
||||
|
||||
mapM_
|
||||
(\(chkLabel, chkGid, goalieData) -> context chkLabel $ let
|
||||
actual = fromJust $ nth chkGid $ ps^.database.dbGoalies
|
||||
expected = mkGoalie goalieData
|
||||
in it ("should be " ++ show expected) $
|
||||
actual `shouldBe` expected)
|
||||
-- label, goalie ID, goalie data
|
||||
[ ( "check Joe", 0, joeData )
|
||||
, ( "check Bob", 1, bobData )
|
||||
]
|
||||
|
||||
context "check mode" $
|
||||
it ("should be " ++ show expectMode) $
|
||||
ps^.progMode.editGoalieStateL.egsMode `shouldBe` expectMode)
|
||||
|
||||
params
|
||||
|
||||
context "wrong progMode" $ do
|
||||
let ps = func $ progState MainMenu
|
||||
|
||||
it "should not change the database" $
|
||||
ps^.database `shouldBe` db
|
||||
|
||||
it "should not change the progMode" $
|
||||
show (ps^.progMode) `shouldBe` "MainMenu"
|
||||
|
||||
joe :: Goalie
|
||||
joe = newGoalie 2 "Joe"
|
||||
|
||||
bob :: Goalie
|
||||
bob = newGoalie 3 "Bob"
|
||||
|
||||
db :: Database
|
||||
db = newDatabase & dbGoalies .~ [joe, bob]
|
||||
|
||||
progState :: ProgMode -> ProgState
|
||||
progState mode = newProgState
|
||||
& progMode .~ mode
|
||||
& database .~ db
|
|
@ -38,7 +38,6 @@ import Test.Hspec
|
|||
import Mtlstats.Actions
|
||||
import Mtlstats.Types
|
||||
|
||||
import qualified Actions.EditGoalieSpec as EditGoalie
|
||||
import qualified Actions.NewGameSpec as NewGame
|
||||
import qualified TypesSpec as TS
|
||||
|
||||
|
@ -63,7 +62,6 @@ spec = describe "Mtlstats.Actions" $ do
|
|||
scrollUpSpec
|
||||
scrollDownSpec
|
||||
NewGame.spec
|
||||
EditGoalie.spec
|
||||
|
||||
startNewSeasonSpec :: Spec
|
||||
startNewSeasonSpec = describe "startNewSeason" $ do
|
||||
|
|
Loading…
Reference in New Issue
Block a user