whisper-money/tests/Feature
Víctor Falcón 89840e19db refactor(mcp): give the write tools one way to resolve a record and to apply changed fields
Every write tool repeated two shapes. Resolving a record in the space was
copy-pasted five times (account, transaction, category, label, and the rule
resolver, which existed twice — once in UpdateAutomationRule and once in
DeleteAutomationRule), each with the same query, null check and message
template. And each update tool walked its fields with a wall of
'if ($request->has(x)) { $model->x = ... }' blocks.

Both now live in WriteTool: modelInSpace() resolves any space-scoped model with
the same failure message, and applyFields() assigns just the fields the request
carries, taking closures so a related lookup only runs when its field is
present.

UpdateTransaction::write drops from cyclomatic complexity 20 to 7 and
UpdateAutomationRule::write from 13 to 6.

Adds the missing coverage for the failure messages, which nothing asserted
before: with a listing hint, and without one.
2026-08-11 13:44:47 +02:00
..
Ai feat(stats): post the Discord stats reports in Spanish, opened by an AI summary (#752) 2026-08-10 10:13:40 +02:00
Api
Auth
Console fix(demo): stop demo:reset from colliding on the fake Stripe subscription id (#756) 2026-08-10 12:48:13 +00:00
Events
Jobs
Listeners
Mcp refactor(mcp): give the write tools one way to resolve a record and to apply changed fields 2026-08-11 13:44:47 +02:00
Onboarding fix(onboarding): don't trap users on the syncing step when a bank sync fails (#745) 2026-08-09 18:40:49 +02:00
OpenBanking fix(binance): value past days from Binance's own snapshot total (#763) 2026-08-11 11:04:06 +00:00
Services
Settings
Spaces
Sync
AccountBalanceControllerTest.php
AccountControllerTest.php
AccountImportConfigTest.php
AccountUserCurrencyServiceTest.php
AiConsentSettingsTest.php
AiConsentTest.php
AlignAccountsEncryptedFlagMigrationTest.php
ApplyRealEstateRevaluationTest.php
AuthenticatedLayoutSafeAreaTest.php
AutomationRuleApplicationTest.php
AutomationRuleEvaluationTest.php
AutomationRuleTest.php fix(ai): stop a learned rule title from 500-ing the user's category change (#741) 2026-08-09 15:39:14 +00:00
BackfillAccountIbansCommandTest.php
BackfillXxxAccountCurrenciesTest.php
BalanceLookupTest.php
BudgetHistoricalAssignmentTest.php
BudgetNotificationTest.php
BudgetPeriodDateTest.php
BudgetPeriodServiceTest.php
BudgetTest.php
BudgetTransactionServiceTest.php
BulkUpdateTransactionsTest.php
CancelFreeEnableBankingConnectionsCommandTest.php
CashflowAnalyticsTest.php
CashflowPageTest.php
CatchAllBudgetTest.php
CategoryMonthlyBreakdownTest.php
CrapCommandTest.php ci: add duplication and complexity quality checks (#765) 2026-08-11 13:29:37 +02:00
CurrencyConversionServiceTest.php
DashboardAnalyticsTest.php
DashboardTest.php
DecryptTransactionsTest.php
DeleteUserCommandTest.php
DemoAccountRestrictionsTest.php fix(demo): stop demo:reset from colliding on the fake Stripe subscription id (#756) 2026-08-10 12:48:13 +00:00
DisconnectBankingConnectionsCommandTest.php
DiscordReportEmbedLimitsTest.php feat(stats): post the Discord stats reports in Spanish, opened by an AI summary (#752) 2026-08-10 10:13:40 +02:00
DiscordWebhookTest.php
EncryptionTest.php
ExampleTest.php
ExchangeRateServiceTest.php
GenerateStripePromotionCodesCommandTest.php chore(deps): update composer dependencies to latest (#764) 2026-08-11 11:15:27 +00:00
IdorVulnerabilityTest.php
ImportDataTest.php
InertiaSharedDataTest.php
IntegrationRequestTest.php
LabelTest.php
LoanTest.php
LocalizationTest.php feat(currencies): add the Danish Krone (DKK) (#754) 2026-08-10 12:08:56 +02:00
LoggingConfigTest.php
MailSenderTest.php
NewTransactionsMarkerTest.php
OpenAiAppsChallengeTest.php feat(mcp): serve the ChatGPT app directory domain challenge (#749) 2026-08-10 07:46:49 +00:00
PersistUpsellSourceFromStripeTest.php
PlaintextTransactionsTest.php
PlanFeatureTest.php
PopoverSafeAreaTest.php
PostStripeEventToDiscordTest.php
PurgeResidualEncryptionArtifactsJobTest.php
PwaTest.php
QueueConfigTest.php
ReEvaluateTransactionRulesTest.php
RealEstateAvailabilityTest.php
RealEstateTest.php
ResendSyncCommandTest.php
RouteNotificationForMailTest.php
RuleEngineParityTest.php
SavedFilterTest.php feat(transactions): add a monthly trend view to the analysis drawer (#736) 2026-07-26 17:03:52 +02:00
SelfServeRefundTest.php fix(demo): stop demo:reset from colliding on the fake Stripe subscription id (#756) 2026-08-10 12:48:13 +00:00
SendAiCohortReportCommandTest.php feat(stats): post the Discord stats reports in Spanish, opened by an AI summary (#752) 2026-08-10 10:13:40 +02:00
SendAiConsentFollowUpEmailsCommandTest.php
SendDailyStatsReportCommandTest.php feat(stats): post the Discord stats reports in Spanish, opened by an AI summary (#752) 2026-08-10 10:13:40 +02:00
SendExperimentFunnelReportCommandTest.php feat(stats): post the Discord stats reports in Spanish, opened by an AI summary (#752) 2026-08-10 10:13:40 +02:00
SendStuckCohortReportCommandTest.php
SendSubscriptionFunnelReportCommandTest.php feat(stats): post the Discord stats reports in Spanish, opened by an AI summary (#752) 2026-08-10 10:13:40 +02:00
SentryConfigTest.php
SentryUserMiddlewareTest.php
SetLocaleTest.php
SitemapTest.php
StrayHttpRequestGuardTest.php
StripeSubscriptionStatsCommandTest.php
SubscriptionExperimentTest.php chore(deps): update composer dependencies to latest (#764) 2026-08-11 11:15:27 +00:00
SubscriptionTest.php
SuggestionPersistenceTest.php
SyncBankingConnectionsCommandTest.php
SyncStripePricesCommandTest.php
TrackLastActiveAtTest.php
TransactionAnalysisTest.php feat(transactions): add a monthly trend view to the analysis drawer (#736) 2026-07-26 17:03:52 +02:00
TransactionFilterTest.php
TransactionSideClassificationTest.php
TransactionTest.php
WelcomeBanksOrderingTest.php