fix: comprehensive code quality, theming, and test coverage improvements

- Fix ExemptionManager apiVersion bug (apps/batch resources used wrong API path)
- Replace resource: any with proper KubeResource interface (strict TypeScript)
- Replace all var(--mui-palette-*) CSS variables with useTheme() + theme.palette.*
- Replace custom drawer with MUI Drawer component (proper a11y and theming)
- Replace alert() calls with StatusLabel-based inline feedback
- Add PolarisErrorBoundary wrapping all registered plugin components
- Export getPolarisApiPath/isFullUrl from polaris.ts, deduplicate in PolarisSettings
- Fix PolarisDataContext test mock missing triggerRefresh
- Fix DashboardView test SimpleTable mock using any
- Remove dead NamespaceDetailView (replaced by drawer), unused MockPolarisProvider,
  unused getSeverityColor export
- Add tests for InlineAuditSection, AppBarScoreBadge, topIssues, checkMapping (32 new)
- Update CLAUDE.md, CHANGELOG.md, README.md for v0.6.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
DevContainer User
2026-03-04 16:59:50 +00:00
parent 6dd64e87ce
commit 514de78ba7
23 changed files with 1087 additions and 729 deletions
+14 -7
View File
@@ -1,3 +1,4 @@
import { useTheme } from '@mui/material/styles';
import React from 'react';
import { useHistory } from 'react-router-dom';
import { computeScore, countResults } from '../api/polaris';
@@ -8,6 +9,7 @@ import { usePolarisDataContext } from '../api/PolarisDataContext';
* Clicking navigates to the overview dashboard
*/
export default function AppBarScoreBadge() {
const theme = useTheme();
const { data, loading } = usePolarisDataContext();
const history = useHistory();
@@ -18,11 +20,17 @@ export default function AppBarScoreBadge() {
const counts = countResults(data);
const score = computeScore(counts);
// Color based on score
const getColor = (score: number): string => {
if (score >= 80) return '#4caf50'; // green
if (score >= 50) return '#ff9800'; // orange
return '#f44336'; // red
// Color based on score using theme palette
const getColor = (s: number): string => {
if (s >= 80) return theme.palette.success.main;
if (s >= 50) return theme.palette.warning.main;
return theme.palette.error.main;
};
const getContrastColor = (s: number): string => {
if (s >= 80) return theme.palette.success.contrastText;
if (s >= 50) return theme.palette.warning.contrastText;
return theme.palette.error.contrastText;
};
const handleClick = () => {
@@ -39,7 +47,7 @@ export default function AppBarScoreBadge() {
borderRadius: '16px',
border: 'none',
backgroundColor: getColor(score),
color: 'white',
color: getContrastColor(score),
fontSize: '13px',
fontWeight: 500,
display: 'inline-flex',
@@ -48,7 +56,6 @@ export default function AppBarScoreBadge() {
}}
aria-label={`Polaris cluster score: ${score}%`}
>
<span>🛡</span>
<span>Polaris: {score}%</span>
</button>
);