Decompose: Break down #30 into implementable work units #31

Closed
opened 2026-05-16 01:16:14 +00:00 by Mark · 2 comments
Owner

Decomposition of #30: [smoke-test] Test coverage review: 268 source files, 21 test files (7.8%)

This issue decomposes the parent feature into independently implementable phases.


P1: Frontend pure-logic tests: write vitest tests for lib/utils.ts (already partially tested), lib/client.ts (API client), lib/mockData.ts, types/index.ts, hooks/useAuth.ts, hooks/use-mobile.ts — zero rendering setup needed, pure function assertions

Files: src/lib/client.ts, src/lib/mockData.ts, src/types/index.ts, src/hooks/useAuth.ts, src/hooks/use-mobile.ts, src/lib/utils.ts

P2: Frontend Zustand store tests: write isolated store tests for all 12 stores (volumes, targets, jobs, schedules, notifications, anomalies, users, apiKeys, agents, settings, dashboard, auth) — mock fetch/api layer, verify state transitions and action dispatch

Files: src/store/authStore.ts, src/store/volumesStore.ts, src/store/targetsStore.ts, src/store/jobsStore.ts, src/store/schedulesStore.ts, src/store/notificationsStore.ts, src/store/anomaliesStore.ts, src/store/usersStore.ts, src/store/apiKeysStore.ts, src/store/agentsStore.ts, src/store/settingsStore.ts, src/store/dashboardStore.ts, src/store/index.ts
Depends on: P1

P3: Frontend page & component tests: render tests for Layout, ProtectedRoute, App, and key pages (Dashboard, Volumes, Targets, Jobs, Schedules, Settings, Notifications, Users, ApiKeys, Agents, Anomalies, Webhooks, ApiDocs, Login) — mock stores with Zustand test utils

Files: src/components/Layout.tsx, src/components/ProtectedRoute.tsx, src/App.tsx, src/pages/Dashboard.tsx, src/pages/Volumes.tsx, src/pages/Targets.tsx, src/pages/Jobs.tsx, src/pages/Schedules.tsx, src/pages/Settings.tsx, src/pages/Notifications.tsx, src/pages/Users.tsx, src/pages/ApiKeys.tsx, src/pages/Agents.tsx, src/pages/Anomalies.tsx, src/pages/Webhooks.tsx, src/pages/ApiDocs.tsx, src/pages/Login.tsx
Depends on: P2

P4: Backend storage provider coverage: write tests for storage providers missing test coverage (webdav, sftp, rsync, gdrive, dropbox, box, azure) following existing interface.test.ts and factory.ts patterns, plus lifecycle tests

Files: backend/src/core/storage/webdav.ts, backend/src/core/storage/sftp.ts, backend/src/core/storage/rsync.ts, backend/src/core/storage/gdrive.ts, backend/src/core/storage/dropbox.ts, backend/src/core/storage/box.ts, backend/src/core/storage/azure.ts, backend/src/core/storage/lifecycle.ts

