143 lines
7.1 KiB
PHP
143 lines
7.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Modules\Helpdesk\Tests\Feature;
|
|
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
use Modules\Helpdesk\Livewire\SettingsManager;
|
|
use Modules\Helpdesk\Models\Category;
|
|
use Modules\Helpdesk\Models\GitRepository;
|
|
use Modules\Helpdesk\Models\Priority;
|
|
use Modules\Helpdesk\Models\Project;
|
|
use Modules\Helpdesk\Models\Status;
|
|
use Modules\Helpdesk\Models\Team;
|
|
use Modules\Helpdesk\Models\WorkflowTemplate;
|
|
use Modules\Helpdesk\Tests\Concerns\BuildsHelpdeskFixtures;
|
|
use Tests\TestCase;
|
|
|
|
final class SettingsCrudTest extends TestCase
|
|
{
|
|
use BuildsHelpdeskFixtures;
|
|
use RefreshDatabase;
|
|
|
|
public function test_settings_manager_creates_updates_and_deletes_statuses(): void
|
|
{
|
|
$admin = $this->admin();
|
|
|
|
$component = Livewire::actingAs($admin)
|
|
->test(SettingsManager::class)
|
|
->set('statusForm.name', 'Awaiting Customer')
|
|
->set('statusForm.color', 'amber')
|
|
->set('statusForm.sort_order', 20)
|
|
->set('statusForm.is_closed', false)
|
|
->call('saveStatus')
|
|
->assertHasNoErrors();
|
|
|
|
$status = Status::query()->where('slug', 'awaiting-customer')->firstOrFail();
|
|
|
|
$component->call('editStatus', $status->id)
|
|
->set('statusForm.name', 'Waiting Customer')
|
|
->call('saveStatus')
|
|
->assertHasNoErrors();
|
|
|
|
$this->assertDatabaseHas('helpdesk_statuses', ['id' => $status->id, 'name' => 'Waiting Customer']);
|
|
|
|
$component->call('deleteStatus', $status->id);
|
|
$this->assertDatabaseMissing('helpdesk_statuses', ['id' => $status->id]);
|
|
}
|
|
|
|
public function test_settings_manager_creates_lookup_project_team_repository_and_workflow_records(): void
|
|
{
|
|
$admin = $this->admin();
|
|
|
|
Livewire::actingAs($admin)
|
|
->test(SettingsManager::class)
|
|
->set('priorityForm.name', 'Critical')
|
|
->set('priorityForm.color', 'red')
|
|
->set('priorityForm.sort_order', 1)
|
|
->call('savePriority')
|
|
->set('categoryForm.name', 'Bug Fix')
|
|
->set('categoryForm.color', 'rose')
|
|
->set('categoryForm.description', 'Production defects')
|
|
->call('saveCategory')
|
|
->set('teamForm.name', 'Platform Support')
|
|
->set('teamForm.color', 'indigo')
|
|
->set('teamForm.description', 'Platform team')
|
|
->call('saveTeam')
|
|
->set('projectForm.title', 'Core WMS')
|
|
->set('projectForm.team_id', Team::query()->where('slug', 'platform-support')->firstOrFail()->id)
|
|
->set('projectForm.color', 'blue')
|
|
->set('projectForm.description', 'Core platform')
|
|
->call('saveProject')
|
|
->set('repositoryForm.name', 'WMS Core')
|
|
->set('repositoryForm.project_id', Project::query()->where('slug', 'core-wms')->firstOrFail()->id)
|
|
->set('repositoryForm.provider', 'github')
|
|
->set('repositoryForm.remote_url', 'git@github.com:mpba/wms-core.git')
|
|
->set('repositoryForm.default_branch', 'develop')
|
|
->set('repositoryForm.webhook_secret', 'secret')
|
|
->call('saveRepository')
|
|
->set('workflowForm.name', 'Ticket Raised')
|
|
->set('workflowForm.event', 'ticket.created')
|
|
->set('workflowForm.subject', 'Ticket {{ ticket.reference }} created')
|
|
->set('workflowForm.html_body', '<p>Hello {{ requester.name }}</p>')
|
|
->set('workflowForm.text_body', 'Hello {{ requester.name }}')
|
|
->set('workflowForm.to_role', 'requester')
|
|
->call('saveWorkflowTemplate')
|
|
->assertHasNoErrors();
|
|
|
|
$this->assertDatabaseHas('helpdesk_priorities', ['slug' => 'critical']);
|
|
$this->assertDatabaseHas('helpdesk_categories', ['slug' => 'bug-fix']);
|
|
$this->assertDatabaseHas('helpdesk_teams', ['slug' => 'platform-support']);
|
|
$this->assertDatabaseHas('helpdesk_projects', ['slug' => 'core-wms']);
|
|
$this->assertDatabaseHas('helpdesk_git_repositories', ['name' => 'WMS Core', 'provider' => 'github']);
|
|
$this->assertDatabaseHas('helpdesk_workflow_templates', ['name' => 'Ticket Raised', 'event' => 'ticket.created']);
|
|
}
|
|
|
|
public function test_settings_manager_can_edit_and_delete_all_new_setup_records(): void
|
|
{
|
|
$admin = $this->admin();
|
|
$priority = $this->priority(['name' => 'Low', 'slug' => 'low']);
|
|
$category = $this->category(['name' => 'Support', 'slug' => 'support']);
|
|
$team = $this->team(['name' => 'First Line', 'slug' => 'first-line']);
|
|
$project = $this->project(['title' => 'Portal', 'slug' => 'portal', 'team_id' => $team->id]);
|
|
$repository = $this->repository(['project_id' => $project->id, 'name' => 'Portal Repo']);
|
|
$template = WorkflowTemplate::query()->create([
|
|
'name' => 'Closed Message',
|
|
'event' => 'ticket.closed',
|
|
'subject' => 'Closed {{ ticket.reference }}',
|
|
'html_body' => '<p>Closed</p>',
|
|
'text_body' => 'Closed',
|
|
'to_role' => 'requester',
|
|
'is_active' => true,
|
|
]);
|
|
|
|
$component = Livewire::actingAs($admin)->test(SettingsManager::class);
|
|
|
|
$component->call('editPriority', $priority->id)->set('priorityForm.name', 'Low Priority')->call('savePriority');
|
|
$component->call('editCategory', $category->id)->set('categoryForm.name', 'Customer Support')->call('saveCategory');
|
|
$component->call('editTeam', $team->id)->set('teamForm.name', 'First Line Support')->call('saveTeam');
|
|
$component->call('editProject', $project->id)->set('projectForm.title', 'Customer Portal')->call('saveProject');
|
|
$component->call('editRepository', $repository->id)->set('repositoryForm.name', 'Customer Portal Repo')->call('saveRepository');
|
|
$component->call('editWorkflowTemplate', $template->id)->set('workflowForm.name', 'Ticket Closed Message')->call('saveWorkflowTemplate');
|
|
|
|
$this->assertDatabaseHas('helpdesk_priorities', ['id' => $priority->id, 'name' => 'Low Priority']);
|
|
$this->assertDatabaseHas('helpdesk_categories', ['id' => $category->id, 'name' => 'Customer Support']);
|
|
$this->assertDatabaseHas('helpdesk_teams', ['id' => $team->id, 'name' => 'First Line Support']);
|
|
$this->assertDatabaseHas('helpdesk_projects', ['id' => $project->id, 'title' => 'Customer Portal']);
|
|
$this->assertDatabaseHas('helpdesk_git_repositories', ['id' => $repository->id, 'name' => 'Customer Portal Repo']);
|
|
$this->assertDatabaseHas('helpdesk_workflow_templates', ['id' => $template->id, 'name' => 'Ticket Closed Message']);
|
|
|
|
$component->call('deletePriority', $priority->id)
|
|
->call('deleteCategory', $category->id)
|
|
->call('deleteRepository', $repository->id)
|
|
->call('deleteWorkflowTemplate', $template->id);
|
|
|
|
self::assertNull(Priority::query()->find($priority->id));
|
|
self::assertNull(Category::query()->find($category->id));
|
|
self::assertNull(GitRepository::query()->find($repository->id));
|
|
self::assertNull(WorkflowTemplate::query()->find($template->id));
|
|
}
|
|
}
|