Skip to content

Commit 56eaad7

Browse files
committed
feat: Add comprehensive Storybook stories for RpcMethodBarChartCard with multiple test scenarios
1 parent f569209 commit 56eaad7

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import type { Meta, StoryObj } from "@storybook/react";
2+
import { BadgeContainer, mobileViewport } from "stories/utils";
3+
import { RpcMethodBarChartCardUI } from "./RpcMethodBarChartCard";
4+
5+
const meta = {
6+
title: "Analytics/RpcMethodBarChartCard",
7+
component: RpcMethodBarChartCardUI,
8+
parameters: {
9+
layout: "centered",
10+
},
11+
} satisfies Meta<typeof RpcMethodBarChartCardUI>;
12+
13+
export default meta;
14+
type Story = StoryObj<typeof meta>;
15+
16+
const generateTimeSeriesData = (days: number, methods: string[], emptyData = false) => {
17+
const data = [];
18+
const today = new Date();
19+
20+
for (let i = days - 1; i >= 0; i--) {
21+
const date = new Date(today);
22+
date.setDate(date.getDate() - i);
23+
24+
methods.forEach(method => {
25+
data.push({
26+
date: date.toISOString(),
27+
evmMethod: method,
28+
count: emptyData ? 0 : Math.floor(Math.random() * 1000) + 100
29+
});
30+
});
31+
}
32+
33+
return data;
34+
};
35+
36+
const commonMethods = [
37+
"eth_call",
38+
"eth_getBalance",
39+
"eth_getTransactionReceipt",
40+
"eth_blockNumber"
41+
];
42+
43+
export const Normal: Story = {
44+
args: {
45+
rawData: generateTimeSeriesData(30, commonMethods)
46+
},
47+
decorators: [
48+
(Story) => (
49+
<div className="max-w-[1000px] p-8">
50+
<BadgeContainer label="Normal Usage">
51+
<Story />
52+
</BadgeContainer>
53+
</div>
54+
),
55+
],
56+
};
57+
58+
export const EmptyData: Story = {
59+
args: {
60+
rawData: []
61+
},
62+
decorators: [
63+
(Story) => (
64+
<div className="max-w-[1000px] p-8">
65+
<BadgeContainer label="Empty Data">
66+
<Story />
67+
</BadgeContainer>
68+
</div>
69+
),
70+
],
71+
};
72+
73+
export const ZeroData: Story = {
74+
args: {
75+
rawData: generateTimeSeriesData(30, commonMethods, true)
76+
},
77+
decorators: [
78+
(Story) => (
79+
<div className="max-w-[1000px] p-8">
80+
<BadgeContainer label="Zero Values">
81+
<Story />
82+
</BadgeContainer>
83+
</div>
84+
),
85+
],
86+
};
87+
88+
export const SingleMethod: Story = {
89+
args: {
90+
rawData: generateTimeSeriesData(30, ["eth_call"])
91+
},
92+
decorators: [
93+
(Story) => (
94+
<div className="max-w-[1000px] p-8">
95+
<BadgeContainer label="Single Method">
96+
<Story />
97+
</BadgeContainer>
98+
</div>
99+
),
100+
],
101+
};
102+
103+
export const Mobile: Story = {
104+
args: {
105+
rawData: generateTimeSeriesData(30, commonMethods)
106+
},
107+
parameters: {
108+
viewport: mobileViewport("iphone14"),
109+
},
110+
decorators: [
111+
(Story) => (
112+
<div className="max-w-[400px] p-4">
113+
<BadgeContainer label="Mobile View">
114+
<Story />
115+
</BadgeContainer>
116+
</div>
117+
),
118+
],
119+
};

0 commit comments

Comments
 (0)