"""HttpCase tests for the 6 follow-up JSON-RPC endpoints.""" import json from datetime import date, timedelta from odoo.tests import tagged from odoo.tests.common import HttpCase, new_test_user @tagged('post_install', '-at_install') class TestFollowupController(HttpCase): def setUp(self): super().setUp() self.user = new_test_user( self.env, login='fu_test_user', groups='base.group_user,base.group_partner_manager,' 'account.group_account_invoice', ) def _jsonrpc(self, endpoint, params): self.authenticate('fu_test_user', 'fu_test_user') url = f'/fusion/followup/{endpoint}' body = {'jsonrpc': '2.0', 'method': 'call', 'params': params, 'id': 1} response = self.url_open( url, data=json.dumps(body), headers={'Content-Type': 'application/json'}, ) self.assertEqual( response.status_code, 200, f"{endpoint} returned {response.status_code}: {response.text[:300]}", ) result = response.json() if 'error' in result: self.fail(f"{endpoint} errored: {result['error']}") return result.get('result', {}) def test_list_overdue_returns_dict(self): result = self._jsonrpc('list_overdue', {'company_id': self.env.company.id}) self.assertIn('partners', result) self.assertIn('total', result) def test_get_partner_detail(self): partner = self.env['res.partner'].create({ 'name': 'Ctrl Test Partner', 'email': 'ctrl@test.local', }) result = self._jsonrpc('get_partner_detail', {'partner_id': partner.id}) self.assertEqual(result['partner']['id'], partner.id) self.assertIn('overdue', result) self.assertIn('history', result) def test_pause_sets_paused_until(self): partner = self.env['res.partner'].create({'name': 'Pause Test'}) future = (date.today() + timedelta(days=20)).isoformat() result = self._jsonrpc('pause', { 'partner_id': partner.id, 'until_date': future, }) self.assertEqual(result['paused_until'], future) def test_reset_clears_status(self): partner = self.env['res.partner'].create({ 'name': 'Reset Test', 'fusion_followup_status': 'paused', }) result = self._jsonrpc('reset', {'partner_id': partner.id}) self.assertEqual(result['status'], 'reset') def test_send_no_overdue_returns_no_action(self): partner = self.env['res.partner'].create({ 'name': 'No Overdue', 'email': 'no@test.local', }) result = self._jsonrpc('send', { 'partner_id': partner.id, 'force': True, }) self.assertIn(result.get('status'), ('no_action', 'no_overdue')) def test_generate_text_no_level_returns_no_level(self): partner = self.env['res.partner'].create({'name': 'NoLevel Test'}) result = self._jsonrpc('generate_text', {'partner_id': partner.id}) self.assertIn(result.get('status'), ('no_level', 'ok'))