{-# LANGUAGE OverloadedStrings #-}
module RawMongoHelpers where
import qualified Database.MongoDB as MongoDB
import Database.Persist.MongoDB (toInsertDoc, docToEntityThrow, collectionName, recordToDocument)
import MongoInit
import PersistentTest (cleanDB)
import PersistentTestModels
db :: ReaderT MongoDB.MongoContext IO () -> IO ()
db = db' cleanDB
specs :: Spec
specs = do
describe "raw MongoDB helpers" $ do
it "collectionName" $ do
collectionName (Person "Duder" 0 Nothing) @?= "Person"
it "toInsertFields, entityFields, & docToEntityThrow" $ db $ do
let p1 = Person "Duder" 0 Nothing
let doc = toInsertDoc p1
MongoDB.ObjId _id <- MongoDB.insert "Person" $ doc
let idSelector = "_id" MongoDB.=: _id
Entity _ ent1 <- docToEntityThrow $ idSelector:doc
liftIO $ p1 @?= ent1
let p2 = p1 {personColor = Just "blue"}
let doc2 = idSelector:recordToDocument p2
MongoDB.save "Person" doc2
Entity _ ent2 <- docToEntityThrow doc2
liftIO $ p2 @?= ent2