From 06c94260ad6a669ed0cbef9bbcb4b5d21b8d80dd Mon Sep 17 00:00:00 2001 From: Jonathan Lamothe Date: Sat, 21 Sep 2019 00:31:40 -0400 Subject: [PATCH] update goals for and goals against when updating game stats --- src/Mtlstats/Actions.hs | 31 ++++++++++++++++++--------- test/ActionsSpec.hs | 46 +++++++++++++++++++++++------------------ 2 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/Mtlstats/Actions.hs b/src/Mtlstats/Actions.hs index f700373..4cf62d4 100644 --- a/src/Mtlstats/Actions.hs +++ b/src/Mtlstats/Actions.hs @@ -82,26 +82,37 @@ overtimeCheck s -- | Adjusts the game stats based on the results of the current game updateGameStats :: ProgState -> ProgState updateGameStats s = fromMaybe s $ do - gType <- s^.progMode.gameStateL.gameType - won <- gameWon $ s^.progMode.gameStateL - lost <- gameLost $ s^.progMode.gameStateL - ot <- s^.progMode.gameStateL.overtimeFlag + let gs = s^.progMode.gameStateL + gType <- gs^.gameType + won <- gameWon gs + lost <- gameLost gs + ot <- gs^.overtimeFlag + tScore <- teamScore gs + oScore <- otherScore gs let hw = if gType == HomeGame && won then 1 else 0 hl = if gType == HomeGame && lost then 1 else 0 hot = if gType == HomeGame && ot then 1 else 0 + hgf = if gType == HomeGame then tScore else 0 + hga = if gType == HomeGame then oScore else 0 aw = if gType == AwayGame && won then 1 else 0 al = if gType == AwayGame && lost then 1 else 0 aot = if gType == AwayGame && ot then 1 else 0 + agf = if gType == AwayGame then tScore else 0 + aga = if gType == AwayGame then oScore else 0 Just $ s & database.dbHomeGameStats - %~ (gmsWins +~ hw) - . (gmsLosses +~ hl) - . (gmsOvertime +~ hot) + %~ (gmsWins +~ hw) + . (gmsLosses +~ hl) + . (gmsOvertime +~ hot) + . (gmsGoalsFor +~ hgf) + . (gmsGoalsAgainst +~ hga) & database.dbAwayGameStats - %~ (gmsWins +~ aw) - . (gmsLosses +~ al) - . (gmsOvertime +~ aot) + %~ (gmsWins +~ aw) + . (gmsLosses +~ al) + . (gmsOvertime +~ aot) + . (gmsGoalsFor +~ agf) + . (gmsGoalsAgainst +~ aga) -- | Validates the game date validateGameDate :: ProgState -> ProgState diff --git a/test/ActionsSpec.hs b/test/ActionsSpec.hs index 7735057..1566af6 100644 --- a/test/ActionsSpec.hs +++ b/test/ActionsSpec.hs @@ -193,9 +193,11 @@ updateGameStatsSpec = describe "updateGameStats" $ do let baseStats = newGameStats - & gmsWins .~ 1 - & gmsLosses .~ 1 - & gmsOvertime .~ 1 + & gmsWins .~ 1 + & gmsLosses .~ 1 + & gmsOvertime .~ 1 + & gmsGoalsFor .~ 1 + & gmsGoalsAgainst .~ 1 s t h a o = newProgState & progMode.gameStateL @@ -207,75 +209,79 @@ updateGameStatsSpec = describe "updateGameStats" $ do %~ (dbHomeGameStats .~ baseStats) . (dbAwayGameStats .~ baseStats) - db hw hl ho aw al ao = newDatabase + db hw hl ho hf ha aw al ao af aa = newDatabase & dbHomeGameStats - %~ (gmsWins .~ hw) - . (gmsLosses .~ hl) - . (gmsOvertime .~ ho) + %~ (gmsWins .~ hw) + . (gmsLosses .~ hl) + . (gmsOvertime .~ ho) + . (gmsGoalsFor .~ hf) + . (gmsGoalsAgainst .~ ha) & dbAwayGameStats - %~ (gmsWins .~ aw) - . (gmsLosses .~ al) - . (gmsOvertime .~ ao) + %~ (gmsWins .~ aw) + . (gmsLosses .~ al) + . (gmsOvertime .~ ao) + . (gmsGoalsFor .~ af) + . (gmsGoalsAgainst .~ aa) context "home win" $ it "should record a home win" $ let s' = s (Just HomeGame) (Just 2) (Just 1) (Just False) db' = updateGameStats s' ^. database - in db' `shouldBe` db 2 1 1 1 1 1 + in db' `shouldBe` db 2 1 1 3 2 1 1 1 1 1 context "home loss" $ it "should record a home loss" $ let s' = s (Just HomeGame) (Just 1) (Just 2) (Just False) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 2 1 1 1 1 + in db' `shouldBe` db 1 2 1 2 3 1 1 1 1 1 context "home overtime loss" $ it "should record a home overtime" $ let s' = s (Just HomeGame) (Just 1) (Just 2) (Just True) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 2 1 1 1 + in db' `shouldBe` db 1 1 2 2 3 1 1 1 1 1 context "away win" $ it "should record an away win" $ let s' = s (Just AwayGame) (Just 1) (Just 2) (Just False) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 1 2 1 1 + in db' `shouldBe` db 1 1 1 1 1 2 1 1 3 2 context "away loss" $ it "should record an away loss" $ let s' = s (Just AwayGame) (Just 2) (Just 1) (Just False) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 1 1 2 1 + in db' `shouldBe` db 1 1 1 1 1 1 2 1 2 3 context "away overtime loss" $ it "should record an away overtime" $ let s' = s (Just AwayGame) (Just 2) (Just 1) (Just True) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 1 1 1 2 + in db' `shouldBe` db 1 1 1 1 1 1 1 2 2 3 context "missing game type" $ it "should not change anything" $ let s' = s Nothing (Just 1) (Just 2) (Just True) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 1 1 1 1 + in db' `shouldBe` db 1 1 1 1 1 1 1 1 1 1 context "missing home score" $ it "should not change anything" $ let s' = s (Just HomeGame) Nothing (Just 1) (Just True) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 1 1 1 1 + in db' `shouldBe` db 1 1 1 1 1 1 1 1 1 1 context "missing away score" $ it "should not change anything" $ let s' = s (Just HomeGame) (Just 1) Nothing (Just True) db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 1 1 1 1 + in db' `shouldBe` db 1 1 1 1 1 1 1 1 1 1 context "missing overtime flag" $ it "should not change anything" $ let s' = s (Just HomeGame) (Just 1) (Just 2) Nothing db' = updateGameStats s' ^. database - in db' `shouldBe` db 1 1 1 1 1 1 + in db' `shouldBe` db 1 1 1 1 1 1 1 1 1 1 validateGameDateSpec :: Spec validateGameDateSpec = describe "validateGameDate" $ do