seedLookupData(); $admin = $this->admin(['name' => 'Settings CRUD Admin']); $this->actingAs($admin); Livewire::test(SettingsManager::class) ->set('statusForm.name', 'Awaiting Customer') ->set('statusForm.slug', 'awaiting-customer') ->set('statusForm.color', 'amber') ->set('statusForm.sort_order', 20) ->call('saveStatus') ->assertHasNoErrors(); $status = Status::query()->where('slug', 'awaiting-customer')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editStatus', $status->id) ->set('statusForm.name', 'Awaiting Customer Reply') ->call('saveStatus') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_statuses', ['id' => $status->id, 'name' => 'Awaiting Customer Reply']); Livewire::test(SettingsManager::class) ->set('priorityForm.name', 'Critical') ->set('priorityForm.slug', 'critical') ->set('priorityForm.color', 'red') ->set('priorityForm.sort_order', 1) ->call('savePriority') ->assertHasNoErrors(); $priority = Priority::query()->where('slug', 'critical')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editPriority', $priority->id) ->set('priorityForm.name', 'Critical Updated') ->call('savePriority') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_priorities', ['id' => $priority->id, 'name' => 'Critical Updated']); Livewire::test(SettingsManager::class) ->set('categoryForm.name', 'Billing') ->set('categoryForm.slug', 'billing') ->set('categoryForm.color', 'blue') ->call('saveCategory') ->assertHasNoErrors(); $category = Category::query()->where('slug', 'billing')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editCategory', $category->id) ->set('categoryForm.name', 'Billing Updated') ->call('saveCategory') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_categories', ['id' => $category->id, 'name' => 'Billing Updated']); Livewire::test(SettingsManager::class) ->set('teamForm.name', 'Second Line') ->set('teamForm.slug', 'second-line') ->set('teamForm.color', 'indigo') ->call('saveTeam') ->assertHasNoErrors(); $team = Team::query()->where('slug', 'second-line')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editTeam', $team->id) ->set('teamForm.name', 'Second Line Updated') ->call('saveTeam') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_teams', ['id' => $team->id, 'name' => 'Second Line Updated']); Livewire::test(SettingsManager::class) ->set('projectForm.team_id', $fixtures['team']->id) ->set('projectForm.title', 'Customer Portal') ->set('projectForm.slug', 'customer-portal') ->set('projectForm.color', 'blue') ->call('saveProject') ->assertHasNoErrors(); $project = Project::query()->where('slug', 'customer-portal')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editProject', $project->id) ->set('projectForm.title', 'Customer Portal Updated') ->call('saveProject') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_projects', ['id' => $project->id, 'title' => 'Customer Portal Updated']); Livewire::test(SettingsManager::class) ->set('boardForm.name', 'Escalations') ->set('boardForm.slug', 'escalations') ->set('boardForm.sort_order', 30) ->set('boardForm.status_ids', [$fixtures['open']->id, $fixtures['closed']->id]) ->call('saveBoard') ->assertHasNoErrors(); $board = KanbanBoard::query()->where('slug', 'escalations')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editBoard', $board->id) ->set('boardForm.name', 'Escalations Updated') ->call('saveBoard') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_kanban_boards', ['id' => $board->id, 'name' => 'Escalations Updated']); Livewire::test(SettingsManager::class) ->set('repositoryForm.project_id', $fixtures['project']->id) ->set('repositoryForm.name', 'WMS Core Repo') ->set('repositoryForm.provider', 'github') ->set('repositoryForm.remote_url', 'git@example.com:wms/core.git') ->set('repositoryForm.default_branch', 'main') ->call('saveRepository') ->assertHasNoErrors(); $repository = GitRepository::query()->where('name', 'WMS Core Repo')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editRepository', $repository->id) ->set('repositoryForm.default_branch', 'develop') ->call('saveRepository') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_git_repositories', ['id' => $repository->id, 'default_branch' => 'develop']); Livewire::test(SettingsManager::class) ->set('workflowForm.name', 'Ticket Created') ->set('workflowForm.event', 'ticket.created') ->set('workflowForm.subject', 'New ticket') ->set('workflowForm.html_body', '
Created
') ->set('workflowForm.to_role', 'requester') ->call('saveWorkflowTemplate') ->assertHasNoErrors(); $workflow = WorkflowTemplate::query()->where('name', 'Ticket Created')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editWorkflowTemplate', $workflow->id) ->set('workflowForm.subject', 'New ticket updated') ->call('saveWorkflowTemplate') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_workflow_templates', ['id' => $workflow->id, 'subject' => 'New ticket updated']); Livewire::test(SettingsManager::class) ->set('cannedForm.category_id', $fixtures['category']->id) ->set('cannedForm.team_id', $fixtures['team']->id) ->set('cannedForm.name', 'Greeting') ->set('cannedForm.slug', 'greeting') ->set('cannedForm.body', 'Hello
') ->call('saveCannedResponse') ->assertHasNoErrors(); $canned = CannedResponse::query()->where('slug', 'greeting')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editCannedResponse', $canned->id) ->set('cannedForm.body', 'Hello updated
') ->call('saveCannedResponse') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_canned_responses', ['id' => $canned->id, 'body' => 'Hello updated
']); Livewire::test(SettingsManager::class) ->set('slaForm.priority_id', $fixtures['normal']->id) ->set('slaForm.category_id', $fixtures['category']->id) ->set('slaForm.name', 'Standard SLA') ->set('slaForm.slug', 'standard-sla') ->set('slaForm.first_response_minutes', 120) ->set('slaForm.resolution_minutes', 1440) ->call('saveSlaPolicy') ->assertHasNoErrors(); $sla = SlaPolicy::query()->where('slug', 'standard-sla')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editSlaPolicy', $sla->id) ->set('slaForm.resolution_minutes', 720) ->call('saveSlaPolicy') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_sla_policies', ['id' => $sla->id, 'resolution_minutes' => 720]); Livewire::test(SettingsManager::class) ->set('automationForm.name', 'Auto Route') ->set('automationForm.slug', 'auto-route') ->set('automationForm.set_priority_id', $fixtures['high']->id) ->set('automationForm.set_status_id', $fixtures['open']->id) ->call('saveAutomationRule') ->assertHasNoErrors(); $automation = AutomationRule::query()->where('slug', 'auto-route')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editAutomationRule', $automation->id) ->set('automationForm.match_subject', 'urgent') ->call('saveAutomationRule') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_automation_rules', ['id' => $automation->id, 'match_subject' => 'urgent']); Livewire::test(SettingsManager::class) ->set('checklistTemplateForm.category_id', $fixtures['category']->id) ->set('checklistTemplateForm.project_id', $fixtures['project']->id) ->set('checklistTemplateForm.name', 'Release Checklist') ->set('checklistTemplateForm.slug', 'release-checklist') ->set('checklistTemplateForm.items_text', "Check logs\nConfirm release") ->call('saveChecklistTemplate') ->assertHasNoErrors(); $checklist = ChecklistTemplate::query()->where('slug', 'release-checklist')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editChecklistTemplate', $checklist->id) ->set('checklistTemplateForm.items_text', 'Updated item') ->call('saveChecklistTemplate') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_checklist_templates', ['id' => $checklist->id]); self::assertSame(['Updated item'], $checklist->refresh()->items); Livewire::test(SettingsManager::class) ->set('tagForm.name', 'VIP') ->set('tagForm.slug', 'vip') ->set('tagForm.color', 'purple') ->call('saveTag') ->assertHasNoErrors(); $tag = Tag::query()->where('slug', 'vip')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editTag', $tag->id) ->set('tagForm.color', 'purple') ->call('saveTag') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_tags', ['id' => $tag->id, 'color' => 'purple']); Livewire::test(SettingsManager::class) ->set('productForm.name', 'WMS') ->set('productForm.slug', 'wms') ->set('productForm.type', 'service') ->call('saveProduct') ->assertHasNoErrors(); $product = Product::query()->where('slug', 'wms')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editProduct', $product->id) ->set('productForm.version', '1.1') ->call('saveProduct') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_products', ['id' => $product->id, 'version' => '1.1']); } public function test_helpdesk_colour_selectors_are_dropdowns_and_reject_unknown_values(): void { $this->seedLookupData(); $admin = $this->admin(['name' => 'Colour Settings Admin']); $this->actingAs($admin); Livewire::test(SettingsManager::class) ->assertSee('● Red — #dc2626') ->assertSee('● Green — #16a34a') ->set('statusForm.name', 'Invalid Colour') ->set('statusForm.slug', 'invalid-colour') ->set('statusForm.color', 'brown') ->set('statusForm.sort_order', 99) ->call('saveStatus') ->assertHasErrors(['statusForm.color']); } }