- db.test.ts: `\r` joins the path stops of withoutFolders (removing it from
PATH_STOP now fails).
- The six keys whose "t removed" mutation survived the review of PR #435
(comment 23499) are asserted in their marked form:
transactions.transferIcon.ariaLabel (a row linked to a transfer) and
transactions.notes.placeholder (title of every row's notes button) in
TransactionTable.render.test.tsx; license.keyPlaceholder and
license.activate in LicenseKeyForm.render.test.tsx;
dashboard.kpiSectionTitle in DashboardPage.render.test.tsx;
balance.priceFetching.consent.accept in PriceFetchControl.test.tsx, the
consent dialog opened by presetting the control's first harness slot
(the dialog's title, body and decline texts are pinned with it).
- TransactionTable.wiring.test.ts opens a row's notes through its button
and pins the textarea placeholder, the second call of the notes key.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The small badge next to "Fetch price" on a stock rendered the literal
"best-effort" without going through t, so French users saw English.
It now reads balance.priceFetching.bestEffortBadge ("non garanti" in
French). Raised by the review of PR #435 (suggestion 4).
Refs #389
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 15 test files whose fake t returned the bare key (the 12 of the
issue, plus the three category render tests added by #423) now mock
react-i18next with i18nMock. Assertions naming a displayed text are
rewritten in the marked form, t(key[options]), so a text that skipped
t fails them. Components without such an assertion get one:
PriceFetchControl, PriceFetchConsentToggle (rendered through the hook
harness, its loading slot preset), CategoryDetailPanel, SourceList and
SourceCard, and the region label of OnboardingChecklist.
Each component was proved by a mutation removing one t call: every one
turns at least one test red (exit 1).
Refs #389
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- New component renders button + consent modal + spinner + attribution
- Best-effort warning shown once per session for stock categories
- Hidden if not premium or category kind != 'priced'
- Consent persisted per-profile in user_preferences.price_fetching_consent
- Manual unit_price input remains active in all paths
- 17 vitest tests (no RTL/jsdom — logged MEDIUM in decisions-log.md)
- Wired into SnapshotLineRow/SnapshotEditor/SnapshotEditPage
- asset_type hardcoded to 'stock' pending category schema extension (MEDIUM)
Closes#158