Skip to content

Commit

Permalink
[IMP] base_tier_validation_waiting: Use message_notify for notifications
Browse files Browse the repository at this point in the history
  • Loading branch information
BernatPForgeFlow committed Jul 4, 2024
1 parent 1c587fd commit eebd18b
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 30 deletions.
26 changes: 12 additions & 14 deletions base_tier_validation_waiting/models/tier_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,18 @@ class TierValidation(models.AbstractModel):

def _notify_review_available(self, tier_reviews):
"""method to notify when reaching pending"""
subscribe = "message_subscribe"
post = "message_post"
if hasattr(self, post) and hasattr(self, subscribe):
for rec in self.sudo():
users_to_notify = tier_reviews.filtered(
lambda r: r.definition_id.notify_on_pending and r.res_id == rec.id
).mapped("reviewer_ids")
# Subscribe reviewers and notify
getattr(rec, subscribe)(
partner_ids=users_to_notify.mapped("partner_id").ids
)
getattr(rec, post)(
subtype_xmlid=self._get_requested_notification_subtype(),
body=rec._notify_requested_review_body(),
for rec in self:
users_to_notify = tier_reviews.filtered(
lambda r: r.definition_id.notify_on_pending and r.res_id == rec.id
).mapped("reviewer_ids")
if users_to_notify:
self.env["mail.thread"].message_notify(
body=self._notify_requested_review_body(),
subject=self.display_name and "Re: %s" % self.display_name,
partner_ids=users_to_notify.mapped("partner_id.id"),
subtype_id=self.env.ref("mail.mt_comment").id,
mail_auto_delete=False,
email_layout_xmlid="mail.mail_notification_light",
)

def _validate_tier_waiting_reviews(self, tiers=False):
Expand Down
55 changes: 39 additions & 16 deletions base_tier_validation_waiting/tests/test_tier_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
from odoo.tests.common import TransactionCase, tagged

from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
from odoo.addons.base_tier_validation.tests.tier_validation_tester import (
TierValidationTester,
)


@tagged("post_install", "-at_install")
Expand All @@ -22,9 +25,6 @@ def setUpClass(cls):
)
cls.loader = FakeModelLoader(cls.env, cls.__module__)
cls.loader.backup_registry()
from odoo.addons.base_tier_validation.tests.tier_validation_tester import (
TierValidationTester,
)

cls.loader.update_registry((TierValidationTester,))
cls.test_model = cls.env[TierValidationTester._name].with_context(
Expand Down Expand Up @@ -121,24 +121,39 @@ def test_01_waiting_tier(self):
self.assertTrue(review_1.status == "waiting")
self.assertTrue(review_2.status == "waiting")
# and then normal workflow will follow...
notifications_user_1_no_1 = len(
self.env["mail.notification"].search(
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
)
)
review_1._compute_can_review()
self.assertTrue(review_1.status == "pending")
# first reviewer does not want notifications
# chatter should be empty
self.assertFalse(test_record.message_ids)
self.assertTrue(review_2.status == "waiting")
# first reviewer does not want notifications
notifications_user_1_no_2 = len(
self.env["mail.notification"].search(
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
)
)
self.assertEqual(notifications_user_1_no_2, notifications_user_1_no_1)
# First reviewer will approve and second will receive a pending notification
notifications_user_2_no_1 = len(
self.env["mail.notification"].search(
[("res_partner_id", "=", self.test_user_2.partner_id.id)]
)
)
record = test_record.with_user(self.test_user_1.id)
record.invalidate_model()
record.validate_tier()
self.assertTrue(review_1.status == "approved")
self.assertTrue(review_2.status == "pending")
# Check notify
msg = test_record.message_ids[0].body
request = test_record.with_user(
self.test_user_1.id
)._notify_requested_review_body()
self.assertIn(request, msg)
record.invalidate_model()
notifications_user_2_no_2 = len(
self.env["mail.notification"].search(
[("res_partner_id", "=", self.test_user_2.partner_id.id)]
)
)
self.assertEqual(notifications_user_2_no_2, notifications_user_2_no_1 + 1)
# Second approver will approve
record = test_record.with_user(self.test_user_2.id)
record.invalidate_model()
record.validate_tier()
Expand All @@ -153,8 +168,16 @@ def test_02_no_sequence(self):
self.assertTrue(review)
review_1 = tier_review_obj.browse(review.ids[0])
self.assertTrue(review_1.status == "waiting")
notifications_no_1 = len(
self.env["mail.notification"].search(
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
)
)
review_1._compute_can_review()
self.assertTrue(review_1.status == "pending")
msg2 = test_record2.message_ids[0].body
request = test_record2._notify_requested_review_body()
self.assertIn(request, msg2)
notifications_no_2 = len(
self.env["mail.notification"].search(
[("res_partner_id", "=", self.test_user_1.partner_id.id)]
)
)
self.assertEqual(notifications_no_2, notifications_no_1 + 1)

0 comments on commit eebd18b

Please sign in to comment.