postgresql-types-0.1.1: src/unit-tests/PostgresqlTypes/ByteaSpec.hs
module PostgresqlTypes.ByteaSpec (spec) where
import qualified Data.ByteString as ByteString
import Data.Data (Proxy (Proxy))
import qualified PostgresqlTypes.Bytea as Bytea
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.Instances ()
import qualified UnitTests.Scripts as Scripts
spec :: Spec
spec = do
describe "Show/Read laws" do
Scripts.testShowRead (Proxy @Bytea.Bytea)
describe "IsScalar laws" do
Scripts.testIsScalar (Proxy @Bytea.Bytea)
describe "Constructors" do
describe "fromByteString" do
it "creates Bytea from ByteString" do
let bs = ByteString.pack [1, 2, 3, 4, 5]
pgBytea = Bytea.fromByteString bs
Bytea.toByteString pgBytea `shouldBe` bs
it "creates Bytea from empty ByteString" do
let bs = ByteString.empty
pgBytea = Bytea.fromByteString bs
Bytea.toByteString pgBytea `shouldBe` bs
it "preserves binary data" do
let bs = ByteString.pack [0, 255, 128, 1, 127]
pgBytea = Bytea.fromByteString bs
Bytea.toByteString pgBytea `shouldBe` bs
describe "Accessors" do
describe "toByteString" do
it "extracts ByteString value" do
let bs = ByteString.pack [10, 20, 30]
pgBytea = Bytea.fromByteString bs
Bytea.toByteString pgBytea `shouldBe` bs
describe "Property Tests" do
it "roundtrips through toByteString and fromByteString" do
property \(bs :: ByteString.ByteString) ->
let pgBytea = Bytea.fromByteString bs
in Bytea.toByteString pgBytea === bs
it "roundtrips through fromByteString and toByteString" do
property \(pgBytea :: Bytea.Bytea) ->
let bs = Bytea.toByteString pgBytea
pgBytea' = Bytea.fromByteString bs
in pgBytea' === pgBytea