@@ -2,6 +2,10 @@ module Test.WebApi.DynamicLogic
22 ( propDL
33 , prop_api
44 , runWebApiTest
5+ , apiAction
6+ , apiForAllVar
7+ , getCtxAtTypeDL
8+ , arbitraryVal
59 , module Test.WebApi.StateModel
610 , Reifies
711 ) where
@@ -21,6 +25,8 @@ import Test.QuickCheck.Monadic
2125import Test.QuickCheck.Monadic qualified as QC
2226import Test.QuickCheck.Extras
2327import Data.Reflection
28+ import Test.QuickCheck.StateModel.Variables
29+ import qualified Record
2430
2531propDL :: forall apps s . Reifies s (WebApiGlobalStateModel apps ) => Proxy s -> (forall a . WebApiSessions apps a -> IO a ) -> DL (ApiState s apps ) () -> Property
2632propDL _ webapiRunner d = forAllDL d (prop_api webapiRunner)
@@ -34,3 +40,22 @@ prop_api webapiRunner s =
3440
3541runWebApiTest :: WebApiGlobalStateModel apps -> (forall (s :: Type ). Reifies s (WebApiGlobalStateModel apps ) => Proxy s -> r ) -> r
3642runWebApiTest gstate runner = reify gstate (\ ps -> runner ps)
43+
44+ apiAction :: (Typeable a , Eq (Action s a ), Show (Action s a )) => Action s a -> DL s (Val a )
45+ apiAction = fmap (Var id ) . action
46+
47+ apiForAllVar :: forall a s . Typeable a => DL s (Val a )
48+ apiForAllVar = fmap (Var id ) forAllVar
49+
50+ getCtxAtTypeDL :: forall a s . Typeable a => DL s [Val a ]
51+ getCtxAtTypeDL = (fmap (Var id ) . ctxAtType @ a ) <$> getVarContextDL
52+
53+ arbitraryVal :: Typeable a => VarContext -> Gen (Val a )
54+ arbitraryVal = fmap (Var id ) . arbitraryVar
55+
56+ shrinkVal :: Typeable a => VarContext -> Val a -> [Val a ]
57+ shrinkVal vctx = \ case
58+ v@ Const {} -> [v]
59+ Var f v -> fmap (Var f) $ shrinkVar vctx v
60+ v@ Opt {} -> [v]
61+ -- HKVal f hk -> concat $ Record.hkToListWith (shrinkVal' f vctx) hk
0 commit comments