pqi-conformance 0.1.2.2 → 1.0.0.0
raw patch · 6 files changed
+50/−4 lines, 6 filesdep ~pqiPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: pqi
API changes (from Hackage documentation)
Files
- CHANGELOG.md +6/−0
- README.md +2/−1
- pqi-conformance.cabal +3/−2
- src/library/Pqi/Conformance.hs +2/−0
- src/library/Pqi/Conformance/Operation/ResStatus.hs +20/−0
- src/library/Pqi/Conformance/Reference.hs +17/−1
CHANGELOG.md view
@@ -1,3 +1,9 @@+# v1.0.0.0++## Non-breaking++- Differential spec for the new `resStatus` field of `Pqi.Adapter`+ # v0.1.2.2 ## Fixes
README.md view
@@ -48,7 +48,8 @@ `Pqi.Conformance.Operation.*` — `...Operation.Exec`, `...Operation.ExecParams`, `...Operation.LoSeek`, `...Operation.Fnumber`, and so on, one for every public method of `Pqi.IsConnection`, `Pqi.IsResult`, and `Pqi.IsCancel`,-plus the standalone `Pqi.unescapeBytea`. Each module holds the differential+plus the connection-independent `Adapter` fields `Pqi.unescapeBytea` and+`Pqi.resStatus`. Each module holds the differential scenarios that exercise that one operation (its happy paths, its edge cases, and its error paths). Shared scenario fragments live in `Pqi.Conformance.Scenario`.
pqi-conformance.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: pqi-conformance-version: 0.1.2.2+version: 1.0.0.0 category: Database, PostgreSQL, Testing synopsis: Differential conformance tests for pqi adapters description:@@ -169,6 +169,7 @@ Pqi.Conformance.Operation.Reset Pqi.Conformance.Operation.ResetPoll Pqi.Conformance.Operation.ResetStart+ Pqi.Conformance.Operation.ResStatus Pqi.Conformance.Operation.ResultErrorField Pqi.Conformance.Operation.ResultErrorMessage Pqi.Conformance.Operation.ResultStatus@@ -201,6 +202,6 @@ directory >=1.3 && <1.4, hspec >=2.11 && <2.12, postgresql-libpq >=0.11 && <0.12,- pqi ^>=0.1,+ pqi ^>=1.0, testcontainers-postgresql ^>=0.2, text >=1.2 && <3,
src/library/Pqi/Conformance.hs view
@@ -93,6 +93,7 @@ import qualified Pqi.Conformance.Operation.ProtocolVersion as ProtocolVersion import qualified Pqi.Conformance.Operation.PutCopyData as PutCopyData import qualified Pqi.Conformance.Operation.PutCopyEnd as PutCopyEnd+import qualified Pqi.Conformance.Operation.ResStatus as ResStatus import qualified Pqi.Conformance.Operation.Reset as Reset import qualified Pqi.Conformance.Operation.ResetPoll as ResetPoll import qualified Pqi.Conformance.Operation.ResetStart as ResetStart@@ -218,6 +219,7 @@ SetErrorVerbosity.spec adapter -- Result inspection ResultStatus.spec adapter+ ResStatus.spec adapter ResultErrorMessage.spec adapter ResultErrorField.spec adapter UnsafeFreeResult.spec adapter
+ src/library/Pqi/Conformance/Operation/ResStatus.hs view
@@ -0,0 +1,20 @@+-- | Coverage for 'Pqi.resStatus': rendering each 'Pqi.ExecStatus' as the+-- string describing its status code.+module Pqi.Conformance.Operation.ResStatus+ ( spec,+ )+where++import qualified Pqi+import Pqi.Conformance.Prelude+import qualified Pqi.Conformance.Reference as Reference+import Test.Hspec++spec :: Pqi.Adapter -> SpecWith ByteString+spec adapter =+ describe "resStatus" do+ for_ [minBound .. maxBound] \execStatus ->+ it (show execStatus) \_ -> do+ candidate <- Pqi.resStatus adapter execStatus+ reference <- Pqi.resStatus Reference.adapter execStatus+ candidate `shouldBe` reference
src/library/Pqi/Conformance/Reference.hs view
@@ -22,7 +22,8 @@ Pqi.connectdb = \conninfo -> mkConnection <$> LibPQ.connectdb conninfo, Pqi.connectStart = \conninfo -> mkConnection <$> LibPQ.connectStart conninfo, Pqi.newNullConnection = mkConnection <$> LibPQ.newNullConnection,- Pqi.unescapeBytea = \input -> LibPQ.unescapeBytea input+ Pqi.unescapeBytea = \input -> LibPQ.unescapeBytea input,+ Pqi.resStatus = \execStatus -> LibPQ.resStatus (toExecStatus execStatus) } -- | Build a 'Pqi.Connection' whose fields close over the given@@ -232,6 +233,21 @@ LibPQ.SingleTuple -> Pqi.SingleTuple LibPQ.PipelineSync -> Pqi.PipelineSync LibPQ.PipelineAbort -> Pqi.PipelineAbort++toExecStatus :: Pqi.ExecStatus -> LibPQ.ExecStatus+toExecStatus = \case+ Pqi.EmptyQuery -> LibPQ.EmptyQuery+ Pqi.CommandOk -> LibPQ.CommandOk+ Pqi.TuplesOk -> LibPQ.TuplesOk+ Pqi.CopyOut -> LibPQ.CopyOut+ Pqi.CopyIn -> LibPQ.CopyIn+ Pqi.CopyBoth -> LibPQ.CopyBoth+ Pqi.BadResponse -> LibPQ.BadResponse+ Pqi.NonfatalError -> LibPQ.NonfatalError+ Pqi.FatalError -> LibPQ.FatalError+ Pqi.SingleTuple -> LibPQ.SingleTuple+ Pqi.PipelineSync -> LibPQ.PipelineSync+ Pqi.PipelineAbort -> LibPQ.PipelineAbort fromConnStatus :: LibPQ.ConnStatus -> Pqi.ConnStatus fromConnStatus = \case