# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from datetime import date from dateutil.relativedelta import relativedelta from unittest.mock import patch from .common import HelpdeskCommon from odoo.tests.common import HttpCase from odoo.addons.mail.tests.common import MailCommon from odoo.addons.mail.tests.common import mail_new_test_user class TestHelpdeskRating(HelpdeskCommon, HttpCase, MailCommon): @classmethod def setUpClass(cls): super().setUpClass() cls.partner_1 = cls.env['res.partner'].create({ 'name': 'Valid Lelitre', 'email': 'valid.lelitre@agrolait.com', }) cls.partner_1_user = mail_new_test_user( cls.env, name=cls.partner_1.name, login='partner_1', email=cls.partner_1.email, groups='base.group_portal', ) # Enable rating feature cls.test_team.write({'use_rating': True}) HelpdeskTicket = cls.env['helpdesk.ticket'].with_context({'mail_create_nolog': True}) cls.test_team_ticket1 = HelpdeskTicket.create({ 'name': 'Ticket 1', 'team_id': cls.test_team.id, 'user_id': cls.helpdesk_manager.id, }) cls.test_team_ticket2 = HelpdeskTicket.create({ 'name': 'Ticket 2', 'team_id': cls.test_team.id, 'user_id': cls.helpdesk_user.id, }) cls.default_rating_vals = { 'res_model_id': cls.env['ir.model']._get('helpdesk.ticket').id, 'parent_res_model_id': cls.env['ir.model']._get('helpdesk.team').id, 'parent_res_id': cls.test_team.id, 'partner_id': cls.partner_1.id, 'consumed': True, } def test_rating_notification(self): self.env['rating.rating'].create({ **self.default_rating_vals, 'rated_partner_id': self.helpdesk_user.partner_id.id, 'res_id': self.test_team_ticket2.id, 'consumed': False, 'access_token': 'HELP_TEST', }) rating = 5 feedback = 'Great!' self.test_team_ticket2.rating_apply(rating, token='HELP_TEST', feedback=feedback) message = self.test_team_ticket2.message_ids self.assertEqual(len(message), 1, 'A message should have been posted in the chatter.') self.assertEqual(message.author_id, self.partner_1, 'The message should be posted by the rating partner.') self.assertIn(f"{rating}/5", message.body, f"The posted rating should be {rating}/5.") self.assertIn(feedback, message.body, 'The posted rating should contain the customer feedback.') def test_rating_website(self): self.test_team.portal_show_rating = True rating = self.env['rating.rating'].create({ **self.default_rating_vals, 'rating': 5, 'rated_partner_id': self.helpdesk_user.partner_id.id, 'res_id': self.test_team_ticket2.id, }) yesterday = date.today() - relativedelta(days=1) yesterday_str = f'{yesterday.year}-{yesterday.month}-{yesterday.day}' self.env.cr.execute("UPDATE rating_rating SET create_date=%s, write_date=%s WHERE id=%s", (yesterday_str, yesterday_str, rating.id)) rating.invalidate_recordset(['create_date', 'write_date']) self.authenticate('partner_1', 'partner_1') res = self.url_open(f"/helpdesk/rating/{self.test_team.id}") self.assertEqual(res.status_code, 200, 'The request should be successful.') self.assertRegex(res.text, f"