assertIsString($editor); $this->assertStringNotContainsString('x-on:input', $editor); $this->assertStringNotContainsString('x-on:keyup', $editor); $this->assertStringContainsString('contenteditable="true"', $editor); $this->assertStringContainsString('spellcheck="true"', $editor); $this->assertStringContainsString('lang="en-GB"', $editor); $this->assertStringContainsString('this.$wire.set(this.model, this.value, live)', $editor); $this->assertStringContainsString('syncToLivewire(false)', $editor); } /** * The create form must push the rich editor body to the Livewire property * during submit capture, before the save action validates the body field. */ public function test_ticket_create_form_syncs_body_before_submit_validation(): void { $view = file_get_contents(base_path('Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php')); $this->assertIsString($view); $this->assertStringContainsString('model="body"', $view); $this->assertStringContainsString('x-on:submit.capture', $view); $this->assertStringContainsString('helpdesk-editor-sync', $view); $this->assertStringNotContainsString('wire:model.live="body"', $view); } /** * The create-ticket footer buttons should match the compact professional * pattern already used by Ticket controls. */ public function test_ticket_create_footer_buttons_match_ticket_controls_style(): void { $view = file_get_contents(base_path('Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php')); $this->assertIsString($view); $this->assertStringContainsString('inline-flex min-h-10 items-center justify-center rounded-lg bg-red-600 px-4 py-2 text-xs font-black', $view); $this->assertStringContainsString('inline-flex min-h-10 items-center justify-center rounded-lg bg-blue-600 px-4 py-2 text-xs font-black', $view); $this->assertStringContainsString('inline-flex min-h-10 items-center justify-center rounded-lg bg-emerald-600 px-4 py-2 text-xs font-black', $view); $this->assertStringContainsString('Create ticket', $view); $this->assertStringNotContainsString('rounded-xl bg-green-600 px-5 py-2 text-sm font-semibold', $view); } }