85 lines
2.5 KiB
PHP
85 lines
2.5 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 Database\Seeders\ProjectSeeder;
|
|
use Database\Seeders\ProjectTicketMetadataSeeder;
|
|
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 the metadata seeder creates project field definitions.
|
|
*/
|
|
public function test_metadata_seeder_does_not_create_fixed_ticket_field_definitions(): void
|
|
{
|
|
$this->seed([
|
|
ProjectSeeder::class,
|
|
ProjectTicketMetadataSeeder::class,
|
|
]);
|
|
|
|
$coreProject = Project::query()->where('key', 'CORE')->firstOrFail();
|
|
|
|
$this->assertSame(0, $coreProject->ticketFieldDefinitions()->count());
|
|
}
|
|
|
|
/**
|
|
* 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(),
|
|
);
|
|
}
|
|
}
|