def mail(self, template, subject, context={}, to=[], request=None): from tcms.core.mailto import mailto if not to: to = self.author.email to = list(set(to)) mailto(template, subject, to, context, request=request)
def test_also_send_mail_to_addresses_for_debug(self): with patch.object(settings, 'DEBUG', new=True): with patch.object(settings, 'EMAILS_FOR_DEBUG', new=['cotester@localhost']): mailto('mail_template', 'Start Test', ['tester@localhost']) self.assertListEqual(['cotester@localhost', 'tester@localhost'], sorted(mail.outbox[0].recipients()))
def _sendmail(self): mail_context = TestCase.mail_scene(objects=self._update_objects, field=self.target_field, value=self.new_value) if mail_context: from tcms.core.mailto import mailto mail_context['context']['user'] = self.request.user mailto(**mail_context)
def email_plan_update(plan): recipients = get_plan_notification_recipients(plan) if len(recipients) == 0: return subject = 'TestPlan %s has been updated.' % plan.pk mailto(settings.PLAN_EMAIL_TEMPLATE, subject, recipients, context={'plan': plan})
def send_confirm_mail(self, request, active_key, template_name='registration/confirm_email.html'): from django.urls import reverse from django.contrib.sites.models import Site from tcms.core.mailto import mailto from tcms.core.utils import request_host_link s = Site.objects.get_current() cu = '{}{}'.format( request_host_link(request, s.domain), reverse('nitrate-activation-confirm', args=[active_key.activation_key])) mailto(template_name=template_name, recipients=self.cleaned_data['email'], subject='Your new %s account confirmation' % s.domain, context={ 'user': self.instance, 'site': s, 'active_key': active_key, 'confirm_url': cu, })
def test_log_traceback_when_error_is_raised_from_send( self, logger, EmailMessage): EmailMessage.return_value.send.side_effect = smtplib.SMTPException mailto('mail_template', 'Start Test', ['tester@localhost']) logger.exception.assert_called_once()
def test_recipients_accept_non_sequence_value(self): mailto('mail_template', 'Start Test', 'tester@localhost') self.assertEqual('tester@localhost', mail.outbox[0].recipients()[0])
def test_send_mail(self): mailto('mail_template', 'Start Test', ['tester@localhost']) self.assertEqual('Start Test', mail.outbox[0].subject)
def update_case_run_status(request): """Update Case Run status.""" now = datetime.datetime.now() data = request.POST.copy() ctype = data.get("content_type") vtype = data.get('value_type', 'str') object_pk_str = data.get("object_pk") field = data.get('field') value = data.get('value') object_pk = [int(a) for a in object_pk_str.split(',')] if not field or not value or not object_pk or not ctype: return say_no('Following fields are required - content_type, ' 'object_pk, field and value.') # Convert the value type # FIXME: Django bug here: update() keywords must be strings field = str(field) value, error = get_value_by_type(value, vtype) if error: return say_no(error) has_perms = check_permission(request, ctype) if not has_perms: return say_no('Permission Dinied.') model = utils.get_model(ctype) targets = model._default_manager.filter(pk__in=object_pk) if not targets: return say_no('No record found') if not hasattr(targets[0], field): return say_no(f'{ctype} has no field {field}') if hasattr(targets[0], 'log_action'): for t in targets: try: t.log_action(who=request.user, field=field, original_value=getattr(t, field), new_value=TestCaseRunStatus.id_to_name(value)) except (AttributeError, User.DoesNotExist): pass objects_update(targets, **{field: value}) if hasattr(model, 'mail_scene'): from tcms.core.mailto import mailto mail_context = model.mail_scene( objects=targets, field=field, value=value, ctype=ctype, object_pk=object_pk, ) if mail_context: mail_context['context']['user'] = request.user mailto(**mail_context) # Special hacking for updating test case run status if ctype == 'testruns.testcaserun' and field == 'case_run_status': for t in targets: field = 'close_date' t.log_action(who=request.user, field=field, original_value=getattr(t, field) or '', new_value=now) if t.tested_by != request.user: field = 'tested_by' t.log_action(who=request.user, field=field, original_value=getattr(t, field) or '', new_value=request.user) field = 'assignee' try: assignee = t.assginee if assignee != request.user: t.log_action(who=request.user, field=field, original_value=getattr(t, field) or '', new_value=request.user) # t.assignee = request.user t.save() except (AttributeError, User.DoesNotExist): pass targets.update(close_date=now, tested_by=request.user) return HttpResponse(json.dumps({'rc': 0, 'response': 'ok'}))
def update(request): """Generic approach to update a model, based on contenttype.""" now = datetime.datetime.now() data = request.POST.copy() ctype = data.get("content_type") vtype = data.get('value_type', 'str') object_pk_str = data.get("object_pk") field = data.get('field') value = data.get('value') object_pk = [int(a) for a in object_pk_str.split(',')] if not field or not value or not object_pk or not ctype: return JsonResponseBadRequest({ 'message': 'Following fields are required - ' 'content_type, object_pk, field and value.' }) # Convert the value type # FIXME: Django bug here: update() keywords must be strings field = str(field) value, error = get_value_by_type(value, vtype) if error: return JsonResponseBadRequest({'message': error}) has_perms = check_permission(request, ctype) if not has_perms: return JsonResponseForbidden({'message': 'Permission Denied.'}) model = utils.get_model(ctype) targets = model._default_manager.filter(pk__in=object_pk) if not targets: return JsonResponseBadRequest({'message': 'No record found'}) if not hasattr(targets[0], field): return JsonResponseBadRequest( {'message': f'{ctype} has no field {field}'}) if hasattr(targets[0], 'log_action'): for t in targets: try: log_info = { 'who': request.user, 'field': field, 'new_value': value, } original_value = getattr(t, field) if original_value is None: log_info['original_value'] = 'None' t.log_action(**log_info) except (AttributeError, User.DoesNotExist): pass objects_update(targets, **{field: value}) if hasattr(model, 'mail_scene'): mail_context = model.mail_scene( objects=targets, field=field, value=value, ctype=ctype, object_pk=object_pk, ) if mail_context: from tcms.core.mailto import mailto mail_context['context']['user'] = request.user mailto(**mail_context) # Special hacking for updating test case run status if ctype == 'testruns.testcaserun' and field == 'case_run_status': for t in targets: field = 'close_date' t.log_action(who=request.user, field=field, original_value=getattr(t, field), new_value=now) if t.tested_by != request.user: field = 'tested_by' t.log_action(who=request.user, field=field, original_value=getattr(t, field), new_value=request.user) field = 'assignee' try: assignee = t.assginee if assignee != request.user: t.log_action(who=request.user, field=field, original_value=getattr(t, field), new_value=request.user) # t.assignee = request.user t.save() except (AttributeError, User.DoesNotExist): pass targets.update(close_date=now, tested_by=request.user) return JsonResponse({})
def email_case_deletion(case): notify_recipients( case, f'TestCase {case.pk} has been deleted.', {'case': case}, ) def notify_recipients(case, subject, context): recipients = get_case_notification_recipients(case) cc = case.emailing.get_cc_list() if len(recipients) == 0: return template = settings.CASE_EMAIL_TEMPLATE mailto(template, subject, recipients, context, cc=cc) def get_case_notification_recipients(case): recipients = set() if case.emailing.auto_to_case_author: recipients.add(case.author.email) if case.emailing.auto_to_case_tester and case.default_tester: recipients.add(case.default_tester.email) if case.emailing.auto_to_run_manager: managers = case.case_run.values_list('run__manager__email', flat=True) recipients.update(managers) if case.emailing.auto_to_run_tester: run_testers = case.case_run.values_list('run__default_tester__email', flat=True) recipients.update(run_testers)
def mail(self, template, subject, context, to=[], request=None): from tcms.core.mailto import mailto to = self.get_notify_addrs() mailto(template, subject, to, context, request=request)