From 25e4929f0b16e4da7a5903add157b916ec68d9d3 Mon Sep 17 00:00:00 2001 From: Jonathan Lamothe Date: Tue, 11 Feb 2020 23:58:47 -0500 Subject: [PATCH] implemented posSearch --- src/Mtlstats/Helpers/Position.hs | 7 ++++++- test/Helpers/PositionSpec.hs | 35 ++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/Mtlstats/Helpers/Position.hs b/src/Mtlstats/Helpers/Position.hs index 475f405..e1a752e 100644 --- a/src/Mtlstats/Helpers/Position.hs +++ b/src/Mtlstats/Helpers/Position.hs @@ -26,6 +26,8 @@ module Mtlstats.Helpers.Position , getPositions ) where +import Data.Char (toUpper) +import Data.List (isInfixOf) import qualified Data.Set as S import Lens.Micro ((^.)) @@ -39,7 +41,10 @@ posSearch -- ^ The database -> [(Int, String)] -- ^ A list of result indices and their values -posSearch = undefined +posSearch sStr db = filter sFunc $ zip [0..] ps + where + sFunc (_, pos) = map toUpper sStr `isInfixOf` map toUpper pos + ps = getPositions db -- | Searches the 'Database' for an exact position posSearchExact diff --git a/test/Helpers/PositionSpec.hs b/test/Helpers/PositionSpec.hs index f5d1f64..f1197c6 100644 --- a/test/Helpers/PositionSpec.hs +++ b/test/Helpers/PositionSpec.hs @@ -22,23 +22,42 @@ along with this program. If not, see . module Helpers.PositionSpec (spec) where import Lens.Micro ((&), (.~)) -import Test.Hspec (Spec, describe, it, shouldBe) +import Test.Hspec (Spec, context, describe, it, shouldBe) import Mtlstats.Helpers.Position import Mtlstats.Types spec :: Spec -spec = describe "Position" +spec = describe "Position" $ do + posSearchSpec getPositionsSpec +posSearchSpec :: Spec +posSearchSpec = describe "posSearch" $ mapM_ + (\(sStr, expected) -> context ("search string: " ++ show sStr) $ + it ("should be " ++ show expected) $ + posSearch sStr db `shouldBe` expected) + [ ( "fOo" + , [ ( 2, "foo" ) + ] + ) + , ( "A" + , [ ( 0, "bar" ) + , ( 1, "baz" ) + ] + ) + ] + getPositionsSpec :: Spec getPositionsSpec = describe "getPositions" $ let - db = newDatabase & dbPlayers .~ - [ newPlayer 2 "Joe" "foo" - , newPlayer 3 "Bob" "bar" - , newPlayer 5 "Bill" "foo" - , newPlayer 8 "Ed" "baz" - ] expected = ["bar", "baz", "foo"] in it ("should be " ++ show expected) $ getPositions db `shouldBe` expected + +db :: Database +db = newDatabase & dbPlayers .~ + [ newPlayer 2 "Joe" "foo" + , newPlayer 3 "Bob" "bar" + , newPlayer 5 "Bill" "foo" + , newPlayer 8 "Ed" "baz" + ]