Odoo18-Base/addons/rating/tests/test_controller.py

59 lines
2.9 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.tests import HttpCase, tagged, new_test_user
from odoo.addons.base.tests.common import HttpCaseWithUserDemo, HttpCaseWithUserPortal
@tagged('post_install', '-at_install')
class TestControllersRoute(HttpCaseWithUserDemo, HttpCaseWithUserPortal):
def setUp(self):
super(TestControllersRoute, self).setUp()
self.user = new_test_user(self.env, "test_user_1", email="test_user_1@nowhere.com", tz="UTC")
self.partner = self.user.partner_id
self.rated_partner = self.env['res.partner'].create({
'name': 'Test company',
'email': "testcompany@example.com",
'is_company': True,
'child_ids': [
(0, 0, {'name': 'Test child_1', 'type': 'contact', 'email': "testchild_1@example.com",}),
]
})
def test_controller_rating(self):
[rating_test_1, rating_test_2, rating_test_3] = self.env['rating.rating'].with_user(self.user).create([{
'res_model_id': self.env['ir.model']._get_id('res.partner'),
'res_model': 'res.partner',
'res_id': self.rated_partner.id,
'partner_id': self.partner.id,
'rating': 3
} for i in range(3)])
self.authenticate(None, None)
access_token = rating_test_1.access_token
url = '/rate/%s/submit_feedback' % access_token
req = self.url_open(url)
self.assertEqual(req.status_code, 200, "Response should = OK")
# changed behavior in Odoo 16+: the GET request to /rate/{access_token}/int
# will not trigger a consume of the rating. User needs to submit the Form
details = [
(self.user_demo.login, rating_test_1, rating_test_1.access_token, False),
(self.user.login, rating_test_1, rating_test_1.access_token, False),
(None, rating_test_2, rating_test_2.access_token, False),
(self.user_portal.login, rating_test_3, rating_test_3.access_token, False)
]
for login, rating_test, access_token, expected_consume in details:
with self.subTest(login=login, access_token=access_token, rating_test=rating_test, expected_consume=expected_consume):
if login == self.user_portal.login:
rating_test.partner_id = self.rated_partner.child_ids.id
self.partner_portal.parent_id = self.rated_partner.id
self.authenticate(login, login)
res = self.url_open(f"/rate/{access_token}/5")
self.assertEqual(res.status_code, 200)
self.assertEqual(rating_test.consumed, expected_consume)
message = b'You cannot rate this' if login == self.user_demo.login else b'Feel free to share feedback on your experience:'
self.assertIn(message, res.content)