tests: add basic resource embedding costs
Adds costs thresholds on the PlanSpec for the o2m,m2o and m2m queries.
This commit is contained in:
committed by
Steve Chavez
parent
92d00749a3
commit
c050b61db8
@@ -1,3 +1,5 @@
|
|||||||
|
{-# LANGUAGE MultiWayIf #-}
|
||||||
|
|
||||||
module Feature.Query.PlanSpec where
|
module Feature.Query.PlanSpec where
|
||||||
|
|
||||||
import Control.Lens ((^?))
|
import Control.Lens ((^?))
|
||||||
@@ -13,7 +15,7 @@ import Test.Hspec.Wai
|
|||||||
import Test.Hspec.Wai.JSON
|
import Test.Hspec.Wai.JSON
|
||||||
|
|
||||||
import PostgREST.Config.PgVersion (PgVersion, pgVersion120,
|
import PostgREST.Config.PgVersion (PgVersion, pgVersion120,
|
||||||
pgVersion130)
|
pgVersion130, pgVersion100)
|
||||||
import Protolude hiding (get)
|
import Protolude hiding (get)
|
||||||
import SpecHelper
|
import SpecHelper
|
||||||
|
|
||||||
@@ -264,6 +266,37 @@ spec actualPgVersion = do
|
|||||||
resStatus `shouldBe` Status { statusCode = 200, statusMessage="OK" }
|
resStatus `shouldBe` Status { statusCode = 200, statusMessage="OK" }
|
||||||
resBody `shouldSatisfy` (\t -> LBS.take 9 t == "Aggregate")
|
resBody `shouldSatisfy` (\t -> LBS.take 9 t == "Aggregate")
|
||||||
|
|
||||||
|
describe "resource embedding costs" $ do
|
||||||
|
it "a one to many doesn't surpass a threshold" $ do
|
||||||
|
r <- request methodGet "/clients?select=*,projects(*)&id=eq.1"
|
||||||
|
(acceptHdrs "application/vnd.pgrst.plan") ""
|
||||||
|
|
||||||
|
let totalCost = simpleBody r ^? nth 0 . key "Plan" . key "Total Cost"
|
||||||
|
liftIO $ totalCost `shouldBe`
|
||||||
|
if actualPgVersion > pgVersion120
|
||||||
|
then Just [aesonQQ|58.26|]
|
||||||
|
else Just [aesonQQ|33.25|]
|
||||||
|
|
||||||
|
it "a many to one doesn't surpass a threshold" $ do
|
||||||
|
r <- request methodGet "/projects?select=*,clients(*)&id=eq.1"
|
||||||
|
(acceptHdrs "application/vnd.pgrst.plan") ""
|
||||||
|
|
||||||
|
let totalCost = simpleBody r ^? nth 0 . key "Plan" . key "Total Cost"
|
||||||
|
liftIO $ totalCost `shouldBe`
|
||||||
|
if actualPgVersion > pgVersion120
|
||||||
|
then Just [aesonQQ|16.39|]
|
||||||
|
else Just [aesonQQ|16.41|]
|
||||||
|
|
||||||
|
it "a many to many doesn't surpass a threshold" $ do
|
||||||
|
r <- request methodGet "/users?select=*,tasks(*)&id=eq.1"
|
||||||
|
(acceptHdrs "application/vnd.pgrst.plan") ""
|
||||||
|
|
||||||
|
let totalCost = simpleBody r ^? nth 0 . key "Plan" . key "Total Cost"
|
||||||
|
liftIO $ totalCost `shouldBe`
|
||||||
|
if | actualPgVersion > pgVersion120 -> Just [aesonQQ|130.44|]
|
||||||
|
| actualPgVersion > pgVersion100 -> Just [aesonQQ|69.34|]
|
||||||
|
| otherwise -> Just [aesonQQ|70.79|]
|
||||||
|
|
||||||
disabledSpec :: SpecWith ((), Application)
|
disabledSpec :: SpecWith ((), Application)
|
||||||
disabledSpec =
|
disabledSpec =
|
||||||
it "doesn't work if db-plan-enabled=false(the default)" $ do
|
it "doesn't work if db-plan-enabled=false(the default)" $ do
|
||||||
|
|||||||
Reference in New Issue
Block a user