diff --git a/src/Password.hs b/src/Password.hs index d57e076..edba690 100644 --- a/src/Password.hs +++ b/src/Password.hs @@ -44,7 +44,7 @@ module Password ( -- ** Password Checkers pwCountUpper, pwCountLower, pwCountDigits, pwCountSpecial, pwCount, -- ** Database Functions - pwHasService, pwSetService, pwGetService, pwSearch + pwHasService, pwSetService, pwGetService, pwRemoveService, pwSearch ) where import Control.Lens (makeLenses, over, set, (^.)) @@ -297,6 +297,16 @@ pwGetService -- not found pwGetService = M.lookup +-- | removes a service from the database +pwRemoveService + :: String + -- ^ the service being removed + -> PWDatabase + -- ^ the database the service is being removed from + -> PWDatabase + -- ^ the resulting database +pwRemoveService = M.delete + -- | searches for a service pwSearch :: String diff --git a/test/Spec.hs b/test/Spec.hs index 0494491..1f43ea9 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -34,6 +34,7 @@ import qualified Spec.NewPWSalt as NewPWSalt import qualified Spec.PWGenerate as PWGenerate import qualified Spec.PWGetService as PWGetService import qualified Spec.PWHasService as PWHasService +import qualified Spec.PWRemoveService as PWRemoveService import qualified Spec.PWSearch as PWSearch import qualified Spec.PWSetService as PWSetService import qualified Spec.ValidatePWData as ValidatePWData @@ -58,6 +59,7 @@ tests = TestList , PWSetService.tests , PWGetService.tests , PWSearch.tests + , PWRemoveService.tests , JSON.tests ] diff --git a/test/Spec/PWRemoveService.hs b/test/Spec/PWRemoveService.hs new file mode 100644 index 0000000..663bcf8 --- /dev/null +++ b/test/Spec/PWRemoveService.hs @@ -0,0 +1,67 @@ +{- + +passman +Copyright (C) 2018 Jonathan Lamothe + + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this program. If not, see +. + +-} + +module Spec.PWRemoveService (tests) where + +import qualified Data.Map.Lazy as M +import System.Random (mkStdGen) +import Test.HUnit (Test (..), assertBool, (~?=)) + +import Password + +tests = TestLabel "pwRemoveService" $ TestList + [ emptyDB + , existingService + , missingService + ] + +emptyDB = TestLabel "empty database" $ + pwRemoveService "foo" newPWDatabase ~?= newPWDatabase + +existingService = TestLabel "existing service" $ + test' "foo" ["bar", "baz"] + +missingService = TestLabel "missing service" $ + test' "quux" ["foo", "bar", "baz"] + +test' serv keys = let db' = pwRemoveService serv db in + TestList $ + (TestLabel "key count" $ length keys ~?= length (M.keys db')) : + map + (\x -> TestLabel x $ TestCase $ assertBool "service missing" $ pwHasService x db') + keys + +db = M.fromList + [ ( "foo", foo ) + , ( "bar", bar ) + , ( "baz", baz ) + ] + +(foo, g') = newPWData g + +(bar, g'') = newPWData g' + +(baz, _) = newPWData g'' + +g = mkStdGen 1 + +--jl