assertFileExists($service); $this->assertFileExists($controller); $serviceContents = file_get_contents($service) ?: ''; $controllerContents = file_get_contents($controller) ?: ''; self::assertStringContainsString('head_commit', $serviceContents); self::assertStringContainsString('push.changes.0.commits', $serviceContents); self::assertStringContainsString('HD[-\\s_]?', $serviceContents); self::assertStringContainsString('sprintf(\'HD-%s-%05d\'', $serviceContents); self::assertStringContainsString('hasValidBitbucketSignature', $controllerContents); self::assertStringContainsString('hasValidGenericSignature', $controllerContents); } /** * Ensure all ticket comment editors request native browser spellcheck assistance. */ public function test_ticket_comment_editors_enable_spellcheck_and_language_hints(): void { $ticketShow = base_path('Modules/Helpdesk/Resources/views/livewire/ticket-show.blade.php'); $commentThread = base_path('Modules/Helpdesk/Resources/views/partials/comment-thread.blade.php'); $ticketShowContents = file_get_contents($ticketShow) ?: ''; $commentThreadContents = file_get_contents($commentThread) ?: ''; self::assertStringContainsString('contenteditable="true" role="textbox" aria-multiline="true" spellcheck="true" lang="en-GB"', $ticketShowContents); self::assertStringContainsString('name="commentBody" required spellcheck="true" lang="en-GB"', $ticketShowContents); self::assertStringContainsString('data-helpdesk-comment-subject', $ticketShowContents); self::assertStringContainsString('spellcheck="true" lang="en-GB" autocorrect="on"', $commentThreadContents); self::assertStringContainsString('autocapitalize="sentences" inputmode="text"', $commentThreadContents); } /** * Ensure settings sections use the polished Abbott-style card treatment. */ public function test_settings_sections_use_professional_card_treatment(): void { $settingsSection = base_path('Modules/Helpdesk/Resources/views/components/settings-section.blade.php'); $contents = file_get_contents($settingsSection) ?: ''; self::assertStringContainsString('rounded-2xl', $contents); self::assertStringContainsString('bg-gradient-to-r from-slate-950 via-blue-950 to-slate-900', $contents); self::assertStringContainsString('Configuration', $contents); self::assertStringContainsString("[&_input:not([type='checkbox']):not([type='radio']):not([type='color'])]:min-h-9", $contents); self::assertStringContainsString('dark:bg-zinc-950/45', $contents); } /** * Ensure settings lookup forms stay aligned and avoid oversized colour controls. */ public function test_lookup_settings_forms_use_compact_aligned_grid_layouts(): void { $settingsManager = base_path('Modules/Helpdesk/Resources/views/livewire/settings-manager.blade.php'); $colourSelect = base_path('Modules/Helpdesk/Resources/views/components/colour-select.blade.php'); $settingsContents = file_get_contents($settingsManager) ?: ''; $colourContents = file_get_contents($colourSelect) ?: ''; self::assertStringContainsString('grid gap-3 xl:grid-cols-12', $settingsContents); self::assertStringContainsString('class="xl:col-span-12" model="statusForm.color"', $settingsContents); self::assertStringContainsString('class="xl:col-span-12" model="priorityForm.color"', $settingsContents); self::assertStringContainsString('class="xl:col-span-12" model="categoryForm.color"', $settingsContents); self::assertStringContainsString('class="xl:col-span-12" model="teamForm.color"', $settingsContents); self::assertStringContainsString('class="xl:col-span-12" model="projectForm.color"', $settingsContents); self::assertStringContainsString('class="xl:col-span-12" model="tagForm.color"', $settingsContents); self::assertStringContainsString('grid grid-cols-[2.75rem_minmax(0,11rem)]', $colourContents); self::assertStringContainsString('aria-label="Custom hex colour"', $colourContents); self::assertStringContainsString('h-9 w-full rounded-lg', $colourContents); self::assertStringNotContainsString('