mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-26 00:43:09 +03:00
0a4194a1bc
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/3010 GitOrigin-RevId: 3b09a7d61343d406d1ecc5d6aaab866564c9dff8
80 lines
2.1 KiB
Haskell
80 lines
2.1 KiB
Haskell
module Hasura.Backends.MySQL.DataLoader.ExecuteTests
|
|
( spec,
|
|
)
|
|
where
|
|
|
|
import Data.HashMap.Strict.InsOrd qualified as HMS
|
|
import Data.Vector qualified as V
|
|
import Hasura.Backends.MySQL.DataLoader.Execute
|
|
import Hasura.Prelude
|
|
import Hedgehog
|
|
import Hedgehog.Gen
|
|
import Hedgehog.Range
|
|
import Test.Hspec
|
|
import Test.Hspec.Hedgehog
|
|
|
|
spec :: Spec
|
|
spec = do
|
|
describe "joinObjectRows" $ do
|
|
joinObjectRowsThrowsIfRightRowsIsEmpty
|
|
joinObjectRowsThrowsIfRightRowsIsLargerThanOne
|
|
describe "leftObjectJoin" $ do
|
|
leftObjectJoinThrowsIfRightRowsIsEmpty
|
|
leftObjectJoinThrowsIfRightRowsIsLargerThanOne
|
|
|
|
joinObjectRowsThrowsIfRightRowsIsEmpty :: Spec
|
|
joinObjectRowsThrowsIfRightRowsIsEmpty =
|
|
it "throws if rightRows is empty" $
|
|
joinObjectRows
|
|
Nothing
|
|
""
|
|
HMS.empty
|
|
empty
|
|
`shouldSatisfy` invariant
|
|
|
|
joinObjectRowsThrowsIfRightRowsIsLargerThanOne :: Spec
|
|
joinObjectRowsThrowsIfRightRowsIsLargerThanOne = do
|
|
it "throws if rightRows is two or more"
|
|
. hedgehog
|
|
$ do
|
|
size <- forAll $ integral (linear 2 100)
|
|
let result =
|
|
joinObjectRows
|
|
Nothing
|
|
""
|
|
HMS.empty
|
|
(V.replicate size HMS.empty)
|
|
assert $ invariant result
|
|
|
|
leftObjectJoinThrowsIfRightRowsIsEmpty :: Spec
|
|
leftObjectJoinThrowsIfRightRowsIsEmpty =
|
|
it "throws if rightRows is empty" $
|
|
leftObjectJoin
|
|
Nothing
|
|
""
|
|
[]
|
|
(RecordSet Nothing (V.singleton HMS.empty) Nothing)
|
|
(RecordSet Nothing mempty Nothing)
|
|
`shouldSatisfy` invariant
|
|
|
|
leftObjectJoinThrowsIfRightRowsIsLargerThanOne :: Spec
|
|
leftObjectJoinThrowsIfRightRowsIsLargerThanOne =
|
|
it "throws if rightRows is two or more"
|
|
. hedgehog
|
|
$ do
|
|
size <- forAll $ integral (linear 2 100)
|
|
let result =
|
|
leftObjectJoin
|
|
Nothing
|
|
""
|
|
[]
|
|
(RecordSet Nothing (V.singleton HMS.empty) Nothing)
|
|
(RecordSet Nothing (V.replicate size HMS.empty) Nothing)
|
|
assert $ invariant result
|
|
|
|
invariant :: Either ExecuteProblem a -> Bool
|
|
invariant =
|
|
\case
|
|
Left (BrokenJoinInvariant _) -> True
|
|
_ -> False
|