diff options
| author | Thibault Delavallée <tde@odoo.com> | 2019-11-05 15:01:03 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2019-11-05 15:08:34 +0000 |
| commit | c5b7e000656d8872d434e37517b0c6d9d29ffe05 (patch) | |
| tree | 0bdd6c846aea574c63538b9269c305df9c36fac5 /addons/gamification | |
| parent | 60bd39ae38c5e320b3e2ab4c267db594345e6f1b (diff) | |
[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
Diffstat (limited to 'addons/gamification')
| -rw-r--r-- | addons/gamification/tests/__init__.py | 1 | ||||
| -rw-r--r-- | addons/gamification/tests/test_karma_tracking.py | 120 | ||||
| -rw-r--r-- | addons/gamification/tests/test_recompute_rank.py | 128 |
3 files changed, 120 insertions, 129 deletions
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() |
