Fix Storybook runner tests

This commit is contained in:
adilallo
2025-09-02 16:45:04 -06:00
parent eb407e03ee
commit 394173161c
5 changed files with 2295 additions and 2367 deletions
+3 -26
View File
@@ -5,10 +5,9 @@ const config = {
"../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)", "../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)",
], ],
addons: [ addons: [
"@storybook/addon-actions", "@storybook/addon-essentials",
"@storybook/addon-a11y",
"@storybook/addon-interactions", "@storybook/addon-interactions",
"@chromatic-com/storybook", "@storybook/addon-a11y",
], ],
framework: { framework: {
name: "@storybook/nextjs-vite", name: "@storybook/nextjs-vite",
@@ -16,30 +15,8 @@ const config = {
}, },
staticDirs: ["../public"], staticDirs: ["../public"],
// Auto-detect environment and apply appropriate settings // Ensure esbuild treats .js as JSX during dep pre-bundling
managerHead: (head) => {
// Only add base href for GitHub Pages (when CI=true or specific environment)
if (process.env.CI || process.env.STORYBOOK_BASE_PATH) {
return `${head}<base href="/communityrulestorybook/">`;
}
return head;
},
previewHead: (head) => {
// Only add base href for GitHub Pages
if (process.env.CI || process.env.STORYBOOK_BASE_PATH) {
return `${head}<base href="/communityrulestorybook/">`;
}
return head;
},
async viteFinal(cfg) { async viteFinal(cfg) {
// Set base path for GitHub Pages when needed
if (process.env.CI || process.env.STORYBOOK_BASE_PATH) {
cfg.base = "/communityrulestorybook/";
}
// Ensure esbuild treats .js as JSX during dep pre-bundling
cfg.optimizeDeps ??= {}; cfg.optimizeDeps ??= {};
cfg.optimizeDeps.esbuildOptions ??= {}; cfg.optimizeDeps.esbuildOptions ??= {};
cfg.optimizeDeps.esbuildOptions.loader = { cfg.optimizeDeps.esbuildOptions.loader = {
+1 -28
View File
@@ -1,33 +1,8 @@
import "../app/globals.css"; import "../app/globals.css";
// Import Google Fonts for Storybook
import { Inter, Bricolage_Grotesque, Space_Grotesk } from "next/font/google";
const inter = Inter({
subsets: ["latin"],
weight: ["400", "500", "600", "700"],
variable: "--font-inter",
display: "swap",
});
const bricolageGrotesque = Bricolage_Grotesque({
subsets: ["latin"],
weight: ["400", "500", "700", "800"],
variable: "--font-bricolage-grotesque",
display: "swap",
});
const spaceGrotesk = Space_Grotesk({
subsets: ["latin"],
weight: ["400", "500", "700"],
variable: "--font-space-grotesk",
display: "swap",
});
/** @type { import('@storybook/react').Preview } */ /** @type { import('@storybook/react').Preview } */
const preview = { const preview = {
parameters: { parameters: {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: { controls: {
matchers: { matchers: {
color: /(background|color)$/i, color: /(background|color)$/i,
@@ -37,9 +12,7 @@ const preview = {
}, },
decorators: [ decorators: [
(Story) => ( (Story) => (
<div <div className="font-sans">
className={`${inter.variable} ${bricolageGrotesque.variable} ${spaceGrotesk.variable} font-sans`}
>
<Story /> <Story />
</div> </div>
), ),
+2276 -2297
View File
File diff suppressed because it is too large Load Diff
+3 -4
View File
@@ -42,21 +42,20 @@
}, },
"devDependencies": { "devDependencies": {
"@axe-core/playwright": "^4.10.2", "@axe-core/playwright": "^4.10.2",
"@chromatic-com/storybook": "^4.1.0",
"@eslint/eslintrc": "^3", "@eslint/eslintrc": "^3",
"@lhci/cli": "^0.15.1", "@lhci/cli": "^0.15.1",
"@playwright/test": "^1.55.0", "@playwright/test": "^1.55.0",
"@storybook/addon-a11y": "^9.1.2", "@storybook/addon-a11y": "^9.1.2",
"@storybook/addon-actions": "^9.0.8", "@storybook/addon-actions": "^9.0.8",
"@storybook/addon-docs": "^9.1.2", "@storybook/addon-docs": "^9.1.2",
"@storybook/addon-essentials": "^8.6.14", "@storybook/addon-essentials": "^9.0.0-alpha.12",
"@storybook/addon-interactions": "^8.6.14", "@storybook/addon-interactions": "^9.0.0-alpha.10",
"@storybook/addon-onboarding": "^9.1.2", "@storybook/addon-onboarding": "^9.1.2",
"@storybook/addon-styling-webpack": "^2.0.0", "@storybook/addon-styling-webpack": "^2.0.0",
"@storybook/addon-viewport": "^9.0.8", "@storybook/addon-viewport": "^9.0.8",
"@storybook/addon-vitest": "^9.1.2", "@storybook/addon-vitest": "^9.1.2",
"@storybook/nextjs-vite": "^9.1.2", "@storybook/nextjs-vite": "^9.1.2",
"@storybook/test": "^8.6.14", "@storybook/test": "^9.0.0-alpha.2",
"@storybook/test-runner": "^0.23.0", "@storybook/test-runner": "^0.23.0",
"@svgr/webpack": "^8.1.0", "@svgr/webpack": "^8.1.0",
"@tailwindcss/postcss": "^4.1.11", "@tailwindcss/postcss": "^4.1.11",
+12 -12
View File
@@ -197,18 +197,18 @@ export const Interactive = {
const canvas = within(canvasElement); const canvas = within(canvasElement);
await step("Click navigation items", async () => { await step("Click navigation items", async () => {
const useCasesLink = canvas.getByRole("link", { name: /use cases/i }); const useCasesLink = canvas.getByRole("menuitem", { name: /Use cases/i });
await userEvent.click(useCasesLink); await userEvent.click(useCasesLink);
const learnLink = canvas.getByRole("link", { name: /learn/i }); const learnLink = canvas.getByRole("menuitem", { name: /Learn/i });
await userEvent.click(learnLink); await userEvent.click(learnLink);
const aboutLink = canvas.getByRole("link", { name: /about/i }); const aboutLink = canvas.getByRole("menuitem", { name: /About/i });
await userEvent.click(aboutLink); await userEvent.click(aboutLink);
}); });
await step("Click authentication elements", async () => { await step("Click authentication elements", async () => {
const loginLink = canvas.getByRole("link", { const loginLink = canvas.getByRole("menuitem", {
name: /log in to your account/i, name: /log in to your account/i,
}); });
await userEvent.click(loginLink); await userEvent.click(loginLink);
@@ -238,22 +238,22 @@ export const HoverStates = {
const canvas = within(canvasElement); const canvas = within(canvasElement);
await step("Hover over navigation items", async () => { await step("Hover over navigation items", async () => {
const useCasesLink = canvas.getByRole("link", { name: /use cases/i }); const useCasesLink = canvas.getByRole("menuitem", { name: /Use cases/i });
await userEvent.hover(useCasesLink); await userEvent.hover(useCasesLink);
// Wait for hover state to be visible // Wait for hover state to be visible
await new Promise((resolve) => setTimeout(resolve, 100)); await new Promise((resolve) => setTimeout(resolve, 100));
const learnLink = canvas.getByRole("link", { name: /learn/i }); const learnLink = canvas.getByRole("menuitem", { name: /Learn/i });
await userEvent.hover(learnLink); await userEvent.hover(learnLink);
await new Promise((resolve) => setTimeout(resolve, 100)); await new Promise((resolve) => setTimeout(resolve, 100));
const aboutLink = canvas.getByRole("link", { name: /about/i }); const aboutLink = canvas.getByRole("menuitem", { name: /About/i });
await userEvent.hover(aboutLink); await userEvent.hover(aboutLink);
await new Promise((resolve) => setTimeout(resolve, 100)); await new Promise((resolve) => setTimeout(resolve, 100));
}); });
await step("Hover over authentication elements", async () => { await step("Hover over authentication elements", async () => {
const loginLink = canvas.getByRole("link", { const loginLink = canvas.getByRole("menuitem", {
name: /log in to your account/i, name: /log in to your account/i,
}); });
await userEvent.hover(loginLink); await userEvent.hover(loginLink);
@@ -285,21 +285,21 @@ export const FocusStates = {
const canvas = within(canvasElement); const canvas = within(canvasElement);
await step("Focus on navigation items", async () => { await step("Focus on navigation items", async () => {
const useCasesLink = canvas.getByRole("link", { name: /use cases/i }); const useCasesLink = canvas.getByRole("menuitem", { name: /Use cases/i });
useCasesLink.focus(); useCasesLink.focus();
await new Promise((resolve) => setTimeout(resolve, 100)); await new Promise((resolve) => setTimeout(resolve, 100));
const learnLink = canvas.getByRole("link", { name: /learn/i }); const learnLink = canvas.getByRole("menuitem", { name: /Learn/i });
learnLink.focus(); learnLink.focus();
await new Promise((resolve) => setTimeout(resolve, 100)); await new Promise((resolve) => setTimeout(resolve, 100));
const aboutLink = canvas.getByRole("link", { name: /about/i }); const aboutLink = canvas.getByRole("menuitem", { name: /About/i });
aboutLink.focus(); aboutLink.focus();
await new Promise((resolve) => setTimeout(resolve, 100)); await new Promise((resolve) => setTimeout(resolve, 100));
}); });
await step("Focus on authentication elements", async () => { await step("Focus on authentication elements", async () => {
const loginLink = canvas.getByRole("link", { const loginLink = canvas.getByRole("menuitem", {
name: /log in to your account/i, name: /log in to your account/i,
}); });
loginLink.focus(); loginLink.focus();