Update tests
This commit is contained in:
+9
-8
@@ -10,6 +10,7 @@ import qualified Data.Map.Strict as M
|
||||
import Data.Text (Text)
|
||||
import qualified Hedgehog.Gen as Gen
|
||||
import qualified Hedgehog.Range as Range
|
||||
import Katip.Monadic (runNoLoggingT)
|
||||
import System.IO.Temp (withTempDirectory)
|
||||
import Test.Hspec
|
||||
import Test.Hspec.Hedgehog
|
||||
@@ -21,7 +22,7 @@ spec = describe "Flags" $ do
|
||||
describe "loadFlags" $ do
|
||||
it "defaults all names to True when the file is missing (opt-out)" $
|
||||
withTempDirectory "/tmp" "flags-spec" $ \dir -> do
|
||||
flags <- loadFlags dir ["a", "b"]
|
||||
flags <- runNoLoggingT (loadFlags dir ["a", "b"])
|
||||
m <- allFlags flags
|
||||
m `shouldBe` M.fromList [("a" :: Text, True), ("b", True)]
|
||||
|
||||
@@ -29,7 +30,7 @@ spec = describe "Flags" $ do
|
||||
withTempDirectory "/tmp" "flags-spec" $ \dir -> do
|
||||
let path = dir <> "/handlers.json"
|
||||
writeFile path "{\"b\": false}"
|
||||
flags <- loadFlags dir ["a", "b"]
|
||||
flags <- runNoLoggingT (loadFlags dir ["a", "b"])
|
||||
m <- allFlags flags
|
||||
m `shouldBe` M.fromList [("a" :: Text, True), ("b" :: Text, False)]
|
||||
|
||||
@@ -37,7 +38,7 @@ spec = describe "Flags" $ do
|
||||
withTempDirectory "/tmp" "flags-spec" $ \dir -> do
|
||||
let path = dir <> "/handlers.json"
|
||||
writeFile path "not json at all"
|
||||
flags <- loadFlags dir ["a"]
|
||||
flags <- runNoLoggingT (loadFlags dir ["a"])
|
||||
m <- allFlags flags
|
||||
m `shouldBe` M.fromList [("a" :: Text, True)]
|
||||
|
||||
@@ -46,29 +47,29 @@ spec = describe "Flags" $ do
|
||||
withTempDirectory "/tmp" "flags-spec" $ \dir -> do
|
||||
let path = dir <> "/handlers.json"
|
||||
writeFile path "{\"a\": false}"
|
||||
flags <- loadFlags dir ["a"]
|
||||
flags <- runNoLoggingT (loadFlags dir ["a"])
|
||||
isEnabled flags "a" `shouldReturn` False
|
||||
|
||||
it "defaults unknown names to True" $
|
||||
withTempDirectory "/tmp" "flags-spec" $ \dir -> do
|
||||
flags <- loadFlags dir []
|
||||
flags <- runNoLoggingT (loadFlags dir [])
|
||||
isEnabled flags "unknown" `shouldReturn` True
|
||||
|
||||
describe "setEnabled" $ do
|
||||
it "updates the in-memory map and persists to disk" $
|
||||
withTempDirectory "/tmp" "flags-spec" $ \dir -> do
|
||||
flags <- loadFlags dir ["a"]
|
||||
flags <- runNoLoggingT (loadFlags dir ["a"])
|
||||
setEnabled flags "a" False
|
||||
isEnabled flags "a" `shouldReturn` False
|
||||
-- reload from disk to confirm persistence
|
||||
flags' <- loadFlags dir ["a"]
|
||||
flags' <- runNoLoggingT (loadFlags dir ["a"])
|
||||
isEnabled flags' "a" `shouldReturn` False
|
||||
|
||||
it "concurrent writes leave the file consistent with the TVar" $
|
||||
hedgehog $ do
|
||||
n <- forAll $ Gen.int (Range.linear 1 50)
|
||||
liftIO $ withTempDirectory "/tmp" "flags-spec" $ \dir -> do
|
||||
flags <- loadFlags dir ["x"]
|
||||
flags <- runNoLoggingT (loadFlags dir ["x"])
|
||||
mapConcurrently_ (\i -> setEnabled flags "x" (even i)) [1 .. n]
|
||||
m <- allFlags flags
|
||||
decoded <- decodeFileStrict (dir <> "/handlers.json")
|
||||
|
||||
Reference in New Issue
Block a user