packages feed

kiroku-store-0.11.0.0: test/Test/StreamHeadIsolation.hs

module Test.StreamHeadIsolation (spec) where

import Control.Monad (forM_)
import Data.Text qualified as T
import Data.Text.IO qualified as T
import Hasql.Statement qualified as Statement
import Kiroku.Store.SQL qualified as SQL
import Paths_kiroku_store (getDataFileName)
import Test.Hspec

spec :: Spec
spec = describe "stream head legacy isolation" $ do
    forM_ statements $ \(name, actual) ->
        it ("preserves " <> name <> " byte for byte") $ do
            path <- getDataFileName ("test/fixtures/stream-head-isolation/" <> name <> ".sql")
            expected <- T.readFile path
            actual `shouldBe` expected
    it "keeps the six metadata and eleven event result columns" $ do
        columnCount (Statement.toSql SQL.getStreamStmt) `shouldBe` 6
        columnCount (Statement.toSql SQL.readAllForwardStmt) `shouldBe` 11
  where
    columnCount = length . T.splitOn "," . fst . T.breakOn "FROM" . snd . T.breakOn "SELECT"
    statements =
        [ ("getStreamStmt", Statement.toSql SQL.getStreamStmt)
        , ("readStreamForwardStmt", Statement.toSql SQL.readStreamForwardStmt)
        , ("readStreamBackwardStmt", Statement.toSql SQL.readStreamBackwardStmt)
        , ("readAllForwardStmt", Statement.toSql SQL.readAllForwardStmt)
        , ("readAllBackwardStmt", Statement.toSql SQL.readAllBackwardStmt)
        , ("readCategoryForwardStmt", Statement.toSql SQL.readCategoryForwardStmt)
        , ("readCategoryForwardConsumerGroupStmt", Statement.toSql SQL.readCategoryForwardConsumerGroupStmt)
        , ("appendExpectedVersion", Statement.toSql SQL.appendExpectedVersion)
        , ("appendStreamExists", Statement.toSql SQL.appendStreamExists)
        , ("appendNoStream", Statement.toSql SQL.appendNoStream)
        , ("appendAnyVersion", Statement.toSql SQL.appendAnyVersion)
        , ("linkToStreamStmt", Statement.toSql SQL.linkToStreamStmt)
        ]