website_forum/tests/test_forum_controller.py

64 lines
3.7 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.website.tools import MockRequest
from odoo.addons.website_forum.controllers.website_forum import WebsiteForum
from odoo.addons.website_forum.tests.common import KARMA, TestForumCommon
class TestForumController(TestForumCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls._activate_multi_website()
cls.minimum_karma_allowing_to_post = KARMA['ask']
cls.forums = cls.env['forum.forum'].create([{
'name': f'Forum {idx + 2}',
'karma_ask': cls.minimum_karma_allowing_to_post,
'website_id': website.id,
} for idx, website in enumerate(
(cls.base_website, cls.base_website, cls.base_website, cls.website_2, cls.website_2))])
cls.forum_1, cls.forum_2, cls.forum_3, cls.forum_1_website_2, cls.forum_2_website_2 = cls.forums
cls.controller = WebsiteForum()
def _get_my_other_forums(self, forum):
""" Get user other forums limited to the forums of the test (self.forums). """
return self.forums & self.controller._prepare_user_values(forum=forum).get('my_other_forums')
def forum_post(self, user, forum):
return self.env['forum.post'].with_user(user).create({
'content': 'A post ...',
'forum_id': forum.id,
'name': 'Post...',
})
def test_prepare_user_values_my_other_forum(self):
""" Test user other forums values (my_other_forums) in various contexts. """
employee_2_forum_2_post = self.forum_post(self.user_employee_2, self.forum_2)
employee_2_website_2_forum_2_post = self.forum_post(self.user_employee_2, self.forum_2_website_2)
for user in (self.user_admin, self.user_employee, self.user_portal, self.user_public):
with self.with_user(user.login), MockRequest(self.env, website=self.base_website):
self.assertFalse(self._get_my_other_forums(self.forum_1))
self.assertFalse(self._get_my_other_forums(None))
self.assertFalse(self._get_my_other_forums(True))
if user != self.user_public:
self.env.user.karma = self.minimum_karma_allowing_to_post
# Like a post on forum 2 and verify that forum 2 is now in "my other forum"
employee_2_forum_2_post.favourite_ids += self.env.user
self.assertEqual(self._get_my_other_forums(self.forum_1), self.forum_2)
self.assertFalse(self._get_my_other_forums(self.forum_2))
# Check similarly with posting and also checking that we don't see forum of website 2
self.forum_post(self.env.user, self.forum_3)
self.forum_post(self.env.user, self.forum_1_website_2)
self.assertEqual(self._get_my_other_forums(self.forum_1), self.forum_2 + self.forum_3)
self.assertEqual(self._get_my_other_forums(self.forum_2), self.forum_3)
self.assertEqual(self._get_my_other_forums(self.forum_3), self.forum_2)
with self.with_user(user.login), MockRequest(self.env, website=self.website_2):
self.assertFalse(self._get_my_other_forums(None))
self.assertFalse(self._get_my_other_forums(True))
if user != self.user_public:
self.assertFalse(self._get_my_other_forums(self.forum_1_website_2))
self.assertEqual(self._get_my_other_forums(self.forum_2_website_2), self.forum_1_website_2)
employee_2_website_2_forum_2_post.favourite_ids += self.env.user
self.assertEqual(self._get_my_other_forums(self.forum_1_website_2), self.forum_2_website_2)