81 lines
3.0 KiB
Python
81 lines
3.0 KiB
Python
"""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'))
|