summaryrefslogtreecommitdiff
path: root/addons/website_slides/tests/test_statistics.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_slides/tests/test_statistics.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_slides/tests/test_statistics.py')
-rw-r--r--addons/website_slides/tests/test_statistics.py183
1 files changed, 183 insertions, 0 deletions
diff --git a/addons/website_slides/tests/test_statistics.py b/addons/website_slides/tests/test_statistics.py
new file mode 100644
index 00000000..79f0745a
--- /dev/null
+++ b/addons/website_slides/tests/test_statistics.py
@@ -0,0 +1,183 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import math
+
+from dateutil.relativedelta import relativedelta
+
+from odoo import fields
+from odoo.addons.website_slides.tests import common
+from odoo.exceptions import UserError
+from odoo.tests import tagged
+from odoo.tests.common import users
+from odoo.tools import mute_logger, float_compare
+
+
+@tagged('functional')
+class TestChannelStatistics(common.SlidesCase):
+
+ @mute_logger('odoo.models')
+ def test_channel_new_content(self):
+ (self.slide | self.slide_2).write({'date_published': fields.Datetime.now() + relativedelta(days=-6)})
+ self.slide_3.write({'date_published': fields.Datetime.now() + relativedelta(days=-8)})
+ self.assertTrue(all(slide.is_new_slide for slide in (self.slide | self.slide_2)))
+ self.assertFalse(self.slide_3.is_new_slide)
+
+ channel_aspublisher = self.channel.with_user(self.user_officer)
+ self.assertTrue(channel_aspublisher.partner_has_new_content)
+ (self.slide | self.slide_2).with_user(self.user_officer).action_set_completed()
+ self.assertFalse(channel_aspublisher.partner_has_new_content)
+
+ channel_aspublisher._action_add_members(self.user_portal.partner_id)
+ channel_asportal = self.channel.with_user(self.user_portal)
+ self.assertTrue(channel_asportal.partner_has_new_content)
+
+ (self.slide | self.slide_2).write({'date_published': fields.Datetime.now() + relativedelta(days=-8)})
+ channel_asportal.invalidate_cache(['partner_has_new_content'])
+ self.assertFalse(channel_asportal.partner_has_new_content)
+
+ @mute_logger('odoo.models')
+ def test_channel_statistics(self):
+ channel_publisher = self.channel.with_user(self.user_officer)
+ # slide type computation
+ self.assertEqual(channel_publisher.total_slides, len(channel_publisher.slide_content_ids))
+ self.assertEqual(channel_publisher.nbr_infographic, len(channel_publisher.slide_content_ids.filtered(lambda s: s.slide_type == 'infographic')))
+ self.assertEqual(channel_publisher.nbr_presentation, len(channel_publisher.slide_content_ids.filtered(lambda s: s.slide_type == 'presentation')))
+ self.assertEqual(channel_publisher.nbr_document, len(channel_publisher.slide_content_ids.filtered(lambda s: s.slide_type == 'document')))
+ self.assertEqual(channel_publisher.nbr_video, len(channel_publisher.slide_content_ids.filtered(lambda s: s.slide_type == 'video')))
+ # slide statistics computation
+ self.assertEqual(float_compare(channel_publisher.total_time, sum(s.completion_time for s in channel_publisher.slide_content_ids), 3), 0)
+ # members computation
+ self.assertEqual(channel_publisher.members_count, 1)
+ channel_publisher.action_add_member()
+ self.assertEqual(channel_publisher.members_count, 1)
+ channel_publisher._action_add_members(self.user_emp.partner_id)
+ channel_publisher.invalidate_cache(['partner_ids'])
+ self.assertEqual(channel_publisher.members_count, 2)
+ self.assertEqual(channel_publisher.partner_ids, self.user_officer.partner_id | self.user_emp.partner_id)
+
+ @mute_logger('odoo.models')
+ def test_channel_user_statistics(self):
+ channel_publisher = self.channel.with_user(self.user_officer)
+ channel_publisher.write({
+ 'enroll': 'invite',
+ })
+ channel_publisher._action_add_members(self.user_emp.partner_id)
+ channel_emp = self.channel.with_user(self.user_emp)
+
+ slides_emp = (self.slide | self.slide_2).with_user(self.user_emp)
+ slides_emp.action_set_viewed()
+ self.assertEqual(channel_emp.completion, 0)
+
+ slides_emp.action_set_completed()
+ channel_emp.invalidate_cache()
+ self.assertEqual(
+ channel_emp.completion,
+ math.ceil(100.0 * len(slides_emp) / len(channel_publisher.slide_content_ids)))
+ self.assertFalse(channel_emp.completed)
+
+ self.slide_3.with_user(self.user_emp).action_set_completed()
+ self.assertEqual(channel_emp.completion, 100)
+ self.assertTrue(channel_emp.completed)
+
+ self.slide_3.is_published = False
+ self.assertEqual(channel_emp.completion, 100)
+ self.assertTrue(channel_emp.completed)
+
+ self.slide_3.is_published = True
+ self.slide_3.active = False
+ self.assertEqual(channel_emp.completion, 100)
+ self.assertTrue(channel_emp.completed)
+
+ @mute_logger('odoo.models')
+ def test_channel_user_statistics_complete_check_member(self):
+ slides = (self.slide | self.slide_2)
+ slides.write({'is_preview': True})
+ slides.flush(['is_preview'])
+ slides_emp = slides.with_user(self.user_emp)
+ slides_emp.read(['name'])
+ with self.assertRaises(UserError):
+ slides_emp.action_set_completed()
+
+ @mute_logger('odoo.models')
+ def test_channel_user_statistics_view_check_member(self):
+ slides = (self.slide | self.slide_2)
+ slides.write({'is_preview': True})
+ slides.flush(['is_preview'])
+ slides_emp = slides.with_user(self.user_emp)
+ slides_emp.read(['name'])
+ with self.assertRaises(UserError):
+ slides_emp.action_set_viewed()
+
+
+@tagged('functional')
+class TestSlideStatistics(common.SlidesCase):
+
+ def test_slide_user_statistics(self):
+ channel_publisher = self.channel.with_user(self.user_officer)
+ channel_publisher._action_add_members(self.user_emp.partner_id)
+ channel_publisher.invalidate_cache(['partner_ids'])
+
+ slide_emp = self.slide.with_user(self.user_emp)
+ self.assertEqual(slide_emp.likes, 0)
+ self.assertEqual(slide_emp.dislikes, 0)
+ self.assertEqual(slide_emp.user_vote, 0)
+ slide_emp.action_like()
+ self.assertEqual(slide_emp.likes, 1)
+ self.assertEqual(slide_emp.dislikes, 0)
+ self.assertEqual(slide_emp.user_vote, 1)
+ slide_emp.action_dislike()
+ self.assertEqual(slide_emp.likes, 0)
+ self.assertEqual(slide_emp.dislikes, 0)
+ self.assertEqual(slide_emp.user_vote, 0)
+ slide_emp.action_dislike()
+ self.assertEqual(slide_emp.likes, 0)
+ self.assertEqual(slide_emp.dislikes, 1)
+ self.assertEqual(slide_emp.user_vote, -1)
+
+ def test_slide_statistics_views(self):
+ channel_publisher = self.channel.with_user(self.user_officer)
+ channel_publisher._action_add_members(self.user_emp.partner_id)
+
+ self.assertEqual(self.slide.slide_views, 0)
+ self.assertEqual(self.slide.public_views, 0)
+
+ self.slide.write({'public_views': 4})
+
+ self.assertEqual(self.slide.slide_views, 0)
+ self.assertEqual(self.slide.public_views, 4)
+ self.assertEqual(self.slide.total_views, 4)
+
+ slide_emp = self.slide.with_user(self.user_emp)
+ slide_emp.action_set_viewed()
+
+ self.assertEqual(slide_emp.slide_views, 1)
+ self.assertEqual(slide_emp.public_views, 4)
+ self.assertEqual(slide_emp.total_views, 5)
+
+ @users('user_officer')
+ def test_slide_statistics_types(self):
+ category = self.category.with_user(self.env.user)
+ self.assertEqual(
+ category.nbr_presentation,
+ len(category.channel_id.slide_ids.filtered(lambda s: s.category_id == category and s.slide_type == 'presentation')))
+ self.assertEqual(
+ category.nbr_document,
+ len(category.channel_id.slide_ids.filtered(lambda s: s.category_id == category and s.slide_type == 'document')))
+
+ self.assertEqual(self.channel.total_slides, 3, 'The channel should contain 3 slides')
+ self.assertEqual(category.total_slides, 2, 'The first category should contain 2 slides')
+ other_category = self.env['slide.slide'].with_user(self.user_officer).create({
+ 'name': 'Other Category',
+ 'channel_id': self.channel.id,
+ 'is_category': True,
+ 'is_published': True,
+ 'sequence': 5,
+ })
+ self.assertEqual(other_category.total_slides, 0, 'The other category should not contain any slide yet')
+
+ # move one of the slide to the other category
+ self.slide_3.write({'sequence': 6})
+ self.assertEqual(category.total_slides, 1, 'The first category should contain 1 slide')
+ self.assertEqual(other_category.total_slides, 1, 'The other category should contain 1 slide')
+ self.assertEqual(self.channel.total_slides, 3, 'The channel should still contain 3 slides')