workign comments strucuture
This commit is contained in:
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace Modules\Helpdesk\Tests\Browser;
|
||||
|
||||
use Laravel\Dusk\Browser;
|
||||
use Modules\Helpdesk\Models\CannedResponse;
|
||||
use Modules\Helpdesk\Models\Comment;
|
||||
use Modules\Helpdesk\Tests\Concerns\BuildsHelpdeskFixtures;
|
||||
use Tests\DuskTestCase;
|
||||
@@ -57,29 +58,59 @@ final class HelpdeskTicketBrowserTest extends DuskTestCase
|
||||
'subject' => 'Browser response ticket',
|
||||
]);
|
||||
|
||||
$this->browse(function (Browser $browser) use ($user, $ticket): void {
|
||||
$cannedResponse = CannedResponse::query()->create([
|
||||
'name' => 'Browser canned response',
|
||||
'slug' => 'browser-canned-response',
|
||||
'visibility' => 'agents',
|
||||
'body' => 'Inserted canned browser response',
|
||||
'is_active' => true,
|
||||
'sort_order' => 1,
|
||||
]);
|
||||
|
||||
$this->browse(function (Browser $browser) use ($user, $ticket, $cannedResponse): void {
|
||||
$browser->loginAs($user)
|
||||
->visitRoute('helpdesk.tickets.show', $ticket)
|
||||
->waitFor('@helpdesk-ticket-show')
|
||||
->assertSee('Browser response ticket');
|
||||
|
||||
$this->setHelpdeskEditor($browser, 'ticket-comment-editor', '<p>First browser response</p>');
|
||||
|
||||
$browser->pause(1000)
|
||||
->assertSee('Browser response ticket')
|
||||
->select('canned_response_id', (string) $cannedResponse->id)
|
||||
->press('@insert-canned-response')
|
||||
->assertInputValue('commentBody', 'Inserted canned browser response')
|
||||
->type('@ticket-comment-editor', 'First browser response')
|
||||
->press('@post-comment')
|
||||
->waitForLocation(route('helpdesk.tickets.show', $ticket, false), 10)
|
||||
->waitForText('First browser response', 10)
|
||||
->assertSee('First browser response');
|
||||
|
||||
$this->assertDatabaseHas('helpdesk_comments', [
|
||||
'ticket_id' => $ticket->id,
|
||||
'user_id' => $user->id,
|
||||
'body' => '<p>First browser response</p>',
|
||||
'is_internal' => false,
|
||||
]);
|
||||
$comment = Comment::query()
|
||||
->where('ticket_id', $ticket->id)
|
||||
->whereNull('parent_id')
|
||||
->where('body', 'First browser response')
|
||||
->firstOrFail();
|
||||
|
||||
self::assertSame(1, Comment::query()->where('ticket_id', $ticket->id)->count());
|
||||
$browser->press('@reply-to-comment-'.$comment->id)
|
||||
->waitFor('@reply-body-'.$comment->id)
|
||||
->type('@reply-body-'.$comment->id, 'Nested browser response')
|
||||
->press('@post-reply-'.$comment->id)
|
||||
->waitForText('Nested browser response', 10)
|
||||
->assertSee('Nested browser response');
|
||||
});
|
||||
|
||||
$this->assertDatabaseHas('helpdesk_comments', [
|
||||
'ticket_id' => $ticket->id,
|
||||
'parent_id' => null,
|
||||
'body' => 'First browser response',
|
||||
]);
|
||||
|
||||
$parentId = Comment::query()
|
||||
->where('ticket_id', $ticket->id)
|
||||
->whereNull('parent_id')
|
||||
->where('body', 'First browser response')
|
||||
->value('id');
|
||||
|
||||
$this->assertDatabaseHas('helpdesk_comments', [
|
||||
'ticket_id' => $ticket->id,
|
||||
'parent_id' => $parentId,
|
||||
'body' => 'Nested browser response',
|
||||
]);
|
||||
}
|
||||
|
||||
private function setHelpdeskEditor(Browser $browser, string $dusk, string $html): void
|
||||
@@ -96,22 +127,27 @@ if (! root) {
|
||||
throw new Error('Helpdesk editor ' + key + ' was not found.');
|
||||
}
|
||||
|
||||
const editor = root.matches('[contenteditable="true"]')
|
||||
const editor = root.matches('textarea, input, [contenteditable="true"]')
|
||||
? root
|
||||
: root.querySelector('[contenteditable="true"]');
|
||||
: root.querySelector('textarea, input, [contenteditable="true"]');
|
||||
|
||||
if (! editor) {
|
||||
throw new Error('Helpdesk editor content area ' + key + ' was not found.');
|
||||
}
|
||||
|
||||
editor.focus();
|
||||
editor.innerHTML = html;
|
||||
|
||||
if (editor.matches('textarea, input')) {
|
||||
editor.value = html.replace(/^<p>/, '').replace(/<\/p>$/, '');
|
||||
} else {
|
||||
editor.innerHTML = html;
|
||||
}
|
||||
|
||||
editor.dispatchEvent(new InputEvent('input', {
|
||||
bubbles: true,
|
||||
composed: true,
|
||||
inputType: 'insertText',
|
||||
data: editor.textContent || ' ',
|
||||
data: editor.value || editor.textContent || ' ',
|
||||
}));
|
||||
|
||||
editor.dispatchEvent(new Event('change', { bubbles: true, composed: true }));
|
||||
|
||||
Reference in New Issue
Block a user