create(['title' => 'DNS', 'content' => 'x']); $reply = QuickReply::query()->create(['title' => 'Quick', 'content' => 'y', 'is_active' => true]); $article->quickReplies()->sync([$reply->id]); $this->assertCount(1, $article->quickReplies); $article->delete(); $pivotCount = DB::table('article_quick_reply')->count(); $this->assertSame(0, $pivotCount); } public function test_ticket_credentials_are_stored_encrypted_and_decrypted_via_cast(): void { $ticket = Ticket::query()->create([ 'message' => 'vraag', 'api_credentials' => ['apiuser' => 'demo', 'apipassword' => 'secret'], ]); $this->assertSame('demo', $ticket->api_credentials['apiuser']); $raw = DB::table('tickets')->where('id', $ticket->id)->value('api_credentials'); $this->assertIsString($raw); $this->assertStringNotContainsString('secret', $raw); } public function test_ticket_tool_call_casts_arrays(): void { $ticket = Ticket::query()->create(['message' => 'vraag']); $article = Article::query()->create(['title' => 'DNS', 'content' => 'x']); $toolCall = TicketToolCall::query()->create([ 'ticket_id' => $ticket->id, 'article_id' => $article->id, 'action' => 'domain_inf', 'status' => 'success', 'parameters' => ['sld' => 'example', 'tld' => 'nl'], 'response' => ['ok' => true], ]); $toolCall->refresh(); $this->assertSame('example', $toolCall->parameters['sld']); $this->assertTrue($toolCall->response['ok']); } }