[scanner] fix: add render tests for web/src/components/missions#19657
Conversation
- Added comprehensive render tests for 36+ mission components - Covers CardRequestDialog, FixerCard, InstallerCard, and all browser components - Includes tests for MissionBrowser tabs, dialogs, and views - Tests follow vitest + @testing-library/react patterns - Mock react-i18next, react-router-dom, and API dependencies Fixes #19649 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: scanner <scanner@kubestellar.io>
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
✅ Deploy Preview for kubestellarconsole ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
👋 Hey @clubanderson — thanks for opening this PR!
This is an automated message. |
|
🐝 Hi @clubanderson! I'm Trusted users — org members and contributors with write access — can mention Automation may take a moment to start, and follow-up happens through workflow activity rather than chat replies. |
✅ Test Coverage CheckAll new source files in this PR have corresponding test files. Checked |
There was a problem hiding this comment.
Pull request overview
This PR adds Vitest + React Testing Library render tests for mission-related UI components under web/src/components/missions/, addressing issue #19649’s goal of reducing the number of untested modules in that directory.
Changes:
- Adds new render tests for several missions components (e.g.,
UnstructuredFilePreview,PreflightFailure, cards, tool prerequisite notice). - Introduces new “smoke” render suites for a number of Mission Browser/dialog/view components.
- Expands test coverage for missions “browser” subdirectory exports/components.
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| web/src/components/missions/UnstructuredFilePreview.test.tsx | Adds render/assertion coverage for the unstructured file preview UI and actions. |
| web/src/components/missions/PreflightFailure.test.tsx | Adds render coverage for preflight error display and context rendering. |
| web/src/components/missions/MissionViews.test.tsx | Adds smoke render tests for multiple “view” components (but overlaps existing per-component tests). |
| web/src/components/missions/MissionTypeExplainer.test.tsx | Adds demo-mode render tests for the mission type explainer. |
| web/src/components/missions/MissionToolPrerequisiteNotice.test.tsx | Adds render coverage for tool-check status states and install links. |
| web/src/components/missions/MissionDialogs.test.tsx | Adds smoke render tests for dialogs (duplicates existing __tests__ suites). |
| web/src/components/missions/MissionBrowserTopBar.test.tsx | Adds top bar render tests (duplicates existing __tests__ suite). |
| web/src/components/missions/MissionBrowserTabBar.test.tsx | Adds tab bar render tests (duplicates existing __tests__ suite). |
| web/src/components/missions/MissionBrowser.test.tsx | Adds browser/sidebar render tests (duplicates existing __tests__ suites). |
| web/src/components/missions/MissionBrowser.components.test.tsx | Adds render/export tests for browser-related components (many overlap existing __tests__ suites). |
| web/src/components/missions/InstallerCard.test.tsx | Adds render + interaction tests for installer mission cards. |
| web/src/components/missions/FixerCard.test.tsx | Adds render + interaction tests for fixer mission cards. |
| web/src/components/missions/CardRequestDialog.test.tsx | Adds dialog render tests (duplicates existing __tests__ suite). |
| web/src/components/missions/browser.components.test.tsx | Adds render/export tests for missions/browser/* components/helpers. |
| const card = screen.getByText('Install Prometheus').closest('div') | ||
| card?.click() | ||
| expect(onSelect).toHaveBeenCalledOnce() |
| const card = screen.getByText('Fix Kubernetes Pod Restart Loop').closest('div') | ||
| card?.click() | ||
| expect(onSelect).toHaveBeenCalledOnce() |
| it('does not render in non-demo mode', () => { | ||
| const { isDemoMode } = require('../../lib/demoMode') | ||
| isDemoMode.mockReturnValue(false) | ||
| const { container } = render(<MissionTypeExplainer />) | ||
| expect(container.firstChild).toBeNull() | ||
| }) |
| import { describe, it, expect, vi, beforeEach } from 'vitest' | ||
| import { render, screen } from '@testing-library/react' | ||
| import { CardRequestDialog } from './CardRequestDialog' | ||
|
|
| import { describe, it, expect, vi } from 'vitest' | ||
| import { render, screen } from '@testing-library/react' | ||
| import { MissionBrowserTopBar } from './MissionBrowserTopBar' | ||
|
|
| import { describe, it, expect, vi } from 'vitest' | ||
| import { render, screen } from '@testing-library/react' | ||
| import { MissionBrowserTabBar } from './MissionBrowserTabBar' | ||
| import type { BrowserTab } from './browser' | ||
|
|
| /** | ||
| * Render tests for MissionBrowser and MissionBrowserSidebar | ||
| */ | ||
| import { describe, it, expect, vi } from 'vitest' |
| describe('OrbitMonitorOffer', () => { | ||
| it('renders without errors', async () => { | ||
| const { OrbitMonitorOffer } = await import('./OrbitMonitorOffer') | ||
| const { container } = render( | ||
| <OrbitMonitorOffer | ||
| missionId="test-123" | ||
| onSetup={vi.fn()} | ||
| /> | ||
| ) | ||
| expect(container).toBeTruthy() | ||
| }) |
| describe('ClusterSelectionDialog', () => { | ||
| it('renders without errors', async () => { | ||
| const { ClusterSelectionDialog } = await import('./ClusterSelectionDialog') | ||
| const { container } = render( | ||
| <ClusterSelectionDialog | ||
| isOpen={true} | ||
| onClose={vi.fn()} | ||
| onSelect={vi.fn()} | ||
| availableClusters={[]} | ||
| /> | ||
| ) | ||
| expect(container).toBeTruthy() | ||
| }) |
| describe('MissionBrowserFilterPanel', () => { | ||
| beforeEach(() => { | ||
| vi.resetModules() | ||
| }) | ||
|
|
||
| it('renders without errors', async () => { | ||
| const { MissionBrowserFilterPanel } = await import('./MissionBrowserFilterPanel') | ||
| const { container } = render( | ||
| <MissionBrowserFilterPanel |
|
Thank you for your contribution! Your PR has been merged. Check out what's new:
Stay connected: Slack #kubestellar-dev | Multi-Cluster Survey |
|
Post-merge build verification passed ✅ Both Go and frontend builds compiled successfully against merge commit |
Fixes #19649