implemented edit functions in Mtlstats.Actions.EditState module
This commit is contained in:
parent
75a47ca852
commit
d5de834510
|
@ -40,28 +40,31 @@ editStandings = progMode .~ EditStandings ESMMenu
|
|||
|
||||
-- | Edits the home standings
|
||||
editHomeStandings :: ProgState -> ProgState
|
||||
editHomeStandings = progMode .~ EditStandings ESMHome
|
||||
editHomeStandings = progMode .~ EditStandings (ESMHome ESMSubMenu)
|
||||
|
||||
-- | Edits the road standings
|
||||
editAwayStandings :: ProgState -> ProgState
|
||||
editAwayStandings = progMode .~ EditStandings ESMAway
|
||||
editAwayStandings = progMode .~ EditStandings (ESMAway ESMSubMenu)
|
||||
|
||||
-- | Changes to edit wins mode
|
||||
editWins :: ProgState -> ProgState
|
||||
editWins = undefined
|
||||
editWins = doEdit ESMEditWins
|
||||
|
||||
-- | Changes to edit losses mode
|
||||
editLosses :: ProgState -> ProgState
|
||||
editLosses = undefined
|
||||
editLosses = doEdit ESMEditLosses
|
||||
|
||||
-- | Changes to edit overtime mode
|
||||
editOvertime :: ProgState -> ProgState
|
||||
editOvertime = undefined
|
||||
editOvertime = doEdit ESMEditOvertime
|
||||
|
||||
-- | Changes to edit goals for mode
|
||||
editGoalsFor :: ProgState -> ProgState
|
||||
editGoalsFor = undefined
|
||||
editGoalsFor = doEdit ESMEditGoalsFor
|
||||
|
||||
-- | Changes to edit goals against mode
|
||||
editGoalsAgainst :: ProgState -> ProgState
|
||||
editGoalsAgainst = undefined
|
||||
editGoalsAgainst = doEdit ESMEditGoalsAgainst
|
||||
|
||||
doEdit :: ESMSubMode -> ProgState -> ProgState
|
||||
doEdit = (progMode.editStandingsModeL.esmSubModeL .~)
|
||||
|
|
|
@ -34,15 +34,19 @@ import Mtlstats.Types
|
|||
-- | Controller for the edit standings menu
|
||||
editStandingsC :: EditStandingsMode -> Controller
|
||||
editStandingsC = \case
|
||||
ESMMenu -> menuControllerWith header editStandingsMenu
|
||||
ESMHome -> editHomeStandingsC
|
||||
ESMAway -> editAwayStandingsC
|
||||
ESMMenu -> menuControllerWith header editStandingsMenu
|
||||
ESMHome m -> editHomeStandingsC m
|
||||
ESMAway m -> editAwayStandingsC m
|
||||
|
||||
editHomeStandingsC :: Controller
|
||||
editHomeStandingsC = menuControllerWith header editHomeStandingsMenu
|
||||
editHomeStandingsC :: ESMSubMode -> Controller
|
||||
editHomeStandingsC = \case
|
||||
ESMSubMenu -> menuControllerWith header editHomeStandingsMenu
|
||||
_ -> undefined
|
||||
|
||||
editAwayStandingsC :: Controller
|
||||
editAwayStandingsC = menuControllerWith header editAwayStandingsMenu
|
||||
editAwayStandingsC :: ESMSubMode -> Controller
|
||||
editAwayStandingsC = \case
|
||||
ESMSubMenu -> menuControllerWith header editAwayStandingsMenu
|
||||
_ -> undefined
|
||||
|
||||
header :: ProgState -> C.Update ()
|
||||
header = do
|
||||
|
|
|
@ -36,6 +36,7 @@ module Mtlstats.Types (
|
|||
EditGoalieState (..),
|
||||
EditGoalieMode (..),
|
||||
EditStandingsMode (..),
|
||||
ESMSubMode (..),
|
||||
Database (..),
|
||||
Player (..),
|
||||
PlayerStats (..),
|
||||
|
@ -58,6 +59,8 @@ module Mtlstats.Types (
|
|||
editPlayerStateL,
|
||||
editGoalieStateL,
|
||||
editStandingsModeL,
|
||||
-- ** EditStandingsMode Lenses
|
||||
esmSubModeL,
|
||||
-- ** GameState Lenses
|
||||
gameYear,
|
||||
gameMonth,
|
||||
|
@ -396,8 +399,18 @@ data EditGoalieMode
|
|||
-- | Represents the standings edit mode
|
||||
data EditStandingsMode
|
||||
= ESMMenu
|
||||
| ESMHome
|
||||
| ESMAway
|
||||
| ESMHome ESMSubMode
|
||||
| ESMAway ESMSubMode
|
||||
deriving (Eq, Show)
|
||||
|
||||
-- | Represents the standings edit sub-mode
|
||||
data ESMSubMode
|
||||
= ESMSubMenu
|
||||
| ESMEditWins
|
||||
| ESMEditLosses
|
||||
| ESMEditOvertime
|
||||
| ESMEditGoalsFor
|
||||
| ESMEditGoalsAgainst
|
||||
deriving (Eq, Show)
|
||||
|
||||
-- | Represents the database
|
||||
|
@ -732,6 +745,17 @@ editStandingsModeL = lens
|
|||
_ -> ESMMenu)
|
||||
(\_ esm -> EditStandings esm)
|
||||
|
||||
esmSubModeL :: Lens' EditStandingsMode ESMSubMode
|
||||
esmSubModeL = lens
|
||||
(\case
|
||||
ESMMenu -> ESMSubMenu
|
||||
ESMHome m -> m
|
||||
ESMAway m -> m)
|
||||
(\mode subMode -> case mode of
|
||||
ESMMenu -> ESMMenu
|
||||
ESMHome _ -> ESMHome subMode
|
||||
ESMAway _ -> ESMAway subMode)
|
||||
|
||||
-- | Constructor for a 'ProgState'
|
||||
newProgState :: ProgState
|
||||
newProgState = ProgState
|
||||
|
|
|
@ -23,29 +23,61 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|||
|
||||
module Actions.EditStandingsSpec (spec) where
|
||||
|
||||
import Lens.Micro ((^.))
|
||||
import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
|
||||
import Lens.Micro ((^.), (&), (.~))
|
||||
import Test.Hspec
|
||||
( Spec
|
||||
, context
|
||||
, describe
|
||||
, it
|
||||
, shouldBe
|
||||
, shouldSatisfy
|
||||
)
|
||||
|
||||
import Mtlstats.Actions.EditStandings
|
||||
import Mtlstats.Types
|
||||
|
||||
spec :: Spec
|
||||
spec = describe "EditStandings" $ mapM_
|
||||
(\(label, f, expected) -> describe label $ do
|
||||
let
|
||||
ps = newProgState
|
||||
ps' = f ps
|
||||
spec = describe "EditStandings" $ do
|
||||
mapM_
|
||||
(\(label, f, expected) -> describe label $ do
|
||||
let
|
||||
ps = newProgState
|
||||
ps' = f ps
|
||||
|
||||
it "should set progMode to EditStandings" $
|
||||
ps'^.progMode `shouldSatisfy` \case
|
||||
(EditStandings _) -> True
|
||||
_ -> False
|
||||
it "should set progMode to EditStandings" $
|
||||
ps'^.progMode `shouldSatisfy` \case
|
||||
(EditStandings _) -> True
|
||||
_ -> False
|
||||
|
||||
it ("should set editStandingsMode to " ++ show expected) $
|
||||
ps'^.progMode.editStandingsModeL `shouldBe` expected)
|
||||
it ("should set editStandingsMode to " ++ show expected) $
|
||||
ps'^.progMode.editStandingsModeL `shouldBe` expected)
|
||||
|
||||
-- label, function, expected mode
|
||||
[ ( "editStandings", editStandings, ESMMenu )
|
||||
, ( "editHomeStandings", editHomeStandings, ESMHome )
|
||||
, ( "editAwayStandings", editAwayStandings, ESMAway )
|
||||
]
|
||||
-- label, function, expected mode
|
||||
[ ( "editStandings", editStandings, ESMMenu )
|
||||
, ( "editHomeStandings", editHomeStandings, ESMHome ESMSubMenu )
|
||||
, ( "editAwayStandings", editAwayStandings, ESMAway ESMSubMenu )
|
||||
]
|
||||
|
||||
mapM_
|
||||
(\(label, f, expected) -> describe label $ do
|
||||
mapM_
|
||||
(\prefix -> context ("mode: " ++ show (prefix ESMSubMenu)) $ let
|
||||
ps = newProgState & progMode.editStandingsModeL .~ prefix ESMSubMenu
|
||||
ps' = f ps
|
||||
in it ("should set the mode to " ++ show expected) $
|
||||
ps'^.progMode.editStandingsModeL `shouldBe` prefix expected)
|
||||
[ESMHome, ESMAway]
|
||||
|
||||
context "mode: ESMMenu" $ let
|
||||
ps = newProgState & progMode.editStandingsModeL .~ ESMMenu
|
||||
ps' = f ps
|
||||
in it "should not change the mode" $
|
||||
ps'^.progMode.editStandingsModeL `shouldBe` ESMMenu)
|
||||
|
||||
-- label, function, expected
|
||||
[ ( "editWins", editWins, ESMEditWins )
|
||||
, ( "editLosses", editLosses, ESMEditLosses )
|
||||
, ( "editOvertime", editOvertime, ESMEditOvertime )
|
||||
, ( "editGoalsFor", editGoalsFor, ESMEditGoalsFor )
|
||||
, ( "editGoalsAgainst", editGoalsAgainst, ESMEditGoalsAgainst )
|
||||
]
|
||||
|
|
|
@ -59,6 +59,7 @@ spec = describe "Mtlstats.Types" $ do
|
|||
editPlayerStateLSpec
|
||||
editGoalieStateLSpec
|
||||
editStandingsModeLSpec
|
||||
esmSubModeLSpec
|
||||
teamScoreSpec
|
||||
otherScoreSpec
|
||||
homeTeamSpec
|
||||
|
@ -196,13 +197,42 @@ editStandingsModeLSpec :: Spec
|
|||
editStandingsModeLSpec = describe "editStandingsModeL" $
|
||||
lensSpec editStandingsModeL
|
||||
-- getters
|
||||
[ ( "missing mode", MainMenu, ESMMenu )
|
||||
, ( "with mode", EditStandings ESMHome, ESMHome )
|
||||
[ ( "missing mode", MainMenu, menu )
|
||||
, ( "with mode", EditStandings home, home )
|
||||
]
|
||||
-- setters
|
||||
[ ( "set mode", MainMenu, ESMHome )
|
||||
, ( "change mode", EditStandings ESMMenu, ESMHome )
|
||||
[ ( "set mode", MainMenu, home )
|
||||
, ( "change mode", EditStandings home, away )
|
||||
]
|
||||
where
|
||||
menu = ESMMenu
|
||||
home = ESMHome ESMSubMenu
|
||||
away = ESMAway ESMSubMenu
|
||||
|
||||
esmSubModeLSpec :: Spec
|
||||
esmSubModeLSpec = describe "esmSubModeL" $ do
|
||||
|
||||
context "getters" $ mapM_
|
||||
(\(label, mode, expected) -> context label $
|
||||
it ("should be " ++ show expected) $
|
||||
mode^.esmSubModeL `shouldBe` expected)
|
||||
|
||||
-- label, mode, expected
|
||||
[ ( "no state", ESMMenu, ESMSubMenu )
|
||||
, ( "with state", ESMHome ESMEditWins, ESMEditWins )
|
||||
]
|
||||
|
||||
context "setters" $ mapM_
|
||||
(\(label, mode, expected) -> context label $
|
||||
it ("should be " ++ show expected) $ let
|
||||
mode' = mode & esmSubModeL .~ ESMEditWins
|
||||
in mode' `shouldBe` expected)
|
||||
|
||||
-- label, mode, expected
|
||||
[ ( "no state", ESMMenu, ESMMenu )
|
||||
, ( "home mode", ESMHome ESMSubMenu, ESMHome ESMEditWins )
|
||||
, ( "away mode", ESMAway ESMSubMenu, ESMAway ESMEditWins )
|
||||
]
|
||||
|
||||
teamScoreSpec :: Spec
|
||||
teamScoreSpec = describe "teamScore" $ do
|
||||
|
|
Loading…
Reference in New Issue
Block a user