Skip to content

Commit 011cc62

Browse files
Mock connection via subpath imports
1 parent 96da234 commit 011cc62

File tree

10 files changed

+119
-120
lines changed

10 files changed

+119
-120
lines changed

packages/keychain/.storybook/mock.ts

-72
This file was deleted.

packages/keychain/.storybook/preview.tsx

+8-7
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ import React from "react";
22
import type { Preview, ReactRenderer } from "@storybook/react";
33
import { withThemeByClassName } from "@storybook/addon-themes";
44
import { SonnerToaster } from "@cartridge/ui-next";
5-
6-
import { StoryParameters } from "./mock";
7-
import { Provider } from "./provider";
5+
import { Provider } from "#components/provider";
6+
import { ParametersProvider } from "#components/provider/parameters";
87

98
import "../src/index.css";
109

@@ -42,10 +41,12 @@ const preview: Preview = {
4241
defaultTheme: "dark",
4342
}),
4443
(Story, { parameters }) => (
45-
<Provider parameters={parameters as StoryParameters}>
46-
<Story />
47-
<SonnerToaster />
48-
</Provider>
44+
<ParametersProvider parameters={parameters}>
45+
<Provider>
46+
<Story />
47+
<SonnerToaster />
48+
</Provider>
49+
</ParametersProvider>
4950
),
5051
],
5152
};

packages/keychain/.storybook/provider.tsx

-39
This file was deleted.

packages/keychain/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
"test:storybook": "start-server-and-test 'pnpm storybook:serve' 6001 'pnpm test-storybook -u'"
2222
},
2323
"imports": {
24+
"#hooks/connection": {
25+
"storybook": "./src/hooks/connection.mock.ts",
26+
"default": "./src/hooks/connection.ts"
27+
},
2428
"#*": [
2529
"./src/*",
2630
"./src/*.ts",

packages/keychain/src/components/connect/CreateSession.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Upgrade } from "#components/connect/Upgrade";
44
import { UnverifiedSessionSummary } from "#components/session/UnverifiedSessionSummary";
55
import { VerifiedSessionSummary } from "#components/session/VerifiedSessionSummary";
66
import { NOW } from "#const";
7-
import { CreateSessionProvider } from "#context/session";
7+
import { CreateSessionProvider } from "#components/provider/session";
88
import { useConnection } from "#hooks/connection";
99
import {
1010
type ContractType,

packages/keychain/src/components/connect/RegisterSession.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { SessionConsent } from "#components/connect";
33
import { UnverifiedSessionSummary } from "#components/session/UnverifiedSessionSummary";
44
import { VerifiedSessionSummary } from "#components/session/VerifiedSessionSummary";
55
import { NOW } from "#const";
6-
import { CreateSessionProvider } from "#context/session";
6+
import { CreateSessionProvider } from "#components/provider/session";
77
import { useConnection } from "#hooks/connection";
88
import {
99
type ContractType,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { PropsWithChildren } from "react";
2+
import { ParametersContext, StoryParameters } from "#hooks/parameters";
3+
4+
export function ParametersProvider({
5+
parameters,
6+
children,
7+
}: { parameters: StoryParameters } & PropsWithChildren) {
8+
return (
9+
<ParametersContext.Provider value={parameters}>
10+
{children}
11+
</ParametersContext.Provider>
12+
);
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import { ConnectionContextValue } from "#components/provider/connection";
2+
import { ConnectCtx } from "#utils/connection/types";
3+
import { controllerConfigs, defaultTheme } from "@cartridge/controller";
4+
import { useThemeEffect } from "@cartridge/ui-next";
5+
import { fn, Mock } from "@storybook/test";
6+
import { useParameters } from "./parameters";
7+
import { constants, RpcProvider } from "starknet";
8+
import { ParsedSessionPolicies } from "./session";
9+
import { UpgradeInterface } from "./upgrade";
10+
import Controller from "#utils/controller";
11+
12+
export * from "./connection";
13+
14+
export const useConnectionValue: Mock<() => ConnectionContextValue> = fn(() => {
15+
const parameters = useParameters();
16+
const {
17+
chainId = constants.StarknetChainId.SN_MAIN,
18+
context = {
19+
type: "connect",
20+
origin: "http://localhost:3002",
21+
policies: [],
22+
resolve: fn(),
23+
reject: fn(),
24+
} as ConnectCtx,
25+
controller,
26+
...rest
27+
} = parameters.connection ?? {};
28+
const theme = parameters.preset
29+
? (controllerConfigs[parameters.preset].theme ?? defaultTheme)
30+
: defaultTheme;
31+
32+
useThemeEffect({
33+
theme,
34+
assetUrl: "",
35+
});
36+
37+
return {
38+
context,
39+
controller: {
40+
address: fn(
41+
() =>
42+
"0x0000000000000000000000000000000000000000000000000000000000000000",
43+
),
44+
username: fn(() => "user"),
45+
chainId: fn(() => chainId),
46+
provider: new RpcProvider({
47+
nodeUrl: "https://api.cartridge.gg/x/starknet/sepolia",
48+
}),
49+
classHash: fn(
50+
() =>
51+
"0x0000000000000000000000000000000000000000000000000000000000000000",
52+
),
53+
...controller,
54+
} as unknown as Controller,
55+
origin: "http://localhost:3002",
56+
rpcUrl: "http://api.cartridge.gg/x/starknet/mainnet",
57+
policies: {} as ParsedSessionPolicies,
58+
theme: { ...theme, verified: true },
59+
hasPrefundRequest: false,
60+
setContext: fn(),
61+
setController: fn(),
62+
closeModal: fn(),
63+
openModal: fn(),
64+
logout: fn(),
65+
openSettings: fn(),
66+
upgrade: {} as UpgradeInterface,
67+
...rest,
68+
};
69+
}).mockName("useConnectionValue");
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { createContext, useContext } from "react";
2+
import { ConnectionCtx } from "#utils/connection/types";
3+
import Controller from "#utils/controller";
4+
import { UpgradeInterface } from "#hooks/upgrade";
5+
import { SessionPolicies } from "@cartridge/presets";
6+
import { Parameters } from "@storybook/react";
7+
8+
export interface StoryParameters extends Parameters {
9+
connection?: {
10+
context?: ConnectionCtx;
11+
controller?: Controller;
12+
chainId?: string;
13+
upgrade?: UpgradeInterface;
14+
};
15+
preset?: string;
16+
policies?: SessionPolicies;
17+
}
18+
19+
export const ParametersContext = createContext<StoryParameters>({});
20+
21+
export function useParameters() {
22+
return useContext(ParametersContext);
23+
}

0 commit comments

Comments
 (0)