seedLookupData(); $owner = $this->user(['name' => 'Requester Name', 'email' => 'requester@example.com']); $agent = $this->agent(['name' => 'Agent Name', 'email' => 'agent@example.com']); $ticket = $this->ticket([ 'owner' => $owner, 'agent' => $agent, 'status_id' => $fixtures['open']->id, 'priority_id' => $fixtures['high']->id, 'category_id' => $fixtures['category']->id, 'project_id' => $fixtures['project']->id, 'team_id' => $fixtures['team']->id, 'subject' => 'Workflow ticket subject', ]); WorkflowTemplate::query()->create([ 'name' => 'Ticket created requester email', 'event' => 'ticket.created', 'subject' => 'Ticket {{ ticket.reference }} raised for {{ requester.name }}', 'html_body' => '

{{ ticket.subject }} / {{ ticket.priority }} / {{ ticket.status }}

', 'text_body' => '{{ ticket.subject }}', 'to_role' => 'requester', 'is_active' => true, ]); app(WorkflowNotificationService::class)->dispatch($ticket, 'ticket.created', $agent); $this->assertDatabaseHas('helpdesk_workflow_logs', [ 'ticket_id' => $ticket->id, 'event' => 'ticket.created', 'recipient' => 'requester@example.com', 'status' => 'sent', 'subject' => 'Ticket ' . $ticket->reference . ' raised for Requester Name', ]); } public function test_inactive_workflow_template_is_not_dispatched(): void { Mail::fake(); $ticket = $this->ticket(); WorkflowTemplate::query()->create([ 'name' => 'Inactive template', 'event' => 'ticket.updated', 'subject' => 'Inactive', 'html_body' => '

Inactive

', 'text_body' => 'Inactive', 'to_role' => 'requester', 'is_active' => false, ]); app(WorkflowNotificationService::class)->dispatch($ticket, 'ticket.updated', $ticket->owner); $this->assertDatabaseCount('helpdesk_workflow_logs', 0); } public function test_workflow_logs_skipped_when_recipient_is_missing(): void { $ticket = $this->ticket(['agent_id' => null]); WorkflowTemplate::query()->create([ 'name' => 'Agent template', 'event' => 'ticket.updated', 'subject' => 'Agent update', 'html_body' => '

Agent update

', 'text_body' => 'Agent update', 'to_role' => 'agent', 'is_active' => true, ]); app(WorkflowNotificationService::class)->dispatch($ticket, 'ticket.updated', $ticket->owner); $this->assertDatabaseHas('helpdesk_workflow_logs', [ 'ticket_id' => $ticket->id, 'event' => 'ticket.updated', 'recipient' => null, 'status' => 'skipped', ]); } }