packages feed

kiroku-store-0.12.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)
      ]