packages feed

pqi-conformance-0.0.1.0: src/library/Pqi/Conformance/Operation/GetCopyData.hs

-- | Coverage for 'Pqi.getCopyData': receiving rows from a
-- @COPY TO STDOUT@ in text, CSV, and binary formats.
module Pqi.Conformance.Operation.GetCopyData
  ( spec,
  )
where

import Pqi (IsConnection)
import Pqi.Conformance.Harness
import Pqi.Conformance.Prelude
import Pqi.Conformance.Scenario (collectCopyOut, drainResults, execScenario)
import Test.Hspec

spec :: (IsConnection c) => Proxy c -> SpecWith ByteString
spec proxy =
  describe "getCopyData" do
    let copyOut sql conninfo =
          differential proxy conninfo \connection -> do
            started <- execScenario sql connection
            rows <- collectCopyOut connection
            outcome <- drainResults connection
            pure (started, rows, outcome)
    it "receives text rows"
      $ copyOut "copy (select i, i * 2 from generate_series (1, 3) as i) to stdout"
    it "receives CSV rows with a header"
      $ copyOut
        "copy (select i as n, 'v' || i as v from generate_series (1, 2) as i) to stdout (format csv, header)"
    it "receives binary rows"
      $ copyOut "copy (select i from generate_series (1, 2) as i) to stdout (format binary)"