Skip to content

Commit 517de2f

Browse files
authored
Merge pull request #174 from pneumaticapp/backend/notifications/44797__email_notifications_not_sent_group_user
44797 backend [ notifications ] "Overdue task" email is not sent if the assigning user belongs to a group.
2 parents a36d68e + 60a0f8a commit 517de2f

2 files changed

Lines changed: 67 additions & 8 deletions

File tree

backend/src/notifications/queries.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from src.generics.mixins.queries import DereferencedPerformersMixin
77
from src.notifications.enums import NotificationMethod
88
from src.processes.enums import (
9-
DirectlyStatus,
109
TaskStatus,
1110
WorkflowStatus,
1211
)
@@ -17,7 +16,7 @@
1716
UserModel = get_user_model()
1817

1918

20-
class UsersWithOverdueTaskQuery(SqlQueryObject):
19+
class UsersWithOverdueTaskQuery(SqlQueryObject, DereferencedPerformersMixin):
2120

2221
def get_sql(self) -> Tuple[str, dict]:
2322
return f"""
@@ -64,22 +63,23 @@ def get_sql(self) -> Tuple[str, dict]:
6463
INNER JOIN processes_task pt
6564
ON pw.id = pt.workflow_id
6665
AND pt.status = '{TaskStatus.ACTIVE}'
67-
INNER JOIN processes_taskperformer ptp
68-
ON pt.id = ptp.task_id
66+
INNER JOIN (
67+
{self.all_dereferenced_performers()}
68+
) dereferenced_performers
69+
ON pt.id = dereferenced_performers.task_id
6970
INNER JOIN accounts_user au
70-
ON au.id = ptp.user_id
71+
ON au.id = dereferenced_performers.user_id
7172
INNER JOIN accounts_account aa
7273
ON au.account_id = aa.id
7374
LEFT JOIN accounts_notification an
7475
ON an.task_id = pt.id
75-
AND an.user_id = ptp.user_id
76+
AND an.user_id = dereferenced_performers.user_id
7677
AND an.type = '{NotificationType.OVERDUE_TASK}'
7778
WHERE pt.is_deleted is FALSE
7879
AND pw.status = '{WorkflowStatus.RUNNING}'
7980
AND pt.due_date IS NOT NULL
8081
AND pt.due_date <= NOW()
81-
AND ptp.is_completed IS FALSE
82-
AND ptp.directly_status != '{DirectlyStatus.DELETED}'
82+
AND dereferenced_performers.is_completed IS FALSE
8383
AND au.status = '{UserStatus.ACTIVE}'
8484
) result INNER JOIN accounts_user au
8585
ON au.id = result.workflow_starter_id

backend/src/notifications/tests/test_tasks/test_send_overdue_task_notification.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@
2323
from src.processes.enums import (
2424
DirectlyStatus,
2525
WorkflowStatus,
26+
PerformerType,
2627
)
2728
from src.processes.models.workflows.task import TaskPerformer
2829
from src.processes.tests.fixtures import (
2930
create_test_account,
31+
create_test_admin,
3032
create_test_guest,
33+
create_test_group,
34+
create_test_owner,
3135
create_test_user,
3236
create_test_workflow,
3337
)
@@ -666,3 +670,58 @@ def test_send_overdue_task_notification__completed_performer__skip(mocker):
666670
token=None,
667671
link=link,
668672
)
673+
674+
675+
def test_send_overdue_task_notification__group_performer__ok(mocker):
676+
677+
# arrange
678+
user = create_test_owner()
679+
group_user = create_test_admin(account=user.account)
680+
group = create_test_group(user.account, users=[group_user])
681+
682+
workflow = create_test_workflow(user, tasks_count=1)
683+
task = workflow.tasks.get(number=1)
684+
task.taskperformer_set.all().delete()
685+
TaskPerformer.objects.create(
686+
task=task,
687+
group=group,
688+
type=PerformerType.GROUP,
689+
)
690+
task.due_date = timezone.now() - timedelta(minutes=5)
691+
task.save(update_fields=['due_date'])
692+
send_notification_mock = mocker.patch(
693+
'src.notifications.tasks._send_notification',
694+
)
695+
696+
# act
697+
_send_overdue_task_notification()
698+
699+
# assert
700+
notification = Notification.objects.get(
701+
task_id=task.id,
702+
user_id=group_user.id,
703+
type=NotificationType.OVERDUE_TASK,
704+
status=NotificationStatus.NEW,
705+
)
706+
link = f'{settings.FRONTEND_URL}/tasks/{task.id}'
707+
send_notification_mock.assert_called_once_with(
708+
logging=user.account.log_api_requests,
709+
method_name=NotificationMethod.overdue_task,
710+
account_id=group_user.account_id,
711+
user_id=group_user.id,
712+
user_type=group_user.type,
713+
user_email=group_user.email,
714+
logo_lg=None,
715+
task_id=task.id,
716+
task_name=task.name,
717+
workflow_id=workflow.id,
718+
workflow_name=workflow.name,
719+
template_name=workflow.template.name,
720+
workflow_starter_id=workflow.workflow_starter_id,
721+
workflow_starter_first_name=user.first_name,
722+
workflow_starter_last_name=user.last_name,
723+
notification=notification,
724+
sync=True,
725+
token=None,
726+
link=link,
727+
)

0 commit comments

Comments
 (0)