Coverage for src/products/signals.py: 77%
13 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-08-04 12:59 +0300
« prev ^ index » next coverage.py v7.9.2, created at 2025-08-04 12:59 +0300
1from django.conf import settings
3from django.db.models.signals import post_save
4from django.dispatch import receiver
5from django.template.loader import render_to_string
6from django.utils.html import strip_tags
8from src.common.tasks import _send_email
9from src.products.models.review import Review
12@receiver(signal=post_save, sender=Review)
13def send_approval_email_notification(sender, instance, created, **kwargs):
14 if not created and instance.approved:
15 # delay -> comes from the decorator `@shared_task`; the `delay` method informs Celery
16 # to put the task into a Redis queue and execute it when there is an available worker
17 html_message = render_to_string(
18 'mailer/review-approved.html', {'user': instance.user.username}
19 )
20 plain_message = strip_tags(html_message)
22 _send_email.delay(
23 subject='Your product review has been approved!',
24 message=plain_message,
25 html_message=html_message,
26 from_email=settings.EMAIL_HOST_USER,
27 recipient_list=(instance.user.email,),
28 )