packages feed

launchdarkly-server-sdk-redis-hedis-1.0.0: test/Util.hs

module Util where

import Control.Monad (void)
import Data.Function ((&))
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import qualified Database.Redis as R
import LaunchDarkly.AesonCompat (KeyMap, emptyObject, insertKey, singleton)
import LaunchDarkly.Server.Store (PersistentDataStore (..), SerializedItemDescriptor (..))
import LaunchDarkly.Server.Store.Redis (makeRedisStore, makeRedisStoreConfig, redisConfigSetNamespace)

defaultPrefix :: T.Text
defaultPrefix = "launchdarkly-test-prefix"

emptyData :: KeyMap (KeyMap SerializedItemDescriptor)
emptyData =
    emptyObject
        & insertKey "features" emptyObject
        & insertKey "segments" emptyObject

initialFlag :: SerializedItemDescriptor
initialFlag = SerializedItemDescriptor {version = 1, deleted = False, item = Just $ T.encodeUtf8 "flag"}

initialSegment :: SerializedItemDescriptor
initialSegment = SerializedItemDescriptor {version = 1, deleted = False, item = Just $ T.encodeUtf8 "segment"}

initialData :: KeyMap (KeyMap SerializedItemDescriptor)
initialData =
    emptyObject
        & insertKey "features" (singleton "first-flag" initialFlag)
        & insertKey "segments" (singleton "first-segment" initialSegment)

makeDefaultRedisBackend :: T.Text -> IO PersistentDataStore
makeDefaultRedisBackend prefix = do
    con <- R.checkedConnect R.defaultConnectInfo
    void $ R.runRedis con R.flushall
    makeRedisStore $ redisConfigSetNamespace prefix $ makeRedisStoreConfig con