from __future__ import annotations import unittest from api.task_tool_policy import build_task_tool_policy class TaskToolPolicyTests(unittest.TestCase): def test_e2e_literal_contract_forbids_tools_and_returns_exact_token(self) -> None: policy = build_task_tool_policy( "Rispondi ESCLUSIVAMENTE con TEST_E2E_OK. Non usare strumenti, tool, " "comandi shell, file, rete, servizi esterni, azioni o card." ) self.assertTrue(policy.forbid_tools) self.assertEqual(policy.literal_response, "TEST_E2E_OK") def test_explicit_tool_denial_without_literal_contract_stays_tool_free(self) -> None: policy = build_task_tool_policy("Spiega il concetto senza usare strumenti o rete.") self.assertTrue(policy.forbid_tools) self.assertIsNone(policy.literal_response) def test_normal_task_remains_unrestricted(self) -> None: policy = build_task_tool_policy("Cerca le notizie di oggi e sintetizzale.") self.assertFalse(policy.forbid_tools) self.assertIsNone(policy.literal_response) def test_partial_wording_does_not_create_a_literal_contract(self) -> None: policy = build_task_tool_policy("Rispondi esclusivamente con una spiegazione, senza strumenti.") self.assertTrue(policy.forbid_tools) self.assertIsNone(policy.literal_response) if __name__ == "__main__": unittest.main()