P5: Backend core module tests: write tests for uncovered backup modules (delta, verification, result-builder, checksum, incremental/*), anomaly detection (detector, rule-engine, rules, notification, persistence, scheduler, config), queue (backup-queue, memory-queue, connection), and scheduler (schedule-runner, retention)

Files: backend/src/core/backup/delta.ts, backend/src/core/backup/verification.ts, backend/src/core/backup/result-builder.ts, backend/src/core/backup/checksum.ts, backend/src/core/backup/incremental/execute.ts, backend/src/core/backup/incremental/restore.ts, backend/src/core/backup/incremental/manifest.ts, backend/src/core/backup/incremental/snapshot.ts, backend/src/core/backup/incremental/archive-utils.ts, backend/src/core/anomaly/detector.ts, backend/src/core/anomaly/rule-engine.ts, backend/src/core/anomaly/rules.ts, backend/src/core/anomaly/config.ts, backend/src/core/anomaly/notification.ts, backend/src/core/anomaly/persistence.ts, backend/src/core/anomaly/scheduler.ts, backend/src/core/queue/backup-queue.ts, backend/src/core/queue/memory-queue.ts, backend/src/core/queue/connection.ts, backend/src/core/scheduler/schedule-runner.ts, backend/src/core/scheduler/retention.ts

P6: Backend API route + service coverage: write tests for uncovered API routes (jobs, schedules, notifications, settings, dashboard, agents, agent-api, webhooks, anomalies, websocket) and remaining services (webhook/service, agent/manager, agent/heartbeat, agent/jobs, notifications/email, docker/client, docker/volumes). Final PR sets coverage threshold in vitest configs.

Files: backend/src/api/routes/jobs.ts, backend/src/api/routes/schedules.ts, backend/src/api/routes/notifications.ts, backend/src/api/routes/settings.ts, backend/src/api/routes/dashboard.ts, backend/src/api/routes/agents.ts, backend/src/api/routes/agent-api.ts, backend/src/api/routes/webhooks.ts, backend/src/api/routes/anomalies.ts, backend/src/api/routes/websocket.ts, backend/src/core/webhook/service.ts, backend/src/core/agent/manager.ts, backend/src/core/agent/heartbeat.ts, backend/src/core/agent/jobs.ts, backend/src/core/notifications/email.ts, backend/src/docker/client.ts, backend/src/docker/volumes.ts, backend/vitest.config.ts
Depends on: P5


Post-completion: When each phase is complete, comment on #30 with a summary of what was implemented.

## Decomposition of #30: [smoke-test] Test coverage review: 268 source files, 21 test files (7.8%) This issue decomposes the parent feature into independently implementable phases. --- ### P1: Frontend pure-logic tests: write vitest tests for lib/utils.ts (already partially tested), lib/client.ts (API client), lib/mockData.ts, types/index.ts, hooks/useAuth.ts, hooks/use-mobile.ts — zero rendering setup needed, pure function assertions **Files:** src/lib/client.ts, src/lib/mockData.ts, src/types/index.ts, src/hooks/useAuth.ts, src/hooks/use-mobile.ts, src/lib/utils.ts ### P2: Frontend Zustand store tests: write isolated store tests for all 12 stores (volumes, targets, jobs, schedules, notifications, anomalies, users, apiKeys, agents, settings, dashboard, auth) — mock fetch/api layer, verify state transitions and action dispatch **Files:** src/store/authStore.ts, src/store/volumesStore.ts, src/store/targetsStore.ts, src/store/jobsStore.ts, src/store/schedulesStore.ts, src/store/notificationsStore.ts, src/store/anomaliesStore.ts, src/store/usersStore.ts, src/store/apiKeysStore.ts, src/store/agentsStore.ts, src/store/settingsStore.ts, src/store/dashboardStore.ts, src/store/index.ts **Depends on:** P1 ### P3: Frontend page & component tests: render tests for Layout, ProtectedRoute, App, and key pages (Dashboard, Volumes, Targets, Jobs, Schedules, Settings, Notifications, Users, ApiKeys, Agents, Anomalies, Webhooks, ApiDocs, Login) — mock stores with Zustand test utils **Files:** src/components/Layout.tsx, src/components/ProtectedRoute.tsx, src/App.tsx, src/pages/Dashboard.tsx, src/pages/Volumes.tsx, src/pages/Targets.tsx, src/pages/Jobs.tsx, src/pages/Schedules.tsx, src/pages/Settings.tsx, src/pages/Notifications.tsx, src/pages/Users.tsx, src/pages/ApiKeys.tsx, src/pages/Agents.tsx, src/pages/Anomalies.tsx, src/pages/Webhooks.tsx, src/pages/ApiDocs.tsx, src/pages/Login.tsx **Depends on:** P2 ### P4: Backend storage provider coverage: write tests for storage providers missing test coverage (webdav, sftp, rsync, gdrive, dropbox, box, azure) following existing interface.test.ts and factory.ts patterns, plus lifecycle tests **Files:** backend/src/core/storage/webdav.ts, backend/src/core/storage/sftp.ts, backend/src/core/storage/rsync.ts, backend/src/core/storage/gdrive.ts, backend/src/core/storage/dropbox.ts, backend/src/core/storage/box.ts, backend/src/core/storage/azure.ts, backend/src/core/storage/lifecycle.ts ### P5: Backend core module tests: write tests for uncovered backup modules (delta, verification, result-builder, checksum, incremental/*), anomaly detection (detector, rule-engine, rules, notification, persistence, scheduler, config), queue (backup-queue, memory-queue, connection), and scheduler (schedule-runner, retention) **Files:** backend/src/core/backup/delta.ts, backend/src/core/backup/verification.ts, backend/src/core/backup/result-builder.ts, backend/src/core/backup/checksum.ts, backend/src/core/backup/incremental/execute.ts, backend/src/core/backup/incremental/restore.ts, backend/src/core/backup/incremental/manifest.ts, backend/src/core/backup/incremental/snapshot.ts, backend/src/core/backup/incremental/archive-utils.ts, backend/src/core/anomaly/detector.ts, backend/src/core/anomaly/rule-engine.ts, backend/src/core/anomaly/rules.ts, backend/src/core/anomaly/config.ts, backend/src/core/anomaly/notification.ts, backend/src/core/anomaly/persistence.ts, backend/src/core/anomaly/scheduler.ts, backend/src/core/queue/backup-queue.ts, backend/src/core/queue/memory-queue.ts, backend/src/core/queue/connection.ts, backend/src/core/scheduler/schedule-runner.ts, backend/src/core/scheduler/retention.ts ### P6: Backend API route + service coverage: write tests for uncovered API routes (jobs, schedules, notifications, settings, dashboard, agents, agent-api, webhooks, anomalies, websocket) and remaining services (webhook/service, agent/manager, agent/heartbeat, agent/jobs, notifications/email, docker/client, docker/volumes). Final PR sets coverage threshold in vitest configs. **Files:** backend/src/api/routes/jobs.ts, backend/src/api/routes/schedules.ts, backend/src/api/routes/notifications.ts, backend/src/api/routes/settings.ts, backend/src/api/routes/dashboard.ts, backend/src/api/routes/agents.ts, backend/src/api/routes/agent-api.ts, backend/src/api/routes/webhooks.ts, backend/src/api/routes/anomalies.ts, backend/src/api/routes/websocket.ts, backend/src/core/webhook/service.ts, backend/src/core/agent/manager.ts, backend/src/core/agent/heartbeat.ts, backend/src/core/agent/jobs.ts, backend/src/core/notifications/email.ts, backend/src/docker/client.ts, backend/src/docker/volumes.ts, backend/vitest.config.ts **Depends on:** P5 --- **Post-completion:** When each phase is complete, comment on #30 with a summary of what was implemented.
Author
Owner

Lint errors could not be fully resolved. A new lint-fix tracking issue has been opened: #37

Lint errors could not be fully resolved. A new lint-fix tracking issue has been opened: #37
Mark closed this issue 2026-05-20 19:54:30 +00:00
Author
Owner

blocked:lint-failed — pre-existing lint errors. Lint-fix issue filed: docker_backup#37. Will be picked up when that's resolved.

blocked:lint-failed — pre-existing lint errors. Lint-fix issue filed: docker_backup#37. Will be picked up when that's resolved.
Sign in to join this conversation.
No description provided.