assertSame( [$expectedName], $event->legacyHooks(), get_class($event).' must keep firing its audited historical name' ); } } /** * Each emit site passes __FUNCTION__ as the legacy hook, so the method names baked * into the expectations above must actually exist on the emitting classes — guards * against renames silently orphaning the legacy names. */ public function test_legacy_hook_method_names_still_exist_on_emitters(): void { $serviceMethods = [ 'saveStatusLabels', 'quickAddTicket', 'quickAddMilestone', 'addTicket', 'updateTicket', 'patch', 'quickUpdateMilestone', 'upsertSubtask', 'updateTicketSorting', 'updateTicketStatusAndSorting', 'delete', 'deleteMilestone', 'getTicketTemplateAssignments', 'getToDoWidgetAssignments', 'getToDoWidgetHierarchicalAssignments', ]; foreach ($serviceMethods as $method) { $this->assertTrue( method_exists(\Leantime\Domain\Tickets\Services\Tickets::class, $method), "Tickets service method {$method} was renamed — its legacy event name is now orphaned" ); } foreach (['patchTicket', 'updateTicketStatus'] as $method) { $this->assertTrue( method_exists(\Leantime\Domain\Tickets\Repositories\Tickets::class, $method), "Tickets repository method {$method} was renamed — its legacy event name is now orphaned" ); } } }