postgresql-types-0.1.1: src/unit-tests/PostgresqlTypes/UuidSpec.hs
module PostgresqlTypes.UuidSpec (spec) where
import Data.Data (Proxy (Proxy))
import qualified Data.UUID as UUID
import qualified PostgresqlTypes.Uuid as Uuid
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 @Uuid.Uuid)
describe "IsScalar laws" do
Scripts.testIsScalar (Proxy @Uuid.Uuid)
describe "Constructors" do
describe "fromUUID" do
it "creates Uuid from UUID" do
let uuid = UUID.nil
pgUuid = Uuid.fromUUID uuid
Uuid.toUUID pgUuid `shouldBe` uuid
describe "Accessors" do
describe "toUUID" do
it "extracts UUID value" do
let uuid = UUID.nil
pgUuid = Uuid.fromUUID uuid
Uuid.toUUID pgUuid `shouldBe` uuid
describe "Property Tests" do
it "roundtrips through toUUID and fromUUID" do
property \(uuid :: UUID.UUID) ->
let pgUuid = Uuid.fromUUID uuid
in Uuid.toUUID pgUuid === uuid
it "roundtrips through fromUUID and toUUID" do
property \(pgUuid :: Uuid.Uuid) ->
let uuid = Uuid.toUUID pgUuid
pgUuid' = Uuid.fromUUID uuid
in pgUuid' === pgUuid