packages feed

ihp-postgresql-simple-extra-1.3.0: Test/Postgres/Polygon.hs

{-|
Module: Test.Postgres.Polygon
Copyright: (c) digitally induced GmbH, 2022
-}
module Test.Postgres.Polygon where

import CorePrelude
import Data.Either
import Test.Hspec
import Test.Postgres.Support
import IHP.Postgres.Point
import IHP.Postgres.Polygon
import Database.PostgreSQL.Simple.ToField
import qualified Data.Attoparsec.ByteString.Char8 as Attoparsec

tests = do
    let rawPoint1 = "(100,200)"
    let parsedPoint1 = Point { x = 100, y = 200 }
    let rawPoint2 = "(300,400)"
    let parsedPoint2 = Point { x = 300, y = 400 }
    let raw = "(" <> rawPoint1 <> "," <> rawPoint2 <> ")"
    let parsed = Polygon { points = [ parsedPoint1, parsedPoint2 ] }
    let serialized = Many
            [ Plain "polygon'"
            , Many
                [ Plain "("
                , Plain "100.0"
                , Plain ","
                , Plain "200.0"
                , Plain ")"
                ]
            , Plain ","
            , Many
                [ Plain "("
                , Plain "300.0"
                , Plain ","
                , Plain "400.0"
                , Plain ")"
                ]
            , Plain "'"
            ]

    describe "Polygon" do
        describe "Parser" do
            it "Should Parse" do
                Attoparsec.parseOnly parsePolygon raw `shouldBe` Right parsed

        describe "Serializer" do
            it "Should Serialize" do
                serializePolygon parsed `shouldBe` serialized