64 lines
3.7 KiB
Python
64 lines
3.7 KiB
Python
|
# -*- 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)
|