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

1from django.conf import settings 

2 

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 

7 

8from src.common.tasks import _send_email 

9from src.products.models.review import Review 

10 

11 

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) 

21 

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 )