packages feed

geojson-1.3.2: test/Data/Geospatial/Internal/GeoFeatureTests.hs

module Data.Geospatial.Internal.GeoFeatureTests where

import qualified Data.Aeson       as A
import           Test.Tasty
import           Test.Tasty.Hspec (Spec, describe, it, shouldBe, testSpec)
-- Local
import           Fixture


-- Tests

tests :: IO TestTree
tests = do
  specs <- specTests
  pure $ testGroup "Data.Geospatial.Internal.GeoFeatureTests" [specs]

specTests :: IO TestTree
specTests = do
  specs <- sequence
    [ testSpec "Data.Geospatial.Internal.GeoFeature.fromJSON" testFromJSON
    , testSpec "Data.Geospatial.Internal.GeoFeature.toJSON" testToJSON
    ]
  pure $ testGroup "Data.Geospatial.Internal.GeoFeatureTests.Spec" specs

-- Spec

-- >>> (A.decode . BS.pack) bigFeatureJSON == Just bigFeature
-- True
--
-- >>> (A.decode . BS.pack) featureWithNoPropertiesJSON == Just featureWithNoProperties
-- True
--
-- >>> (A.decode . BS.pack) featureWithNoIdJSON == Just featureWithNoId
-- True
--
-- >>> (A.decode . BS.pack) featureWithNoBBoxJSON == Just featureWithNoBBox
-- True
--
-- >>> (A.decode . BS.pack) featureWithNoGeometryJSON == Just featureWithNoGeometry
-- True
--
testFromJSON :: Spec
testFromJSON =
  describe "fromJSON" $
    it "decode Feature Objects from GeoJSON" $ do
      A.decode bigFeatureJSON              `shouldBe` Just bigFeature
      A.decode featureWithNoPropertiesJSON `shouldBe` Just featureWithNoProperties
      A.decode featureWithNoIdJSON         `shouldBe` Just featureWithNoId
      A.decode featureWithNoBBoxJSON       `shouldBe` Just featureWithNoBBox
      A.decode featureWithNoGeometryJSON   `shouldBe` Just featureWithNoGeometry

-- >>> (A.decode . A.encode) bigFeature == Just bigFeature
-- True
--
-- >>> (A.decode . A.encode) featureWithNoProperties == Just featureWithNoProperties
-- True
--
-- >>> (A.decode . A.encode) featureWithNoId == Just featureWithNoId
-- True
--
-- >>> (A.decode . A.encode) featureWithNoBBox == Just featureWithNoBBox
-- True
--
-- >>> (A.decode . A.encode) featureWithNoGeometry == Just featureWithNoGeometry
-- True
--
testToJSON :: Spec
testToJSON =
  describe "toJSON" $
    it "encode Feature Objects to GeoJSON" $ do
      (A.decode . A.encode) bigFeature              `shouldBe` Just bigFeature
      (A.decode . A.encode) featureWithNoProperties `shouldBe` Just featureWithNoProperties
      (A.decode . A.encode) featureWithNoId         `shouldBe` Just featureWithNoId
      (A.decode . A.encode) featureWithNoBBox       `shouldBe` Just featureWithNoBBox
      (A.decode . A.encode) featureWithNoGeometry   `shouldBe` Just featureWithNoGeometry