68 lines
2.0 KiB
PHP
68 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Models;
|
|
|
|
use App\Actions\ProjectTicketMetadata\InitializeProjectTicketMetadata;
|
|
use App\Models\Project;
|
|
use App\Models\Ticket;
|
|
use App\Models\TicketFieldDefinition;
|
|
use App\Models\TicketFieldValue;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class TicketFieldDefinitionTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
/**
|
|
* Ensure the field definition factory uses a supported field type.
|
|
*/
|
|
public function test_ticket_field_definition_factory_uses_supported_types(): void
|
|
{
|
|
$ticketFieldDefinition = TicketFieldDefinition::factory()->create();
|
|
|
|
$this->assertContains(
|
|
$ticketFieldDefinition->field_type,
|
|
TicketFieldDefinition::FIELD_TYPES,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Ensure ticket field definitions expose their related ticket values.
|
|
*/
|
|
public function test_ticket_field_definition_exposes_related_ticket_values(): void
|
|
{
|
|
$project = Project::factory()->create([
|
|
'key' => 'CORE',
|
|
]);
|
|
|
|
app(InitializeProjectTicketMetadata::class)->handle($project);
|
|
|
|
$priority = $project->ticketPriorities()->firstOrFail();
|
|
|
|
$ticket = Ticket::factory()->create([
|
|
'project_id' => $project->id,
|
|
'ticket_priority_id' => $priority->id,
|
|
'ticket_type_id' => $project->ticketTypes()->firstOrFail()->id,
|
|
]);
|
|
|
|
$fieldDefinition = TicketFieldDefinition::factory()->for($project)->create([
|
|
'field_type' => 'number',
|
|
'label' => 'Complexity',
|
|
'position' => 1,
|
|
]);
|
|
|
|
$fieldValue = TicketFieldValue::factory()->create([
|
|
'ticket_field_definition_id' => $fieldDefinition->id,
|
|
'ticket_id' => $ticket->id,
|
|
'value_number' => 5,
|
|
'value_user_id' => null,
|
|
]);
|
|
|
|
$this->assertSame(
|
|
[$fieldValue->id],
|
|
$fieldDefinition->fresh()->ticketFieldValues->modelKeys(),
|
|
);
|
|
}
|
|
}
|