Ejemplo n.º 1
0
    def test_task(self):
        # test invalid pk
        self.assertEqual(send_discussion_mail(4711), 1)

        # test empty mail address
        noti = Notification(user=self.user1, issue=self.issue1)
        noti.save()
        ntype = Notitype(type='NewIssue')
        ntype.save()
        noti.type.add(ntype)
        self.assertEqual(send_discussion_mail(noti.pk), 2)

        # test no notification necessary
        self.user1.email = 'mail'
        self.user1.save()
        self.assertEqual(send_discussion_mail(noti.pk), 3)
        self.user1.set_preference(
            'notify_mail', json.dumps({'PRJ': ['Mention', 'NewComment']}))
        self.assertEqual(send_discussion_mail(noti.pk), 3)

        # test mail send
        self.user1.set_preference(
            'notify_mail',
            json.dumps({'PRJ': ['Mention', 'NewComment', 'NewIssue']}))
        self.assertEqual(send_discussion_mail(noti.pk), 0)
        # assert that last mail sent goes to user1
        self.assertEqual(mail.outbox[len(mail.outbox) - 1].to, ['mail'])
Ejemplo n.º 2
0
def new_issue(sender, instance, created, *args, **kwargs):
    if created:
        if instance.creator:
            instance.participant.add(instance.creator)
        for user in instance.project.get_members():
            if not user == instance.creator:
                noti = Notification(user=user, issue=instance)
                noti.save()
                noti_type = Notitype(type='NewIssue')
                noti_type.save()
                noti.type.add(noti_type)
Ejemplo n.º 3
0
def scan_mentions(sender, instance, **kwargs):
    members = instance.issue.project.get_members()
    mentions = re.findall(r"@\w+", instance.text)
    for mention in list(set(mentions)):
        username = mention[1:]
        if members.filter(username=username).exists():
            noti = members.get(username=username).notifications.filter(
                issue=instance.issue).first()
            if not noti:
                noti = Notification(user=members.get(username=username),
                                    issue=instance.issue)
                noti.save()
            noti_type = Notitype(type='Mention', comment=instance)
            noti_type.save()
            prev_noti_type = noti.type.filter(comment=instance)
            if prev_noti_type:
                for prevs in prev_noti_type:
                    noti.type.remove(prevs)
            noti.type.add(noti_type)
        elif username == 'all':
            for user in members.exclude(username=instance.creator.username):
                noti = user.notifications.filter(issue=instance.issue).first()
                if not noti:
                    noti = Notification(user=user, issue=instance.issue)
                    noti.save()
                noti_type = Notitype(type='Mention', comment=instance)
                noti_type.save()
                prev_noti_type = noti.type.filter(comment=instance)
                if prev_noti_type:
                    for prevs in prev_noti_type:
                        noti.type.remove(prevs)
                noti.type.add(noti_type)
Ejemplo n.º 4
0
def new_discussion_entry(sender, instance, created, *args, **kwargs):
    for user in instance.issue.participant.all():
        if not user == instance.creator:
            noti = Notification.objects.filter(user=user,
                                               issue=instance.issue).first()
            if not noti:
                noti = Notification(user=user, issue=instance.issue)
                noti.save()
            if sender == Comment and created:
                prev_noti_type = noti.type.filter(comment=instance,
                                                  type='Mention')
                if prev_noti_type:
                    continue
                noti_type = Notitype(type='NewComment', comment=instance)
                noti_type.save()
                noti.type.add(noti_type)
            elif sender == Comment:
                noti_type = Notitype(type='EditComment', comment=instance)
                noti_type.save()
                prev_noti_type = noti.type.filter(comment=instance,
                                                  type='NewComment')
                if prev_noti_type:
                    for prevs in prev_noti_type:
                        noti.type.remove(prevs)
                prev_noti_type = noti.type.filter(comment=instance,
                                                  type='EditComment')
                if prev_noti_type:
                    for prevs in prev_noti_type:
                        noti.type.remove(prevs)
                prev_noti_type = noti.type.filter(comment=instance,
                                                  type='Mention')
                if prev_noti_type:
                    continue
                noti.type.add(noti_type)
            else:
                noti_type = Notitype(type='NewAttachment')
                noti_type.save()
                noti.type.add(noti_type)
    instance.issue.participant.add(instance.creator)