test(55): live UAT automation + wire fixtures (B2+B4)#52
Merged
Conversation
- playground_columns.json: GET /1/boards/<playground>/columns (3 cols) - playground_column_cards.json: GET .../columns/<ready>/cards merged both pages into a single 32-element array (verbatim wire bytes) - playground_card_detail.json: GET /1/cards/100 (single-card shape with column, steps, closed, assignees present) - FizzyDTOTests: playgroundColumnCards — RED-first decode test; asserts 32 FizzyCards, each carrying a non-empty column.id (GREEN after make generate embeds the fixtures in the test bundle) - Fixtures/fizzy/README.md: "Live captures (2026-06-12)" section Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
LiveUATTests.swift — three new suites in FenixKanbanTests/Services/Fizzy/Live/: • LiveUAT401RecoveryTests (Item 6, isConfigured-only): garbage-token sync throws .unauthorized; authState cleared PASS on live server 2026-06-12 • LiveUATPullGoldenTests (Item 4, mutation-gated): POST [itest] card → triage → markCardGolden → replaceLocal sync → assert isGolden==true locally; defer-DELETE cleanup PASS on live server 2026-06-12 • LiveUATRePairMergeTests (Item 7, mutation-gated): replaceLocal → mapping.clear() (mirrors changePairing) → re-pair → mergeIfNoConflicts → assert zero remote cards created, zero local duplicates Suite written 2026-06-12 (sim timeout issues under investigation) .planning/HANDOFF.md: UAT ledger updated — 4/5/6/7 now automated Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- FizzyAuthState: add useKeychain:false in-memory mode for clone-sim tests; production Keychain path unchanged (default useKeychain:true) - AuthenticationService/KeychainHelper: add kSecAttrAccessibleAfterFirstUnlock so items survive the simulated-lock state on test-runner clones - LiveUATTests: three suites (401 recovery, golden-flag pull, re-pair merge) all PASS against live Fizzy server with real token + mutation=1 - Push mutation gate to @test level (.enabled(if:)) so suites appear in no-creds runs as skipped, not missing - Fix column.board predicate crash in UAT7 re-pair merge verify - Add #require(authState.isConfigured) pre-flight guard in Items 4/6/7 Live run evidence (2026-06-12): 3/3 suites passed, [itest] cards cleaned up. No-creds run: all 3 suites skip cleanly (0.000s each). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts: # FenixKanban.xcodeproj/project.pbxproj
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.jsonfixtures; one decode test verifies verbatim wire shape end-to-endsyncFirst replaceLocalpropagatesisGolden == truefrom remote to local Core Data; sacrificial[itest]card created and cleaned up viadeferFizzyError.unauthorizedandFizzyAuthStateis cleared post-throw; read-only (no mutation gate)mergeIfNoConflictscreates zero remote cards; all[itest]cards cleaned up;[itest]prefix enforces read-only guarantee on the 32 genuine Sandbox-2 cardsFizzyAuthState(useKeychain: false)bypasses Keychain (unavailable on xcodebuild clone sims); production default unchanged (useKeychain: true)kSecAttrAccessibleAfterFirstUnlockadded so items survive the simulated-lock state on test-runner clones@Testlevel: suites appear as skipped (not missing) on no-creds runs;.enabled(if: allowsMutation)moved from@Suiteto@Testcolumn.boardpredicate fix: UAT7 re-pair verify usedboard == %@—Cardhas no directboardrelationship; fixed tocolumn.board == %@#require(authState.isConfigured)pre-flight guard in Items 4, 6, 7 to catch silent Keychain write failure earlyTest plan
LiveSmokeTests) PASSED with real token —GET /my/identityreturned account slugLiveUAT401RecoveryTests,LiveUATPullGoldenTests,LiveUATRePairMergeTests— all 3 suites PASSED (2026-06-12)BUILD SUCCEEDED(zero errors, one pre-existing warning inStepRepository.swift)[itest]card cleanup verified — defer blocks fire on both success and failure; Sandbox-2 board still has exactly 32 genuine cards post-runMission: #28 · Status log: #55 · Closes Phase 5 UAT ledger items 4–7
🤖 Generated with Claude Code