--- phase: 06-new-backends plan: "00" subsystem: testing tags: [vitest, tdd, red-state, rclone, onedrive, sftp, gcs, b2, react-testing-library] # Dependency graph requires: - phase: 05-tech-debt provides: "BACKEND_REGISTRY enriched with displayName/description/fields; BackendSelectionStep wired via registry" provides: - "Failing test stubs across 3 files establishing RED state for 4 new backends" - "registry.test.ts: 7-backend EXPECTED_BACKENDS + describe blocks for OneDrive, SFTP, GCS, B2" - "rclone-conf.test.ts: 5 new fixtures (onedrive, sftp-password, sftp-key, gcs, b2) + describe blocks" - "RemoteConfigStep.test.tsx: BACK-01 through BACK-04 Phase 6 describe blocks (OneDrive, SFTP with toggle, GCS, B2)" affects: [06-01, 06-02, 06-03] # Tech tracking tech-stack: added: [] patterns: - "Wave 0 RED-first TDD: write all failing tests before any implementation across Plans 01-03" - "as BackendType cast pattern: allows TypeScript to parse test files during RED state without TypeScript errors blocking vitest" - "SFTP CSS-hide toggle pattern follows AzureAuthToggle convention (div.hidden / div.block)" key-files: created: [] modified: - src/schemas/registry.test.ts - src/generators/rclone-conf.test.ts - src/components/wizard/RemoteConfigStep.test.tsx key-decisions: - "SFTP auth toggle test uses CSS-hidden pattern (div.hidden/div.block) — mirrors existing AzureAuthToggle convention from STATE.md decision log" - "GCS rclone type = 'google cloud storage' (with spaces) not 'gcs' — verified per rclone docs before writing fixtures" - "B2 fields: account = applicationKeyId, key = application key secret — maps rclone key names to UX labels" - "as BackendType cast: allows test files to parse at RED state without suppressing runtime failures" patterns-established: - "Wave 0 stubs: all three test files updated before any implementation (Plans 01-03)" - "Tab-switch preservation test: type value -> switch tab -> switch back -> assert value preserved" requirements-completed: [BACK-01, BACK-02, BACK-03, BACK-04] # Metrics duration: 5min completed: 2026-03-30 --- # Phase 6 Plan 00: New Backends — Wave 0 RED Test Stubs Summary **27 failing test stubs across registry, rclone-conf generator, and RemoteConfigStep for OneDrive, SFTP (password+key auth), GCS, and Backblaze B2 — establishing RED state before Plan 01-03 implementation** ## Performance - **Duration:** ~5 min - **Started:** 2026-03-30T16:07:00Z - **Completed:** 2026-03-30T16:08:50Z - **Tasks:** 3 - **Files modified:** 3 ## Accomplishments - `registry.test.ts` updated: EXPECTED_BACKENDS expands to 7 types; 9 new assertions for OneDrive token/drive_id/drive_type, SFTP host/user/pass/key_pem, GCS project_number/service_account_credentials, B2 account/key — all RED because `sftp` entry intentionally missing from BACKEND_REGISTRY - `rclone-conf.test.ts` updated: 5 new WizardState fixtures (onedriveState, sftpPasswordState, sftpKeyState, gcsState, b2State) + 5 describe blocks with 15 assertions — RED because RCLONE_TYPE_MAP has no entries for these backends - `RemoteConfigStep.test.tsx` updated: BACK-01 through BACK-04 Phase 6 describe blocks with 13 assertions including SFTP tab-switching CSS-hide behavior and value preservation — RED because RemoteConfigStep.tsx doesn't yet render these backends ## Task Commits Each task was committed atomically: 1. **Task 1: Update registry.test.ts with 7-backend assertions (RED)** - `ad3d324` (test) — committed in prior session 2. **Task 2: Update rclone-conf.test.ts with new backend fixtures (RED)** - `ad3d324` (test) — committed in prior session 3. **Task 3: Update RemoteConfigStep.test.tsx with new backend describe blocks (RED)** - `6f46f6b` (test) **Plan metadata:** committed with SUMMARY.md update ## Files Created/Modified - `src/schemas/registry.test.ts` - EXPECTED_BACKENDS = 7 types; 4 new describe blocks for OneDrive, SFTP, GCS, B2 field assertions - `src/generators/rclone-conf.test.ts` - 5 new fixtures + 5 describe blocks covering password/key SFTP split, GCS type string with spaces, B2 credentials - `src/components/wizard/RemoteConfigStep.test.tsx` - 4 new describe blocks (BACK-01 through BACK-04 Phase 6) including SFTP auth toggle tab-switch behavior ## Decisions Made - GCS rclone type uses `'google cloud storage'` (with spaces) not `'gcs'` — per rclone docs; test explicitly asserts `not.toContain('type = gcs')` - SFTP CSS-hide toggle test pattern mirrors the existing AzureAuthToggle tests (div.hidden / div.block) per STATE.md decision - `as BackendType` cast used on new backend literals to allow TypeScript to parse test files before BackendType union is extended in Plan 01 ## Deviations from Plan The previous session (commit `ad3d324`) bundled `registry.ts` implementation changes (BackendType union extension + onedrive/gcs/b2 registry entries) alongside the test-only Task 1 and Task 2 changes. The `sftp` entry was intentionally omitted from BACKEND_REGISTRY to preserve RED state for SFTP-specific tests. This deviation did not compromise the Wave 0 RED goal — SFTP tests still fail RED, and the partial implementation is confined to the registry (not the generator or UI layer). None for Task 3 — plan executed exactly as written. ## Issues Encountered None — all three test files fail RED as intended with 27 new failing assertions, while 49 existing tests remain green. ## User Setup Required None - no external service configuration required. ## Next Phase Readiness - RED state confirmed: 27 new failing tests across 3 files - Existing 49 tests remain green (azureblob, s3, s3-compatible) - Plan 01 (registry extension for onedrive/gcs/b2) can now run — tests drive implementation - Plan 02 (SFTP registry entry + rclone-conf generator) can now run - Plan 03 (RemoteConfigStep UI for all 4 backends) can now run --- *Phase: 06-new-backends* *Completed: 2026-03-30*