• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

liqd / adhocracy-plus / 18908688697

29 Oct 2025 12:59PM UTC coverage: 44.622% (-44.5%) from 89.135%
18908688697

Pull #2986

github

web-flow
Merge 1dfde8ee7 into 445e1d498
Pull Request #2986: Draft: Speed up Github Ci Tests

3012 of 6750 relevant lines covered (44.62%)

0.45 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

43.14
/apps/notifications/signals.py
1
from django.contrib.auth import get_user_model
1✔
2
from django.db.models import signals
1✔
3
from django.dispatch import receiver
1✔
4

5
from adhocracy4.actions.models import Action
1✔
6
from adhocracy4.actions.verbs import Verbs
1✔
7
from adhocracy4.dashboard import signals as dashboard_signals
1✔
8
from adhocracy4.follows.models import Follow
1✔
9
from adhocracy4.projects.models import Project
1✔
10
from apps.moderatorfeedback.models import ModeratorCommentFeedback
1✔
11

12
from . import emails
1✔
13

14
User = get_user_model()
1✔
15

16

17
@receiver(signals.post_save, sender=Action)
1✔
18
def send_notifications(instance, created, **kwargs):
1✔
19
    action = instance
×
20
    verb = Verbs(action.verb)
×
21

22
    if action.type in ("item", "comment") and verb in (Verbs.CREATE, Verbs.ADD):
×
23
        emails.NotifyCreatorEmail.send(action)
×
24

25
        if action.project:
×
26
            emails.NotifyModeratorsEmail.send(action)
×
27

28
    elif action.type == "phase":
×
29
        if verb == Verbs.START:
×
30
            emails.NotifyFollowersOnPhaseStartedEmail.send(action)
×
31
        elif verb == Verbs.SCHEDULE:
×
32
            emails.NotifyFollowersOnPhaseIsOverSoonEmail.send(action)
×
33

34
    elif action.type == "offlineevent" and verb == Verbs.START:
×
35
        emails.NotifyFollowersOnUpcommingEventEmail.send(action)
×
36

37

38
@receiver(dashboard_signals.project_created)
1✔
39
def send_project_created_notifications(**kwargs):
1✔
40
    project = kwargs.get("project")
×
41
    creator = kwargs.get("user")
×
42
    emails.NotifyInitiatorsOnProjectCreatedEmail.send(project, creator_pk=creator.pk)
×
43

44

45
@receiver(signals.post_delete, sender=Project)
1✔
46
def send_project_deleted_notifications(sender, instance, **kwargs):
1✔
47
    emails.NotifyInitiatorsOnProjectDeletedEmail.send_no_object(instance)
×
48

49

50
@receiver(signals.post_save, sender=ModeratorCommentFeedback)
1✔
51
def send_moderator_comment_feedback_notification(instance, **kwargs):
1✔
52
    emails.NotifyCreatorOnModeratorCommentFeedback.send(instance)
×
53

54

55
@receiver(signals.m2m_changed, sender=Project.moderators.through)
1✔
56
def autofollow_project_moderators(instance, action, pk_set, reverse, **kwargs):
1✔
57
    if action == "post_add":
×
58
        autofollow_project(instance, pk_set, reverse)
×
59

60

61
def autofollow_project(instance, pk_set, reverse):
1✔
62
    if not reverse:
×
63
        project = instance
×
64
        users_pks = pk_set
×
65

66
        for user_pk in users_pks:
×
67
            Follow.objects.update_or_create(
×
68
                project=project, creator_id=user_pk, defaults={"enabled": True}
69
            )
70
    else:
71
        user = instance
×
72
        project_pks = pk_set
×
73

74
        for project_pk in project_pks:
×
75
            Follow.objects.update_or_create(
×
76
                project_id=project_pk, creator=user, defaults={"enabled": True}
77
            )
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc