fix: use standard odoo jsonrpc protocol

This commit is contained in:
2026-07-24 09:46:34 +02:00
parent 7b04a1e803
commit adedf56b7b
7 changed files with 129 additions and 26 deletions
+25 -6
View File
@@ -33,6 +33,8 @@ def make_config():
config = ConfigParser()
config.add_section("odoo")
config.set("odoo", "url", "https://odoo.example.test")
config.set("odoo", "database", "test-db")
config.set("odoo", "username", "test@example.test")
config.set("odoo", "api_key", "test-api-key")
config.set("odoo", "model", "helpdesk.ticket")
config.add_section("rocket")
@@ -82,19 +84,24 @@ class TicketingStateTest(unittest.TestCase):
self.assertEqual(ticketing.load_tickets_state(state_path), expected_state)
@patch("ticketing_setup.requests.post")
def test_fetch_odoo_tickets_uses_timeout_and_returns_result(self, post):
response = Mock()
response.json.return_value = {
def test_fetch_odoo_tickets_authenticates_and_returns_result(self, post):
auth_response = Mock()
auth_response.json.return_value = {"result": 7}
tickets_response = Mock()
tickets_response.json.return_value = {
"result": [{"id": 42, "write_date": "2026-07-24 12:00:00"}],
}
post.return_value = response
post.side_effect = [auth_response, tickets_response]
tickets = ticketing.fetch_odoo_tickets(make_config())
self.assertEqual(tickets, [{"id": 42, "write_date": "2026-07-24 12:00:00"}])
response.raise_for_status.assert_called_once_with()
post.assert_called_once()
auth_response.raise_for_status.assert_called_once_with()
tickets_response.raise_for_status.assert_called_once_with()
self.assertEqual(post.call_count, 2)
self.assertEqual(post.call_args.kwargs["timeout"], 5)
self.assertEqual(post.call_args.kwargs["json"]["params"]["service"], "object")
self.assertEqual(post.call_args.kwargs["json"]["params"]["method"], "execute_kw")
@patch("ticketing_setup.requests.post")
def test_fetch_odoo_tickets_rejects_jsonrpc_error(self, post):
@@ -105,6 +112,18 @@ class TicketingStateTest(unittest.TestCase):
with self.assertRaisesRegex(Exception, "Erreur Odoo JSON-RPC"):
ticketing.fetch_odoo_tickets(make_config())
@patch("ticketing_setup.requests.post")
def test_fetch_odoo_tickets_can_use_configured_uid(self, post):
config = make_config()
config.set("odoo", "uid", "12")
response = Mock()
response.json.return_value = {"result": []}
post.return_value = response
self.assertEqual(ticketing.fetch_odoo_tickets(config), [])
self.assertEqual(post.call_count, 1)
self.assertEqual(post.call_args.kwargs["json"]["params"]["args"][1], 12)
@patch("ticketing_setup.requests.post")
def test_send_to_rocket_raises_for_http_errors(self, post):
response = Mock()