93 lines
3.0 KiB
PHP
93 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Models;
|
|
|
|
use App\Actions\ProjectTicketMetadata\InitializeProjectTicketMetadata;
|
|
use App\Models\Project;
|
|
use App\Models\Ticket;
|
|
use App\Models\TicketLink;
|
|
use App\Models\TicketLinkType;
|
|
use Database\Seeders\ProjectSeeder;
|
|
use Database\Seeders\ProjectTicketMetadataSeeder;
|
|
use Database\Seeders\TicketLinkSeeder;
|
|
use Database\Seeders\TicketLinkTypeSeeder;
|
|
use Database\Seeders\TicketSeeder;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class TicketLinkTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
/**
|
|
* Ensure the ticket link factory preserves the provided source and target direction.
|
|
*/
|
|
public function test_ticket_link_factory_preserves_ticket_direction(): void
|
|
{
|
|
$project = Project::factory()->create([
|
|
'key' => 'CORE',
|
|
]);
|
|
|
|
app(InitializeProjectTicketMetadata::class)->handle($project);
|
|
|
|
$priority = $project->ticketPriorities()->firstOrFail();
|
|
$taskType = $project->ticketTypes()
|
|
->where('is_parent', false)
|
|
->orderBy('position')
|
|
->firstOrFail();
|
|
|
|
$firstTicket = Ticket::factory()->create([
|
|
'project_id' => $project->id,
|
|
'sequence_number' => 1,
|
|
'ticket_key' => 'CORE-1',
|
|
'ticket_priority_id' => $priority->id,
|
|
'ticket_type_id' => $taskType->id,
|
|
]);
|
|
$secondTicket = Ticket::factory()->create([
|
|
'project_id' => $project->id,
|
|
'sequence_number' => 2,
|
|
'ticket_key' => 'CORE-2',
|
|
'ticket_priority_id' => $priority->id,
|
|
'ticket_type_id' => $taskType->id,
|
|
]);
|
|
$ticketLinkType = TicketLinkType::factory()->for($project)->create([
|
|
'label' => 'Relates to',
|
|
'position' => 1,
|
|
]);
|
|
|
|
$ticketLink = TicketLink::factory()->create([
|
|
'source_ticket_id' => $secondTicket->id,
|
|
'target_ticket_id' => $firstTicket->id,
|
|
'ticket_link_type_id' => $ticketLinkType->id,
|
|
]);
|
|
|
|
$this->assertSame($secondTicket->id, $ticketLink->source_ticket_id);
|
|
$this->assertSame($firstTicket->id, $ticketLink->target_ticket_id);
|
|
}
|
|
|
|
/**
|
|
* Ensure the ticket link seeder creates dummy links for seeded projects.
|
|
*/
|
|
public function test_ticket_link_seeder_creates_dummy_links_for_seeded_projects(): void
|
|
{
|
|
$this->seed([
|
|
ProjectSeeder::class,
|
|
ProjectTicketMetadataSeeder::class,
|
|
TicketSeeder::class,
|
|
TicketLinkTypeSeeder::class,
|
|
TicketLinkSeeder::class,
|
|
]);
|
|
|
|
$coreProject = Project::query()->where('key', 'CORE')->firstOrFail();
|
|
$seededTickets = Ticket::query()
|
|
->where('project_id', $coreProject->id)
|
|
->orderBy('sequence_number')
|
|
->get();
|
|
|
|
$this->assertDatabaseHas('ticket_links', [
|
|
'source_ticket_id' => $seededTickets[0]->id,
|
|
'target_ticket_id' => $seededTickets[1]->id,
|
|
]);
|
|
}
|
|
}
|