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