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, ]); } }