{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TypeFamilies #-} module Main where import Control.Monad import Data.Aeson import Data.Aeson.Types import Data.Maybe import GHC.Generics import qualified Database.Orchestrate as DB import System.Exit (exitFailure) import System.Random data TestRecord = TestRecord { string :: String , number :: Int } deriving (Show,Read,Generic,Eq) instance FromJSON TestRecord instance ToJSON TestRecord reachTest :: Integer -> IO () reachTest number = do putStrLn $ "Completed test number " ++ show number main :: IO () main = do configTxt <- readFile "examples/config.txt" randomNumber <- randomIO :: IO Integer let config = read configTxt :: (String,String) let dbApplication = DB.createStdApplication "TestApp" (fst config) let dbCollection = DB.createStdCollection (snd config) let testRecord1 = TestRecord {string = "You may delay, but time will not.(Benjamin Franklin)",number = 903} let testRecord2 = TestRecord {string = "Two things are infinite: the universe and human stupidity; and I am not sure about the universe.(Albert Einstein)",number = 913} res1 <- DB.validateApplication dbApplication unless res1 exitFailure reachTest 1 let testKey = "hello-world" ++ show randomNumber res2 <- DB.orchestrateCollectionPut dbApplication dbCollection testKey testRecord1 unless res2 exitFailure reachTest 2 res3 <- DB.orchestrateCollectionPut dbApplication dbCollection "irrelevant" testRecord1 unless res3 exitFailure reachTest 3 res4 <- DB.orchestrateCollectionPutWithoutKey dbApplication dbCollection testRecord2 unless res4 exitFailure reachTest 4 shouldBeTestRecord1Maybe <- DB.orchestrateCollectionGet dbApplication dbCollection testKey :: IO (Maybe TestRecord) let shouldBeTestRecord1 = fromJust shouldBeTestRecord1Maybe unless (shouldBeTestRecord1 == testRecord1) exitFailure reachTest 5 res5 <- DB.orchestrateCollectionDeleteKey dbApplication dbCollection "irrelevant" unless res5 exitFailure reachTest 6 res6Maybe <- DB.orchestrateCollectionSearch dbApplication dbCollection "You may delay," let (res6,hasNextPage) = fromJust res6Maybe unless (checkIfResSixIsCorrect res6) exitFailure reachTest 7 res7Maybe <- DB.orchestrateCollectionList dbApplication dbCollection 100 let res7 = fromJust res7Maybe unless (res7 /= []) exitFailure reachTest 8 checkIfResSixIsCorrect :: [Object] -> Bool checkIfResSixIsCorrect (first:rest) = do let num = flip parseMaybe first $ \obj -> obj .: "number" :: Parser Int isJust num && (if fromJust num == 903 then checkIfResSixIsCorrect rest else False) checkIfResSixIsCorrect [] = True