Purpose of this commit is to add some statistics computation on slide.channel
model. We want notably to have a count of views and votes (likes and dislikes)
on channels. Completion is also computed.
Purpose is to be able to search and order channels based on those statistics.
Having stored computed fields for some statistics help achieving that purpose.
Tests are added.
This commit is linked to task ID 1936153 and PR #30985.
69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from contextlib import contextmanager
|
|
from functools import partial
|
|
|
|
from odoo.tests import common, new_test_user
|
|
|
|
slides_new_test_user = partial(new_test_user, context={'mail_create_nolog': True, 'mail_create_nosubscribe': True, 'mail_notrack': True, 'no_reset_password': True})
|
|
|
|
|
|
class SlidesCase(common.SavepointCase):
|
|
|
|
def setUp(self):
|
|
super(SlidesCase, self).setUp()
|
|
|
|
self.user_publisher = slides_new_test_user(
|
|
self.env, name='Paul Publisher', login='user_publisher', email='publisher@example.com',
|
|
groups='base.group_user,website.group_website_publisher'
|
|
)
|
|
|
|
self.user_emp = slides_new_test_user(
|
|
self.env, name='Eglantine Employee', login='user_emp', email='employee@example.com',
|
|
groups='base.group_user'
|
|
)
|
|
|
|
self.user_portal = slides_new_test_user(
|
|
self.env, name='Patrick Portal', login='user_portal', email='portal@example.com',
|
|
groups='base.group_portal'
|
|
)
|
|
|
|
self.user_public = slides_new_test_user(
|
|
self.env, name='Pauline Public', login='user_public', email='public@example.com',
|
|
groups='base.group_public'
|
|
)
|
|
|
|
self.customer = self.env['res.partner'].create({
|
|
'name': 'Caroline Customer',
|
|
'email': 'customer@example.com',
|
|
'customer': True,
|
|
})
|
|
|
|
self.channel = self.env['slide.channel'].sudo(self.user_publisher).create({
|
|
'name': 'Test Channel',
|
|
'promote_strategy': 'most_voted',
|
|
'visibility': 'public',
|
|
'website_published': True,
|
|
})
|
|
self.slide = self.env['slide.slide'].sudo(self.user_publisher).create({
|
|
'name': 'How To Cook Humans',
|
|
'channel_id': self.channel.id,
|
|
'slide_type': 'presentation',
|
|
'website_published': True,
|
|
'completion_time': 2.0,
|
|
})
|
|
|
|
@contextmanager
|
|
def sudo(self, user):
|
|
""" Quick sudo environment """
|
|
old_uid = self.uid
|
|
try:
|
|
self.uid = user.id
|
|
self.env = self.env(user=self.uid)
|
|
yield
|
|
finally:
|
|
# back
|
|
self.uid = old_uid
|
|
self.env = self.env(user=self.uid)
|