packages feed

hasql-2.0.0.0: src/library-tests/Integration/Sharing/Encoders/UnknownSpec.hs

{-# OPTIONS_GHC -Wno-deprecations #-}

module Integration.Sharing.Encoders.UnknownSpec (spec) where

import Hasql.Connection qualified as Connection
import Hasql.Decoders qualified as Decoders
import Hasql.Encoders qualified as Encoders
import Hasql.Session qualified as Session
import Hasql.Statement qualified as Statement
import Helpers.Scripts qualified as Scripts
import Prelude
import Test.Hspec

spec :: SpecWith Scripts.ScopeParams
spec = do
  describe "Unknown Type Encoders" do
    it "handles unknown type encoding" \config -> do
      name <- Scripts.generateSymname
      Scripts.onPreparableConnection config \connection -> do
        result <- Connection.use connection do
          -- First create the enum type
          Session.statement ()
            $ Statement.preparable
              (mconcat ["create type ", name, " as enum ('sad', 'ok', 'happy')"])
              mempty
              Decoders.noResult
          -- Then test encoding
          Session.statement "ok"
            $ Statement.preparable
              (mconcat ["select $1 = ('ok' :: ", name, ")"])
              (Encoders.param (Encoders.nonNullable Encoders.unknown))
              (Decoders.singleRow (Decoders.column (Decoders.nonNullable Decoders.bool)))
        result `shouldBe` Right True