-
-
Notifications
You must be signed in to change notification settings - Fork 9.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Core / Addon Test: Add config UI to Testing Module #29708
base: next
Are you sure you want to change the base?
Conversation
…nto testing-module-settings
☁️ Nx Cloud ReportCI is running/has finished running commands for commit 2f3ec95. As they complete they will appear below. Click to see the status, the terminal output, and the build insights. 📂 See all runs for this CI Pipeline Execution ✅ Successfully ran 2 targetsSent with 💌 from NxCloud. |
Package BenchmarksCommit: No significant changes detected, all good. 👏 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
19 file(s) reviewed, 9 comment(s)
Edit PR Review Bot Settings | Greptile
@@ -47,8 +48,6 @@ addons.register(ADDON_ID, (api) => { | |||
return <ContextMenuItem context={context} state={state} />; | |||
}, | |||
|
|||
render: (state) => <TestProviderRender api={api} state={state} />, | |||
|
|||
mapStatusUpdate: (state) => | |||
Object.fromEntries( | |||
(state.details.testResults || []).flatMap((testResult) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: flatMap().map().filter(Boolean) chain could be simplified to just flatMap with proper return type handling
), | ||
...baseState, | ||
watching: true, | ||
}, | ||
]; | ||
|
||
let triggerUpdate: () => void; | ||
const channel = mockChannel(); | ||
const managerContext: any = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: avoid using 'any' type - consider creating proper type definition for managerContext
const button = await canvas.findByRole('button', { name: /Expand/ }); | ||
await fireEvent.click(button); | ||
await new Promise((resolve) => setTimeout(resolve, 500)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: using regex for button text matching is fragile - consider using a more specific selector or data-testid
), | ||
...baseState, | ||
watching: true, | ||
}, | ||
]; | ||
|
||
let triggerUpdate: () => void; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: triggerUpdate is mutable and could lead to race conditions in tests - consider using a more robust pattern
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
9 file(s) reviewed, 5 comment(s)
Edit PR Review Bot Settings | Greptile
({ percentage }) => ({ | ||
width: percentage ? 12 : 6, | ||
height: percentage ? 12 : 6, | ||
margin: percentage ? 1 : 4, | ||
background: percentage | ||
? `conic-gradient(var(--status-color) ${percentage}%, var(--status-background) ${percentage + 1}%)` | ||
: 'var(--status-color)', | ||
borderRadius: '50%', | ||
}), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider using CSS custom properties for dimensions (width, height, margin) to make the component more maintainable and configurable
: 'var(--status-color)', | ||
borderRadius: '50%', | ||
}), | ||
({ status, theme }) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider using a switch statement or object literal for status color mapping to avoid repetitive code blocks
useEffect(() => { | ||
let timeout: NodeJS.Timeout; | ||
const handler = () => { | ||
setUpdated(true); | ||
timeout = setTimeout(setUpdated, 1000, false); | ||
}; | ||
api.on(TESTING_MODULE_CONFIG_CHANGE, handler); | ||
return () => { | ||
api.off(TESTING_MODULE_CONFIG_CHANGE, handler); | ||
clearTimeout(timeout); | ||
}; | ||
}, [api]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: potential memory leak if component unmounts during the 1000ms timeout - consider using AbortController or similar for cleaner cancellation
display: testing ? 'block' : 'none', | ||
maxHeight: collapsed ? 0 : maxHeight, | ||
maxHeight: collapsed ? 0 : animating ? maxHeight : 'auto', | ||
}} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: maxHeight transition can cause layout shift when content height changes while expanded - consider using CSS height: auto with transition
backgroundColor: `var(--sb-sidebar-bottom-card-background, ${theme.background.content})`, | ||
borderRadius: | ||
`var(--sb-sidebar-bottom-card-border-radius, ${theme.appBorderRadius + 1}px)` as any, | ||
boxShadow: `inset 0 0 0 1px ${crashed && !running ? theme.color.negative : updated ? theme.color.positive : theme.appBorderColor}, var(--sb-sidebar-bottom-card-box-shadow, 0 1px 2px 0 rgba(0, 0, 0, 0.05), 0px -5px 20px 10px ${theme.background.app})`, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: long line with complex template literal makes code hard to maintain - consider breaking into multiple lines or variables
… if it's equal to the previous value
What I did
Added a settings/config view to the Testing Module for the Test addon, which allows toggling coverage and a11y tests:
Screen.Recording.2024-11-26.at.09.38.48.mov
Whenever config is updated, the testing module briefly glows green.
Checklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!
Documentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal
,ci:merged
orci:daily
GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli-storybook/src/sandbox-templates.ts
Make sure this PR contains one of the labels below:
Available labels
bug
: Internal changes that fixes incorrect behavior.maintenance
: User-facing maintenance tasks.dependencies
: Upgrading (sometimes downgrading) dependencies.build
: Internal-facing build tooling & test updates. Will not show up in release changelog.cleanup
: Minor cleanup style change. Will not show up in release changelog.documentation
: Documentation only changes. Will not show up in release changelog.feature request
: Introducing a new feature.BREAKING CHANGE
: Changes that break compatibility in some way with current major version.other
: Changes that don't fit in the above categories.🦋 Canary release
This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the
@storybookjs/core
team here.core team members can create a canary release here or locally with
gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=<PR_NUMBER>
Greptile Summary
Added settings UI to the Testing Module in Storybook's test addon, enabling users to toggle coverage and accessibility testing options with visual feedback for configuration changes.
TestProviderRender
component with settings panel UI and state management in/code/addons/test/src/components/TestProviderRender.tsx
TestStatusIcon
component in/code/addons/test/src/components/TestStatusIcon.tsx
for visual status indicators with percentage displayListItem
component in/code/core/src/components/components/tooltip/ListItem.tsx
to support label elements for settings UI/code/core/src/manager/components/sidebar/TestingModule.tsx
with proper cleanup💡 (2/5) Greptile learns from your feedback when you react with 👍/👎!