Source code for tcms.testcases.helpers.email

# -*- coding: utf-8 -*-
from django.utils.translation import gettext_lazy as _

from tcms.core.history import history_email_for
from tcms.core.utils.mailto import mailto


[docs] def email_case_created(case): recipients = get_case_notification_recipients(case) if not recipients: return cc_list = case.emailing.get_cc_list() subject = _("NEW: TestCase #%(pk)d - %(summary)s") % { "pk": case.pk, "summary": case.summary, } body = ( _("""Test case %(pk)d has been created. ### Basic information ### Summary: %(summary)s Product: %(product)s Category: %(category)s Priority: %(priority)s Default tester: %(default_tester)s Text: %(text)s""") % { "pk": case.pk, "summary": case.summary, "product": case.category.product.name, "category": case.category.name, "priority": case.priority.value, "default_tester": case.default_tester, "text": case.text, } ) mailto(None, subject, recipients, body, cc=cc_list)
[docs] def email_case_update(case): recipients = get_case_notification_recipients(case) if not recipients: return cc_list = case.emailing.get_cc_list() subject, body = history_email_for(case, case.summary) mailto(None, subject, recipients, body, cc=cc_list)
[docs] def email_case_deletion(case): recipients = get_case_notification_recipients(case) cc_list = case.emailing.get_cc_list() if not recipients: return subject = _("DELETED: TestCase #%(pk)d - %(summary)s") % { "pk": case.pk, "summary": case.summary, } context = {"case": case} mailto("email/post_case_delete/email.txt", subject, recipients, context, cc=cc_list)
[docs] def get_case_notification_recipients(case): recipients = set() if case.emailing.auto_to_case_author and case.author.is_active: recipients.add(case.author.email) if ( case.emailing.auto_to_case_tester and case.default_tester and case.default_tester.is_active ): recipients.add(case.default_tester.email) if case.emailing.auto_to_run_manager: managers = case.executions.filter(run__manager__is_active=True).values_list( "run__manager__email", flat=True ) recipients.update(managers) # pylint: disable=objects-update-used if case.emailing.auto_to_run_tester: run_testers = case.executions.filter( run__default_tester__is_active=True ).values_list("run__default_tester__email", flat=True) recipients.update(run_testers) # pylint: disable=objects-update-used if case.emailing.auto_to_execution_assignee: assignees = case.executions.filter(assignee__is_active=True).values_list( "assignee__email", flat=True ) recipients.update(assignees) # pylint: disable=objects-update-used # don't email author of last change recipients.discard(getattr(case.history.latest().history_user, "email", "")) return list(filter(None, recipients))