workign comments strucuture

This commit is contained in:
Mark Gregory
2026-06-17 10:09:42 +01:00
parent 878f383f7a
commit fe05ef8104
13 changed files with 575 additions and 104 deletions
@@ -19,12 +19,14 @@ final class HelpdeskTicketBrowserTest extends DuskTestCase
$fixtures = $this->seedLookupData();
$user = $this->user(['name' => 'Ticket Browser User']);
$this->browse(function (Browser $browser) use ($user, $fixtures): void {
$subject = 'Browser created helpdesk ticket '.uniqid();
$this->browse(function (Browser $browser) use ($user, $fixtures, $subject): void {
$browser->loginAs($user)
->visitRoute('helpdesk.tickets.create')
->waitFor('@helpdesk-ticket-create')
->assertSee('Create ticket')
->type('@ticket-subject', 'Browser created helpdesk ticket');
->type('@ticket-subject', $subject);
$this->setHelpdeskEditor($browser, 'ticket-body-editor', '<p>This browser ticket proves the form saves correctly.</p>');
$this->setHelpdeskSelect($browser, 'board_id', $fixtures['board']->id);
@@ -36,7 +38,7 @@ final class HelpdeskTicketBrowserTest extends DuskTestCase
$browser->pause(500)
->press('@ticket-create-submit')
->waitFor('@helpdesk-ticket-index', 10)
->assertSee('Browser created helpdesk ticket')
->assertSee($subject)
->assertSee('High')
->assertSee('Support');
});
@@ -65,6 +65,48 @@ final class TicketConversationTest extends TestCase
]);
}
public function test_comment_post_endpoint_creates_lotus_identity_and_search_text(): void
{
$fixtures = $this->seedLookupData();
$owner = $this->user();
$ticket = $this->ticket(['owner' => $owner, 'status_id' => $fixtures['open']->id, 'priority_id' => $fixtures['normal']->id]);
$this->actingAs($owner)
->post(route('helpdesk.tickets.comments.store', $ticket), [
'commentBody' => '<p><strong>Searchable response</strong></p>',
])
->assertRedirect(route('helpdesk.tickets.show', $ticket));
$comment = Comment::query()->where('ticket_id', $ticket->id)->firstOrFail();
self::assertNotEmpty($comment->guid);
self::assertNotEmpty($comment->unid);
self::assertSame($comment->unid, $comment->root_unid);
self::assertSame('Searchable response', $comment->body_text);
self::assertSame(1, $comment->sync_sequence);
}
public function test_nested_reply_post_endpoint_preserves_lotus_parent_identity(): void
{
$fixtures = $this->seedLookupData();
$owner = $this->user();
$ticket = $this->ticket(['owner' => $owner, 'status_id' => $fixtures['open']->id, 'priority_id' => $fixtures['normal']->id]);
$parent = app(\Modules\Helpdesk\Services\TicketService::class)->comment($ticket, $owner, '<p>Parent response</p>');
$this->actingAs($owner)
->post(route('helpdesk.tickets.comments.store', $ticket), [
'parent_id' => $parent->id,
'commentBody' => '<p>Child response</p>',
])
->assertRedirect(route('helpdesk.tickets.show', $ticket));
$reply = Comment::query()->where('parent_id', $parent->id)->firstOrFail();
self::assertSame($parent->unid, $reply->parent_unid);
self::assertSame($parent->root_unid, $reply->root_unid);
}
public function test_agent_can_update_status_to_closed_and_priority(): void
{
Mail::fake();