domains/reports' fixtures used Amazon as their example platform - same as domains/amazon's own tests. Both packages' test binaries run concurrently under go test ./... by default, both wrote to the shared mock.raw_shop_events table with platform='amazon', and the DB trigger routed those into mock.shop_amazon_events - the exact table domains/amazon's background-processing tests poll and assert on. Confirmed directly: running the two packages together, domains/amazon's TestProcessUnprocessedEvents_RetriesUnackedNotification picked up 4 events instead of 1, three of them from domains/reports' fixture shop. Switched to Etsy instead (test-only change, no production code touched). Verified the casing first since it mattered here: accounts.Etsy's Go value is "Etsy" (capital), and separately Etsy's raw_shop_events trigger checks for lowercase 'etsy' - but the view these tests actually depend on (mock.shop_etsy_listing_event_sequence) filters on 'Etsy', matching the Go constant, confirmed via pg_get_viewdef. So the fixtures work correctly and, as a side effect, never fire the lowercase-gated trigger at all - keeping mock.shop_etsy_events untouched by these tests regardless. Combined with the previous commit's goroutine-leak fix, go test ./... and make test are both reliably green as single commands again. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XEDaCB7C2NEBgyvqEtZuxY
2.8 KiB
Work Summary — 2026-08-06 20:44
Task
Follow-up from the testify migration: fix the remaining test-isolation failure between domains/amazon and domains/reports (the goroutine-leak half of the original go test ./... hang was already fixed and committed separately as 7c65f92).
Root cause
domains/reports' fixtures used accounts.Amazon as their example platform - same as domains/amazon's own tests. Both packages' test binaries run concurrently under go test ./... (Go's default), both write to the shared mock.raw_shop_events table with platform='amazon', and the DB trigger routes those into mock.shop_amazon_events, the exact table domains/amazon's background-processing tests poll and assert on. Confirmed directly: running the two packages together, domains/amazon's TestProcessUnprocessedEvents_RetriesUnackedNotification picked up 4 events instead of 1, three of them from domains/reports' fixture shop.
Fix
Switched domains/reports' fixtures from Amazon to Etsy (renamed setupAmazonMockShop→setupEtsyMockShop, createAmazonListing→createEtsyListing, and all table names/platform constants throughout domains/reports/events_test.go and domains/reports/reports_test.go). Test-only change, no production code touched.
Verified the exact casing before switching, since it mattered: accounts.Etsy's Go value is "Etsy" (capital E) unlike most other platform constants ("amazon", "big_cartel", etc., all lowercase) - and separately, Etsy's mock.raw_shop_events trigger (which routes into mock.shop_etsy_events, the table domains/amazon-style processors would use) checks for lowercase 'etsy'. Confirmed via pg_get_viewdef that the listing-counts view (mock.shop_etsy_listing_event_sequence, what these tests actually depend on) filters on 'Etsy' (capital), matching the Go constant correctly - so the fixtures work correctly, and as a side effect never fire the lowercase-gated trigger at all, keeping mock.shop_etsy_events completely untouched by these tests regardless.
Verification
go build ./.../go vet ./...clean.domains/reportsalone: all 6 tests still pass.domains/amazon+domains/reportstogether, 8x repeated (-race -count=1): all clean, no failures.go test ./... -race(the exact command that used to hang before the goroutine-leak fix, and would still have failed on the isolation issue afterward): now green as one command, no special-casing needed.make test: green, zero leftover rows inaccounts,mock.accounts,mock.raw_shop_eventsafterward.
Follow-ups / not done here
None specific to this fix. Combined with the goroutine-leak fix (7c65f92), go test ./... / make test are both reliably green as single commands again - the workaround of running domains/amazon separately from everything else is no longer needed.