packages feed

firestore-0.1.0.0: test/Main.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}

module Main where

import Control.Monad.IO.Class (MonadIO (liftIO))
import Data.Aeson.Encode.Pretty
import qualified Data.ByteString.Lazy.Char8 as BS
import qualified Data.HashMap.Internal.Strict as HM
import qualified Data.HashMap.Strict as HS
import Data.Text (Text)
import Database.Firestore
import Database.Firestore.Internal
import Debug.Trace (trace, traceId, traceShow, traceShowId)
import GHC.Generics (Generic)
import Generic.Random
import qualified Network.Google.FireStore.Types as FireStore
import System.IO.Unsafe (unsafePerformIO)
import System.Timeout (timeout)
import Test.QuickCheck
import Test.QuickCheck.Arbitrary (Arbitrary)
import Test.QuickCheck.Instances.ByteString
import Test.QuickCheck.Instances.Text ()
import Test.QuickCheck.Instances.Time
import Test.QuickCheck.Instances.UnorderedContainers

-- import

realTest :: IO ()
realTest = do
  env <- defaultEnvironment
  runFireStore env "carboncopy" $ do
    docs <- listAllDocuments "rss_subscriptions"
    -- (docs, _) <- listDocumentsOnePage "rss_subscriptions" Nothing -- :: IO (Result ([BotUser], Maybe NextPage))
    liftIO $ do
      print "---"
      BS.putStrLn $ encodePretty $ head docs
      print "---"
      print $ length docs
      BS.writeFile "test.json" $ encodePretty $ docs

-- instance Arbitrary (HS.HashMap Text Value) where
--   arbitrary = HS.fromList <$> arbitrary
--   shrink m = HS.fromList <$> shrink (HS.toList m)

-- instance Arbitrary FireStore.Value where
--   arbitrary = genericArbitraryRec uniform
--   shrink = genericShrink

instance Arbitrary Value where
  -- fixme
  arbitrary = genericArbitraryRec uniform `withBaseCase` (String <$> arbitrary)
  shrink = genericShrink

prop_roundtrip_value v = parseValue (buildValue v) == v

prop_roundtrip_value' v = buildValue (parseValue v) == v

main :: IO ()
main =
  do
    -- print "1"
    -- print $ parseValue $ FireStore.value
    -- print "2"

    -- print $ Array [Map (HM.fromList [("", GeoPoint 0.0 0.0)])]
    -- print $ parseValue . buildValue $ Array [Map (HM.fromList [("", GeoPoint 0.0 0.0)])]
    quickCheckWith (stdArgs {maxSize = 10}) $ prop_roundtrip_value
    realTest

-- quickCheck $ prop_roundtrip_value'