module Spec.Initialization (allTests) where
import LaunchDarkly.Server.Store (PersistentDataStore (..))
import Test.HUnit
import Util (defaultPrefix, emptyData, initialData, makeDefaultRedisBackend)
testClientIsNotInitializedByDefault :: Test
testClientIsNotInitializedByDefault = TestCase $ do
backend <- makeDefaultRedisBackend defaultPrefix
isInitialized <- persistentDataStoreIsInitialized backend
assertEqual "" (Right False) isInitialized
testClientCanBeMarkedAsInitialized :: Test
testClientCanBeMarkedAsInitialized = TestCase $ do
backend <- makeDefaultRedisBackend defaultPrefix
initResult <- persistentDataStoreInitialize backend initialData
isInitialized <- persistentDataStoreIsInitialized backend
assertEqual "" (Right ()) initResult
assertEqual "" (Right True) isInitialized
testClientCanSeeInitializiationFromAnotherClient :: Test
testClientCanSeeInitializiationFromAnotherClient = TestCase $ do
activeBackend <- makeDefaultRedisBackend defaultPrefix
passiveBackend <- makeDefaultRedisBackend defaultPrefix
_ <- persistentDataStoreInitialize activeBackend initialData
isActiveBackendInitialized <- persistentDataStoreIsInitialized activeBackend
isPassiveBackendInitialized <- persistentDataStoreIsInitialized passiveBackend
assertEqual "" (Right True) isActiveBackendInitialized
assertEqual "" (Right True) isPassiveBackendInitialized
testDifferentPrefixesAreIndependent :: Test
testDifferentPrefixesAreIndependent = TestCase $ do
initializedBackend <- makeDefaultRedisBackend "initialized"
uninitializedBackend <- makeDefaultRedisBackend "uninitialized"
_ <- persistentDataStoreInitialize initializedBackend initialData
isInitializedBackendInitialized <- persistentDataStoreIsInitialized initializedBackend
isUninitializedBackendInitialized <- persistentDataStoreIsInitialized uninitializedBackend
assertEqual "" (Right True) isInitializedBackendInitialized
assertEqual "" (Right False) isUninitializedBackendInitialized
testInitializationReplacesAllPreviousData :: Test
testInitializationReplacesAllPreviousData = TestCase $ do
backend <- makeDefaultRedisBackend defaultPrefix
_ <- persistentDataStoreInitialize backend initialData
_ <- persistentDataStoreIsInitialized backend
flagResult <- persistentDataStoreGetFeature backend "features" "first-flag"
segmentResult <- persistentDataStoreGetFeature backend "segments" "first-segment"
case flagResult of Right (Just _) -> pure (); _ -> assertFailure "first-flag was not present"
case segmentResult of Right (Just _) -> pure (); _ -> assertFailure "first-segment was not present"
_ <- persistentDataStoreInitialize backend emptyData
flagResult' <- persistentDataStoreGetFeature backend "features" "first-flag"
segmentResult' <- persistentDataStoreGetFeature backend "segments" "first-segment"
case flagResult' of Right Nothing -> pure (); _ -> assertFailure "first-flag was not present"
case segmentResult' of Right Nothing -> pure (); _ -> assertFailure "first-segment was not present"
allTests :: Test
allTests =
TestList
[ testClientIsNotInitializedByDefault
, testClientCanBeMarkedAsInitialized
, testClientCanSeeInitializiationFromAnotherClient
, testDifferentPrefixesAreIndependent
, testInitializationReplacesAllPreviousData
]