diff --git a/ChangeLog.md b/ChangeLog.md index f2b62af..7e43a3b 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,5 @@ # Changelog for mtlstats ## Unreleased changes + +- Overtime losses don't count in the loss column diff --git a/src/Mtlstats/Types.hs b/src/Mtlstats/Types.hs index eff5abf..7e60dc7 100644 --- a/src/Mtlstats/Types.hs +++ b/src/Mtlstats/Types.hs @@ -545,7 +545,11 @@ gameWon gs = (>) <$> teamScore gs <*> otherScore gs -- | Checks if the game was lost gameLost :: GameState -> Maybe Bool -gameLost gs = (<) <$> teamScore gs <*> otherScore gs +gameLost gs = do + ot <- gs^.overtimeFlag + team <- teamScore gs + other <- otherScore gs + Just $ not ot && other > team -- | Checks if the game has tied gameTied :: GameState -> Maybe Bool @@ -553,7 +557,7 @@ gameTied gs = (==) <$> gs^.homeScore <*> gs^.awayScore -- | Calculates the number of games played gmsGames :: GameStats -> Int -gmsGames gs = gs^.gmsWins + gs^.gmsLosses +gmsGames gs = gs^.gmsWins + gs^.gmsLosses + gs^.gmsOvertime -- | Calculates the number of points gmsPoints :: GameStats -> Int diff --git a/test/ActionsSpec.hs b/test/ActionsSpec.hs index 953db70..c023cbb 100644 --- a/test/ActionsSpec.hs +++ b/test/ActionsSpec.hs @@ -227,10 +227,10 @@ updateGameStatsSpec = describe "updateGameStats" $ do in db' `shouldBe` db 1 2 1 1 1 1 context "home overtime loss" $ - it "should record a home loss and overtime" $ let + 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 2 2 1 1 1 + in db' `shouldBe` db 1 1 2 1 1 1 context "away win" $ it "should record an away win" $ let @@ -245,10 +245,10 @@ updateGameStatsSpec = describe "updateGameStats" $ do in db' `shouldBe` db 1 1 1 1 2 1 context "away overtime loss" $ - it "should record an away loss and overtime" $ let + 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 2 2 + in db' `shouldBe` db 1 1 1 1 1 2 context "missing game type" $ it "should not change anything" $ let diff --git a/test/TypesSpec.hs b/test/TypesSpec.hs index b1f7113..724a28a 100644 --- a/test/TypesSpec.hs +++ b/test/TypesSpec.hs @@ -320,30 +320,36 @@ gameWonSpec = describe "gameWon" $ mapM_ gameLostSpec :: Spec gameLostSpec = describe "gameLost" $ mapM_ - (\(t, h, a, expected) -> let + (\(t, h, a, ot, expected) -> let desc = "game type: " ++ show t ++ ", home score: " ++ show h ++ - ", away score: " ++ show a + ", away score: " ++ show a ++ + ", overtimr flag: " ++ show ot gs = newGameState - & gameType .~ t - & homeScore .~ h - & awayScore .~ a + & gameType .~ t + & homeScore .~ h + & awayScore .~ a + & overtimeFlag .~ ot in context desc $ it ("should be " ++ show expected) $ gameLost gs `shouldBe` expected) - -- gameType, homeScore, awayScore, expected - [ ( Just HomeGame, Just 1, Just 1, Just False ) - , ( Just HomeGame, Just 1, Just 2, Just True ) - , ( Just HomeGame, Just 2, Just 1, Just False ) - , ( Just AwayGame, Just 1, Just 1, Just False ) - , ( Just AwayGame, Just 1, Just 2, Just False ) - , ( Just AwayGame, Just 2, Just 1, Just True ) - , ( Nothing, Just 1, Just 2, Nothing ) - , ( Just HomeGame, Nothing, Just 1, Nothing ) - , ( Just AwayGame, Nothing, Just 1, Nothing ) - , ( Just HomeGame, Just 1, Nothing, Nothing ) - , ( Just AwayGame, Just 1, Nothing, Nothing ) - , ( Nothing, Nothing, Nothing, Nothing ) + -- gameType, homeScore, awayScore, overtimeFlag, expected + [ ( Just HomeGame, Just 1, Just 1, Just False, Just False ) + , ( Just HomeGame, Just 1, Just 2, Just False, Just True ) + , ( Just HomeGame, Just 1, Just 2, Just True, Just False ) + , ( Just HomeGame, Just 2, Just 1, Just False, Just False ) + , ( Just AwayGame, Just 1, Just 1, Just False, Just False ) + , ( Just AwayGame, Just 1, Just 2, Just False, Just False ) + , ( Just AwayGame, Just 2, Just 1, Just False, Just True ) + , ( Just AwayGame, Just 2, Just 1, Just True, Just False ) + , ( Nothing, Just 1, Just 2, Just False, Nothing ) + , ( Just HomeGame, Nothing, Just 1, Just False, Nothing ) + , ( Just AwayGame, Nothing, Just 1, Just False, Nothing ) + , ( Just HomeGame, Just 1, Nothing, Just False, Nothing ) + , ( Just AwayGame, Just 1, Nothing, Just False, Nothing ) + , ( Just HomeGame, Just 1, Just 2, Nothing, Nothing ) + , ( Just AwayGame, Just 1, Just 2, Nothing, Nothing ) + , ( Nothing, Nothing, Nothing, Just False, Nothing ) ] gameTiedSpec :: Spec @@ -366,21 +372,24 @@ gameTiedSpec = describe "gameTied" $ mapM_ gmsGamesSpec :: Spec gmsGamesSpec = describe "gmsGames" $ mapM_ - (\(w, l, expected) -> let + (\(w, l, ot, expected) -> let desc = "wins: " ++ show w ++ - ", losses: " ++ show l + ", losses: " ++ show l ++ + ", overtime: " ++ show ot gs = newGameStats - & gmsWins .~ w - & gmsLosses .~ l + & gmsWins .~ w + & gmsLosses .~ l + & gmsOvertime .~ ot in context desc $ it ("should be " ++ show expected) $ gmsGames gs `shouldBe` expected) - -- wins, losses, expected - [ ( 0, 0, 0 ) - , ( 1, 0, 1 ) - , ( 0, 1, 1 ) - , ( 1, 1, 2 ) - , ( 2, 3, 5 ) + -- wins, losses, overtime, expected + [ ( 0, 0, 0, 0 ) + , ( 1, 0, 0, 1 ) + , ( 0, 1, 0, 1 ) + , ( 0, 0, 1, 1 ) + , ( 1, 1, 1, 3 ) + , ( 2, 3, 5, 10 ) ] gmsPointsSpec :: Spec