From c5b7e000656d8872d434e37517b0c6d9d29ffe05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 5 Nov 2019 15:01:03 +0000 Subject: [PATCH] [IMP] gamification: merge karma related tests in the same file and improve rank tests Purpose is to have all karma related tests in the same file to ease finding them back. Some tweaking is also done like using a savepoint case and ensuring tests can always be re-run. LINKS Task ID 2003505 PR #34594 --- addons/gamification/tests/__init__.py | 1 - .../gamification/tests/test_karma_tracking.py | 120 ++++++++++++++++ .../gamification/tests/test_recompute_rank.py | 128 ------------------ 3 files changed, 120 insertions(+), 129 deletions(-) delete mode 100644 addons/gamification/tests/test_recompute_rank.py diff --git a/addons/gamification/tests/__init__.py b/addons/gamification/tests/__init__.py index 963887eb670..0017420114f 100644 --- a/addons/gamification/tests/__init__.py +++ b/addons/gamification/tests/__init__.py @@ -2,5 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import test_challenge -from . import test_recompute_rank from . import test_karma_tracking diff --git a/addons/gamification/tests/test_karma_tracking.py b/addons/gamification/tests/test_karma_tracking.py index 145b745b436..3bbd904a86b 100644 --- a/addons/gamification/tests/test_karma_tracking.py +++ b/addons/gamification/tests/test_karma_tracking.py @@ -193,3 +193,123 @@ class TestKarmaTrackingCommon(common.SavepointCase): self.assertEqual(user.karma_tracking_ids[1].new_value, 60) self.assertEqual(user.karma_tracking_ids[0].old_value, 0) self.assertEqual(user.karma_tracking_ids[0].new_value, 32) + + +class TestComputeRankCommon(common.SavepointCase): + + @classmethod + def setUpClass(cls): + super(TestComputeRankCommon, cls).setUpClass() + + def _patched_send_mail(*args, **kwargs): + pass + + patch_email = patch('odoo.addons.mail.models.mail_template.MailTemplate.send_mail', _patched_send_mail) + patch_email.start() + + cls.users = cls.env['res.users'] + for k in range(-5, 1030, 30): + cls.users += cls.env['res.users'].with_context(no_reset_password=True, mail_create_nosubscribe=True).create({ + 'name': str(k), + 'login': "test_recompute_rank_%s" % k, + 'karma': k, + }) + + cls.env['gamification.karma.rank'].search([]).unlink() + + cls.rank_1 = cls.env['gamification.karma.rank'].create({ + 'name': 'rank 1', + 'karma_min': 0, + }) + + cls.rank_2 = cls.env['gamification.karma.rank'].create({ + 'name': 'rank 2', + 'karma_min': 250, + }) + + cls.rank_3 = cls.env['gamification.karma.rank'].create({ + 'name': 'rank 3', + 'karma_min': 500, + }) + cls.rank_4 = cls.env['gamification.karma.rank'].create({ + 'name': 'rank 4', + 'karma_min': 1000, + }) + + patch_email.stop() + + def test_00_initial_compute(self): + + self.assertEqual(len(self.users), 35) + + self.assertEqual( + len(self.rank_1.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_1.karma_min and u.karma < self.rank_2.karma_min]) + ) + self.assertEqual( + len(self.rank_2.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_2.karma_min and u.karma < self.rank_3.karma_min]) + ) + self.assertEqual( + len(self.rank_3.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_3.karma_min and u.karma < self.rank_4.karma_min]) + ) + self.assertEqual( + len(self.rank_4.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_4.karma_min]) + ) + + def test_01_switch_rank(self): + + self.assertEqual(len(self.users), 35) + + self.rank_3.karma_min = 100 + # rank_1 -> rank_3 -> rank_2 -> rank_4 + + self.assertEqual( + len(self.rank_1.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_1.karma_min and u.karma < self.rank_3.karma_min]) + ) + self.assertEqual( + len(self.rank_3.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_3.karma_min and u.karma < self.rank_2.karma_min]) + ) + self.assertEqual( + len(self.rank_2.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_2.karma_min and u.karma < self.rank_4.karma_min]) + ) + self.assertEqual( + len(self.rank_4.user_ids & self.users), + len([u for u in self.users if u.karma >= self.rank_4.karma_min]) + ) + + def test_02_update_rank_without_switch(self): + number_of_users = False + + def _patched_recompute_rank(_self, *args, **kwargs): + nonlocal number_of_users + number_of_users = len(_self & self.users) + + patch_bulk = patch('odoo.addons.gamification.models.res_users.Users._recompute_rank', _patched_recompute_rank) + patch_bulk.start() + self.rank_3.karma_min = 700 + self.assertEqual(number_of_users, 7, "Should just recompute for the 7 users between 500 and 700") + patch_bulk.stop() + + def test_03_test_bulk_call(self): + self.assertEqual(len(self.users), 35) + + def _patched_check_in_bulk(*args, **kwargs): + raise + + patch_bulk = patch('odoo.addons.gamification.models.res_users.Users._recompute_rank_bulk', _patched_check_in_bulk) + patch_bulk.start() + + # call on 5 users should not trigger the bulk function + self.users[0:5]._recompute_rank() + + # call on 50 users should trigger the bulk function + with self.assertRaises(Exception): + self.users[0:50]._recompute_rank() + + patch_bulk.stop() diff --git a/addons/gamification/tests/test_recompute_rank.py b/addons/gamification/tests/test_recompute_rank.py deleted file mode 100644 index c82fb4759fd..00000000000 --- a/addons/gamification/tests/test_recompute_rank.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo.tests import common -from unittest.mock import patch - - -class TestComputeRankCommon(common.TransactionCase): - - def setUp(self): - super(TestComputeRankCommon, self).setUp() - - def _patched_send_mail(*args, **kwargs): - pass - - self.User = self.env['res.users'].with_context(no_reset_password=True, mail_create_nosubscribe=True) - self.users = self.User - - patch_email = patch('odoo.addons.mail.models.mail_template.MailTemplate.send_mail', _patched_send_mail) - patch_email.start() - for k in range(-5, 1030, 30): - self.users += self.User.create({ - 'name': str(k), - 'login': "test_recompute_rank_%s" % k, - 'karma': k, - }) - - self.env['gamification.karma.rank'].search([]).unlink() - - self.rank_1 = self.env['gamification.karma.rank'].create({ - 'name': 'rank 1', - 'karma_min': 0, - }) - - self.rank_2 = self.env['gamification.karma.rank'].create({ - 'name': 'rank 2', - 'karma_min': 250, - }) - - self.rank_3 = self.env['gamification.karma.rank'].create({ - 'name': 'rank 3', - 'karma_min': 500, - }) - self.rank_4 = self.env['gamification.karma.rank'].create({ - 'name': 'rank 4', - 'karma_min': 1000, - }) - - patch_email.stop() - - -class test_recompute(TestComputeRankCommon): - - def test_00_initial_compute(self): - - self.assertEqual(len(self.users), 35) - - self.assertEqual( - len(self.rank_1.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_1.karma_min and u.karma < self.rank_2.karma_min]) - ) - self.assertEqual( - len(self.rank_2.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_2.karma_min and u.karma < self.rank_3.karma_min]) - ) - self.assertEqual( - len(self.rank_3.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_3.karma_min and u.karma < self.rank_4.karma_min]) - ) - self.assertEqual( - len(self.rank_4.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_4.karma_min]) - ) - - def test_01_switch_rank(self): - - self.assertEqual(len(self.users), 35) - - self.rank_3.karma_min = 100 - # rank_1 -> rank_3 -> rank_2 -> rank_4 - - self.assertEqual( - len(self.rank_1.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_1.karma_min and u.karma < self.rank_3.karma_min]) - ) - self.assertEqual( - len(self.rank_3.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_3.karma_min and u.karma < self.rank_2.karma_min]) - ) - self.assertEqual( - len(self.rank_2.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_2.karma_min and u.karma < self.rank_4.karma_min]) - ) - self.assertEqual( - len(self.rank_4.user_ids & self.users), - len([u for u in self.users if u.karma >= self.rank_4.karma_min]) - ) - - def test_02_update_rank_without_switch(self): - number_of_users = False - - def _patched_recompute_rank(_self, *args, **kwargs): - nonlocal number_of_users - number_of_users = len(_self & self.users) - - patch_bulk = patch('odoo.addons.gamification.models.res_users.Users._recompute_rank', _patched_recompute_rank) - patch_bulk.start() - self.rank_3.karma_min = 700 - self.assertEqual(number_of_users, 7, "Should just recompute for the 7 users between 500 and 700") - patch_bulk.stop() - - def test_03_test_bulk_call(self): - self.assertEqual(len(self.users), 35) - - def _patched_check_in_bulk(*args, **kwargs): - raise - - patch_bulk = patch('odoo.addons.gamification.models.res_users.Users._recompute_rank_bulk', _patched_check_in_bulk) - patch_bulk.start() - - # call on 5 users should not trigger the bulk function - self.users[0:5]._recompute_rank() - - # call on 50 users should trigger the bulk function - with self.assertRaises(Exception): - self.users[0:50]._recompute_rank() - - patch_bulk.stop()