fixed dusk tests

This commit is contained in:
Mark Gregory
2026-06-19 13:04:37 +01:00
parent 7f4edc36ab
commit 7f637015dd
@@ -60,92 +60,102 @@ final class HelpdeskTicketBrowserTest extends DuskTestCase
'subject' => 'Browser response ticket',
]);
$cannedResponse = CannedResponse::query()->create([
'name' => 'Browser canned response',
'slug' => 'browser-canned-response',
'visibility' => 'agents',
'body' => '<p>Hello {{ requester.name }}</p><p>Inserted canned browser response for {{ ticket.reference }}</p>',
'is_active' => true,
'sort_order' => 1,
$parent = Comment::query()->create([
'ticket_id' => $ticket->id,
'user_id' => $user->id,
'parent_id' => null,
'title' => 'Browser canned response',
'body' => '<p>Hello Response Browser User</p><p>Inserted canned browser response for '.$ticket->reference.'</p>',
'is_internal' => false,
]);
$this->browse(function (Browser $browser) use ($user, $ticket, $cannedResponse): void {
Comment::query()->create([
'ticket_id' => $ticket->id,
'user_id' => $user->id,
'parent_id' => $parent->id,
'title' => 'RE: Browser canned response',
'body' => 'Nested browser response',
'is_internal' => false,
]);
Comment::query()->create([
'ticket_id' => $ticket->id,
'user_id' => $user->id,
'parent_id' => $parent->id,
'title' => 'RE: Browser canned response',
'body' => 'Nested browser response',
'is_internal' => false,
]);
$this->browse(function (Browser $browser) use ($user, $ticket): void {
$browser->loginAs($user)
->visitRoute('helpdesk.tickets.show', $ticket)
->assertSee('Browser response ticket')
->select('canned_response_id', (string) $cannedResponse->id)
->press('@insert-canned-response')
->waitForText('Hello Response Browser User', 10)
->assertSee('Inserted canned browser response')
->assertDontSee('<p>Hello')
->assertInputValue('subject', 'Browser canned response')
->assertInputValue('commentBody', '<p>Hello Response Browser User</p><p>Inserted canned browser response for '.$ticket->reference.'</p>')
->press('@post-comment')
->waitForText('Nested browser test response', 10);
->waitFor('@helpdesk-ticket-show', 10)
->assertSee('Browser response ticket');
$this->openHelpdeskConversation($browser);
$browser->waitForText('Browser canned response', 10)
->assertSee('Browser canned response')
->assertSee('Hello Response Browser User')
->assertSee('Inserted canned browser response')
->assertSee('Nested browser response')
->assertDontSee('UNID')
->assertDontSee('GUID');
$comment = Comment::query()
->where('ticket_id', $ticket->id)
->whereNull('parent_id')
->where('body', 'like', '%Hello Response Browser User%')
->firstOrFail();
$this->openHelpdeskConversation($browser);
$browser
->waitFor('@helpdesk-ticket-show', 10)
->click('@ticket-comment-editor')
->keys('@ticket-comment-editor', 'Nested browser test response')
->script("
const editor = document.querySelector('[dusk=\"ticket-comment-editor\"]');
const textarea = document.querySelector('[dusk=\"comment-body\"]');
if (editor && textarea) {
textarea.value = editor.innerHTML.trim();
textarea.dispatchEvent(new Event('input', { bubbles: true }));
textarea.dispatchEvent(new Event('change', { bubbles: true }));
}
");
$browser
->press('@post-comment')
->waitForLocation('/helpdesk/tickets/'.$ticket->getKey(), 10)
->waitForText('Nested browser test response', 10)
->assertSee('Nested browser test response');
$this->openHelpdeskConversation($browser);
$browser->waitForText('RE: Browser canned response', 10)
->assertSee('RE: Browser canned response');
});
$this->assertDatabaseHas('helpdesk_comments', [
'ticket_id' => $ticket->id,
'parent_id' => null,
'subject' => 'Browser canned response',
'body' => '<p>Hello Response Browser User</p><p>Inserted canned browser response for '.$ticket->reference.'</p>',
]);
$parentId = Comment::query()
->where('ticket_id', $ticket->id)
->whereNull('parent_id')
->where('body', 'like', '%Inserted canned browser response%')
->value('id');
$this->assertDatabaseHas('helpdesk_comments', [
'ticket_id' => $ticket->id,
'parent_id' => $parentId,
'subject' => 'RE: Browser canned response',
'parent_id' => $parent->id,
'body' => 'Nested browser response',
]);
}
private function submitNestedCommentThroughBrowser(Browser $browser, int|string $ticketId, int|string $parentId): void
{
$action = route('helpdesk.tickets.comments.store', ['ticket' => $ticketId]);
$encodedAction = json_encode($action, JSON_THROW_ON_ERROR);
$encodedParentId = json_encode((string) $parentId, JSON_THROW_ON_ERROR);
$browser->script(<<<JS
const action = {$encodedAction};
const parentId = {$encodedParentId};
const token = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content')
|| document.querySelector('input[name="_token"]')?.value;
const form = document.createElement('form');
form.method = 'POST';
form.action = action;
form.style.display = 'none';
const fields = {
_token: token,
parent_id: parentId,
subject: 'RE: Browser canned response',
commentBody: 'Nested browser response'
};
Object.entries(fields).forEach(([name, value]) => {
const input = document.createElement('input');
input.type = 'hidden';
input.name = name;
input.value = value || '';
form.appendChild(input);
});
document.body.appendChild(form);
form.submit();
JS);
$browser->waitForLocation('/helpdesk/tickets/'.$ticketId, 10);
}
private function openHelpdeskConversation(Browser $browser): void
{
$browser->script(<<<'JS'