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
|
-- | Edits the home standings
|
||||||
editHomeStandings :: ProgState -> ProgState
|
editHomeStandings :: ProgState -> ProgState
|
||||||
editHomeStandings = progMode .~ EditStandings ESMHome
|
editHomeStandings = progMode .~ EditStandings (ESMHome ESMSubMenu)
|
||||||
|
|
||||||
-- | Edits the road standings
|
-- | Edits the road standings
|
||||||
editAwayStandings :: ProgState -> ProgState
|
editAwayStandings :: ProgState -> ProgState
|
||||||
editAwayStandings = progMode .~ EditStandings ESMAway
|
editAwayStandings = progMode .~ EditStandings (ESMAway ESMSubMenu)
|
||||||
|
|
||||||
-- | Changes to edit wins mode
|
-- | Changes to edit wins mode
|
||||||
editWins :: ProgState -> ProgState
|
editWins :: ProgState -> ProgState
|
||||||
editWins = undefined
|
editWins = doEdit ESMEditWins
|
||||||
|
|
||||||
-- | Changes to edit losses mode
|
-- | Changes to edit losses mode
|
||||||
editLosses :: ProgState -> ProgState
|
editLosses :: ProgState -> ProgState
|
||||||
editLosses = undefined
|
editLosses = doEdit ESMEditLosses
|
||||||
|
|
||||||
-- | Changes to edit overtime mode
|
-- | Changes to edit overtime mode
|
||||||
editOvertime :: ProgState -> ProgState
|
editOvertime :: ProgState -> ProgState
|
||||||
editOvertime = undefined
|
editOvertime = doEdit ESMEditOvertime
|
||||||
|
|
||||||
-- | Changes to edit goals for mode
|
-- | Changes to edit goals for mode
|
||||||
editGoalsFor :: ProgState -> ProgState
|
editGoalsFor :: ProgState -> ProgState
|
||||||
editGoalsFor = undefined
|
editGoalsFor = doEdit ESMEditGoalsFor
|
||||||
|
|
||||||
-- | Changes to edit goals against mode
|
-- | Changes to edit goals against mode
|
||||||
editGoalsAgainst :: ProgState -> ProgState
|
editGoalsAgainst :: ProgState -> ProgState
|
||||||
editGoalsAgainst = undefined
|
editGoalsAgainst = doEdit ESMEditGoalsAgainst
|
||||||
|
|
||||||
|
doEdit :: ESMSubMode -> ProgState -> ProgState
|
||||||
|
doEdit = (progMode.editStandingsModeL.esmSubModeL .~)
|
||||||
|
|
|
@ -35,14 +35,18 @@ import Mtlstats.Types
|
||||||
editStandingsC :: EditStandingsMode -> Controller
|
editStandingsC :: EditStandingsMode -> Controller
|
||||||
editStandingsC = \case
|
editStandingsC = \case
|
||||||
ESMMenu -> menuControllerWith header editStandingsMenu
|
ESMMenu -> menuControllerWith header editStandingsMenu
|
||||||
ESMHome -> editHomeStandingsC
|
ESMHome m -> editHomeStandingsC m
|
||||||
ESMAway -> editAwayStandingsC
|
ESMAway m -> editAwayStandingsC m
|
||||||
|
|
||||||
editHomeStandingsC :: Controller
|
editHomeStandingsC :: ESMSubMode -> Controller
|
||||||
editHomeStandingsC = menuControllerWith header editHomeStandingsMenu
|
editHomeStandingsC = \case
|
||||||
|
ESMSubMenu -> menuControllerWith header editHomeStandingsMenu
|
||||||
|
_ -> undefined
|
||||||
|
|
||||||
editAwayStandingsC :: Controller
|
editAwayStandingsC :: ESMSubMode -> Controller
|
||||||
editAwayStandingsC = menuControllerWith header editAwayStandingsMenu
|
editAwayStandingsC = \case
|
||||||
|
ESMSubMenu -> menuControllerWith header editAwayStandingsMenu
|
||||||
|
_ -> undefined
|
||||||
|
|
||||||
header :: ProgState -> C.Update ()
|
header :: ProgState -> C.Update ()
|
||||||
header = do
|
header = do
|
||||||
|
|
|
@ -36,6 +36,7 @@ module Mtlstats.Types (
|
||||||
EditGoalieState (..),
|
EditGoalieState (..),
|
||||||
EditGoalieMode (..),
|
EditGoalieMode (..),
|
||||||
EditStandingsMode (..),
|
EditStandingsMode (..),
|
||||||
|
ESMSubMode (..),
|
||||||
Database (..),
|
Database (..),
|
||||||
Player (..),
|
Player (..),
|
||||||
PlayerStats (..),
|
PlayerStats (..),
|
||||||
|
@ -58,6 +59,8 @@ module Mtlstats.Types (
|
||||||
editPlayerStateL,
|
editPlayerStateL,
|
||||||
editGoalieStateL,
|
editGoalieStateL,
|
||||||
editStandingsModeL,
|
editStandingsModeL,
|
||||||
|
-- ** EditStandingsMode Lenses
|
||||||
|
esmSubModeL,
|
||||||
-- ** GameState Lenses
|
-- ** GameState Lenses
|
||||||
gameYear,
|
gameYear,
|
||||||
gameMonth,
|
gameMonth,
|
||||||
|
@ -396,8 +399,18 @@ data EditGoalieMode
|
||||||
-- | Represents the standings edit mode
|
-- | Represents the standings edit mode
|
||||||
data EditStandingsMode
|
data EditStandingsMode
|
||||||
= ESMMenu
|
= ESMMenu
|
||||||
| ESMHome
|
| ESMHome ESMSubMode
|
||||||
| ESMAway
|
| ESMAway ESMSubMode
|
||||||
|
deriving (Eq, Show)
|
||||||
|
|
||||||
|
-- | Represents the standings edit sub-mode
|
||||||
|
data ESMSubMode
|
||||||
|
= ESMSubMenu
|
||||||
|
| ESMEditWins
|
||||||
|
| ESMEditLosses
|
||||||
|
| ESMEditOvertime
|
||||||
|
| ESMEditGoalsFor
|
||||||
|
| ESMEditGoalsAgainst
|
||||||
deriving (Eq, Show)
|
deriving (Eq, Show)
|
||||||
|
|
||||||
-- | Represents the database
|
-- | Represents the database
|
||||||
|
@ -732,6 +745,17 @@ editStandingsModeL = lens
|
||||||
_ -> ESMMenu)
|
_ -> ESMMenu)
|
||||||
(\_ esm -> EditStandings esm)
|
(\_ 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'
|
-- | Constructor for a 'ProgState'
|
||||||
newProgState :: ProgState
|
newProgState :: ProgState
|
||||||
newProgState = ProgState
|
newProgState = ProgState
|
||||||
|
|
|
@ -23,14 +23,22 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
module Actions.EditStandingsSpec (spec) where
|
module Actions.EditStandingsSpec (spec) where
|
||||||
|
|
||||||
import Lens.Micro ((^.))
|
import Lens.Micro ((^.), (&), (.~))
|
||||||
import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
|
import Test.Hspec
|
||||||
|
( Spec
|
||||||
|
, context
|
||||||
|
, describe
|
||||||
|
, it
|
||||||
|
, shouldBe
|
||||||
|
, shouldSatisfy
|
||||||
|
)
|
||||||
|
|
||||||
import Mtlstats.Actions.EditStandings
|
import Mtlstats.Actions.EditStandings
|
||||||
import Mtlstats.Types
|
import Mtlstats.Types
|
||||||
|
|
||||||
spec :: Spec
|
spec :: Spec
|
||||||
spec = describe "EditStandings" $ mapM_
|
spec = describe "EditStandings" $ do
|
||||||
|
mapM_
|
||||||
(\(label, f, expected) -> describe label $ do
|
(\(label, f, expected) -> describe label $ do
|
||||||
let
|
let
|
||||||
ps = newProgState
|
ps = newProgState
|
||||||
|
@ -46,6 +54,30 @@ spec = describe "EditStandings" $ mapM_
|
||||||
|
|
||||||
-- label, function, expected mode
|
-- label, function, expected mode
|
||||||
[ ( "editStandings", editStandings, ESMMenu )
|
[ ( "editStandings", editStandings, ESMMenu )
|
||||||
, ( "editHomeStandings", editHomeStandings, ESMHome )
|
, ( "editHomeStandings", editHomeStandings, ESMHome ESMSubMenu )
|
||||||
, ( "editAwayStandings", editAwayStandings, ESMAway )
|
, ( "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
|
editPlayerStateLSpec
|
||||||
editGoalieStateLSpec
|
editGoalieStateLSpec
|
||||||
editStandingsModeLSpec
|
editStandingsModeLSpec
|
||||||
|
esmSubModeLSpec
|
||||||
teamScoreSpec
|
teamScoreSpec
|
||||||
otherScoreSpec
|
otherScoreSpec
|
||||||
homeTeamSpec
|
homeTeamSpec
|
||||||
|
@ -196,12 +197,41 @@ editStandingsModeLSpec :: Spec
|
||||||
editStandingsModeLSpec = describe "editStandingsModeL" $
|
editStandingsModeLSpec = describe "editStandingsModeL" $
|
||||||
lensSpec editStandingsModeL
|
lensSpec editStandingsModeL
|
||||||
-- getters
|
-- getters
|
||||||
[ ( "missing mode", MainMenu, ESMMenu )
|
[ ( "missing mode", MainMenu, menu )
|
||||||
, ( "with mode", EditStandings ESMHome, ESMHome )
|
, ( "with mode", EditStandings home, home )
|
||||||
]
|
]
|
||||||
-- setters
|
-- setters
|
||||||
[ ( "set mode", MainMenu, ESMHome )
|
[ ( "set mode", MainMenu, home )
|
||||||
, ( "change mode", EditStandings ESMMenu, ESMHome )
|
, ( "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 :: Spec
|
||||||
|
|
Loading…
Reference in New Issue
Block a user