Skip to content

Commit 7797cfd

Browse files
committed
Add e2eConfigs helper function
1 parent 98a223e commit 7797cfd

File tree

4 files changed

+85
-36
lines changed

4 files changed

+85
-36
lines changed

doc/e2e-testing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ eternl:http://localhost:4008/?eternl:Contract
252252
"
253253
```
254254

255-
The `nami:` prefix specifies which browser extension to load for the test, and the query parameter is for the router to be able to find the appropriate config.
255+
The `eternl:` prefix specifies which browser extension to load for the test, and the query parameter is for the router to be able to find the appropriate config.
256256

257257
Refer to the docs for `Contract.Test.E2E.route` function for an overview of the URL structure.
258258

src/Contract/Test/E2E.purs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,11 @@ module Contract.Test.E2E
44

55
import Ctl.Internal.Test.E2E.Feedback.Hooks (e2eFeedbackHooks) as X
66
import Ctl.Internal.Test.E2E.Options (parseCliArgs) as X
7-
import Ctl.Internal.Test.E2E.Route (E2EConfigName, E2ETestName, addLinks, route) as X
7+
import Ctl.Internal.Test.E2E.Route
8+
( E2EConfigName
9+
, E2ETestName
10+
, addLinks
11+
, e2eConfigs
12+
, route
13+
) as X
814
import Ctl.Internal.Test.E2E.Runner (runE2ECommand, runE2ETests) as X

src/Internal/Test/E2E/Route.purs

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
module Ctl.Internal.Test.E2E.Route
22
( E2ETestName
33
, E2EConfigName
4-
, route
5-
, parseRoute
64
, Route
75
, addLinks
6+
, e2eConfigs
7+
, parseRoute
8+
, route
89
) where
910

1011
import Prelude
@@ -13,12 +14,14 @@ import Cardano.Types (NetworkId(TestnetId))
1314
import Cardano.Types.PrivateKey (PrivateKey)
1415
import Cardano.Types.PrivateKey as PrivateKey
1516
import Cardano.Types.RawBytes (RawBytes(RawBytes))
16-
import Contract.Config (ContractParams)
17+
import Contract.Config (ContractParams, testnetConfig)
1718
import Contract.Monad (Contract, runContract)
1819
import Contract.Test.Cip30Mock (withCip30Mock)
1920
import Contract.Wallet
20-
( PrivatePaymentKey(PrivatePaymentKey)
21+
( KnownWallet(Gero, Eternl, Lode, Lace)
22+
, PrivatePaymentKey(PrivatePaymentKey)
2123
, PrivateStakeKey(PrivateStakeKey)
24+
, walletName
2225
)
2326
import Contract.Wallet.Key (privateKeysToKeyWallet)
2427
import Control.Alt ((<|>))
@@ -33,15 +36,17 @@ import Data.Array (last)
3336
import Data.Array as Array
3437
import Data.Bifunctor (lmap)
3538
import Data.ByteArray (hexToByteArray)
36-
import Data.Either (Either(Left), note)
39+
import Data.Either (Either(Left, Right), note)
3740
import Data.Foldable (fold)
3841
import Data.Map (Map)
3942
import Data.Map as Map
40-
import Data.Maybe (Maybe(Just, Nothing), maybe)
43+
import Data.Maybe (Maybe(Just, Nothing), fromMaybe, maybe)
4144
import Data.Newtype (wrap)
42-
import Data.String (stripPrefix)
45+
import Data.String (stripPrefix, stripSuffix)
4346
import Data.String.Common (split)
4447
import Data.String.Pattern (Pattern(Pattern))
48+
import Data.Traversable (traverse)
49+
import Data.Tuple (Tuple(Tuple))
4550
import Data.Tuple.Nested (type (/\), (/\))
4651
import Effect (Effect)
4752
import Effect.Aff (Aff, delay, launchAff_)
@@ -55,6 +60,47 @@ type E2ETestName = String
5560
-- | CIP-30 mock). Used in the URL for routing
5661
type E2EConfigName = String
5762

63+
e2eConfigs
64+
:: Array E2EConfigName
65+
-> Either String (Map E2EConfigName (ContractParams /\ Maybe String))
66+
e2eConfigs =
67+
map Map.fromFoldable
68+
<<< traverse (\env -> Tuple env <$> resolveConfigName env)
69+
where
70+
resolveConfigName
71+
:: E2EConfigName
72+
-> Either String (ContractParams /\ Maybe String)
73+
resolveConfigName configName = do
74+
let
75+
walletSpec =
76+
fromMaybe configName $ stripPrefix (Pattern "localnet-")
77+
configName
78+
wallet' /\ isMock =
79+
maybe (walletSpec /\ false) (flip Tuple true) $ stripSuffix
80+
(Pattern "-mock")
81+
walletSpec
82+
wallet <- resolveWallet wallet'
83+
pure $
84+
Tuple
85+
(mkContractParams wallet)
86+
(if isMock then Just wallet else Nothing)
87+
88+
resolveWallet :: String -> Either String String
89+
resolveWallet =
90+
case _ of
91+
"gero" -> Right $ walletName Gero
92+
"eternl" -> Right $ walletName Eternl
93+
"lode" -> Right $ walletName Lode
94+
"lace" -> Right $ walletName Lace
95+
wallet -> Left $ "e2eConfigs: unsupported wallet: " <> wallet
96+
97+
mkContractParams :: String -> ContractParams
98+
mkContractParams wallet =
99+
testnetConfig
100+
{ walletSpec =
101+
Just $ ConnectToGenericCip30 wallet { cip95: false }
102+
}
103+
58104
-- | Router state - parsed from URL by `parseRoute`
59105
type Route =
60106
{ configName :: E2EConfigName

templates/ctl-scaffold/test/E2E.purs

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,40 @@ module Scaffold.Test.E2E.Serve where
33

44
import Contract.Prelude
55

6-
import Contract.Config
7-
( ContractParams
8-
, KnownWallet(Gero, Eternl, Lode)
9-
, WalletSpec(ConnectToGenericCip30)
10-
, testnetConfig
11-
, walletName
12-
)
6+
import Contract.Config (ContractParams)
137
import Contract.Monad (Contract)
14-
import Contract.Test.E2E (E2EConfigName, E2ETestName, addLinks, route)
8+
import Contract.Test.E2E
9+
( E2EConfigName
10+
, E2ETestName
11+
, addLinks
12+
, e2eConfigs
13+
, route
14+
)
15+
import Data.Bifunctor (lmap)
1516
import Data.Map (Map)
1617
import Data.Map as Map
18+
import Effect.Exception (error)
1719
import Scaffold as Scaffold
1820

1921
main :: Effect Unit
2022
main = do
23+
configs <- liftEither $ lmap error mkConfigs
2124
addLinks configs tests
2225
route configs tests
2326

24-
configs :: Map E2EConfigName (ContractParams /\ Maybe String)
25-
configs = map (map walletName) <$> Map.fromFoldable
26-
[ "gero" /\ testnetConfig' Gero /\ Nothing
27-
, "eternl" /\ testnetConfig' Eternl /\ Nothing
28-
, "lode" /\ testnetConfig' Lode /\ Nothing
29-
, "gero-mock" /\ testnetConfig' Gero /\ Just Gero
30-
, "lode-mock" /\ testnetConfig' Lode /\ Just Lode
31-
, "eternl-mock" /\ testnetConfig' Eternl /\ Just Eternl
32-
, "localnet-eternl-mock" /\ testnetConfig' Eternl /\ Just Eternl
33-
, "localnet-gero-mock" /\ testnetConfig' Gero /\ Just Gero
34-
, "localnet-lode-mock" /\ testnetConfig' Lode /\ Just Lode
35-
]
36-
where
37-
testnetConfig' :: KnownWallet -> ContractParams
38-
testnetConfig' wallet =
39-
testnetConfig
40-
{ walletSpec =
41-
Just $ ConnectToGenericCip30 (walletName wallet) { cip95: false }
42-
}
27+
mkConfigs :: Either String (Map E2EConfigName (ContractParams /\ Maybe String))
28+
mkConfigs =
29+
e2eConfigs
30+
[ "gero"
31+
, "eternl"
32+
, "lode"
33+
, "gero-mock"
34+
, "lode-mock"
35+
, "eternl-mock"
36+
, "localnet-eternl-mock"
37+
, "localnet-gero-mock"
38+
, "localnet-lode-mock"
39+
]
4340

4441
tests :: Map E2ETestName (Contract Unit)
4542
tests = Map.fromFoldable

0 commit comments

Comments
 (0)