Skip to content

Commit

Permalink
Fix get_responsible_users
Browse files Browse the repository at this point in the history
  • Loading branch information
reinhardt authored and thet committed Nov 17, 2023
1 parent bf48337 commit 3e9e39c
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 3 deletions.
16 changes: 13 additions & 3 deletions src/euphorie/client/notifications/notification__ra_not_modified.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from euphorie.client.notifications.base import BaseNotification
from logging import getLogger
from plone import api
from sqlalchemy import sql
from z3c.saconfig import Session
from zope.interface import implementer

Expand Down Expand Up @@ -75,9 +76,18 @@ def reminder_days(self):
def get_responsible_users(self, session):
return (
Session.query(Account)
.filter(OrganisationMembership.owner_id == session.account_id)
.filter(OrganisationMembership.member_role.in_(["admin", "manager"]))
.filter(OrganisationMembership.member_id == Account.id)
.outerjoin(
OrganisationMembership, OrganisationMembership.member_id == Account.id
)
.filter(
sql.or_(
sql.and_(
OrganisationMembership.owner_id == session.account_id,
OrganisationMembership.member_role.in_(["admin", "manager"]),
),
Account.id == session.account_id,
)
)
)

def notify(self):
Expand Down
48 changes: 48 additions & 0 deletions src/euphorie/client/tests/test_notifications.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
from euphorie.client.interfaces import IClientSkinLayer
from euphorie.client.model import NotificationSubscription
from euphorie.client.model import SurveySession
from euphorie.client.tests.utils import addAccount
from euphorie.client.tests.utils import addSurvey
from euphorie.client.tests.utils import MockMailFixture
from euphorie.content.tests.utils import BASIC_SURVEY
from euphorie.testing import EuphorieIntegrationTestCase
from plone import api
from unittest import mock
from z3c.saconfig import Session
from zope.interface import alsoProvides

import datetime


class NotificationsSettingsTests(EuphorieIntegrationTestCase):
def setUp(self):
Expand Down Expand Up @@ -57,3 +61,47 @@ def test_subscribe_notification(self):
.all()
)
self.assertEqual(subscriptions[0].category, "notification__ra_not_modified")


class NotificationsSendingTests(EuphorieIntegrationTestCase):
def setUp(self):
super().setUp()
self.loginAsPortalOwner()
addSurvey(self.portal, BASIC_SURVEY)
self.account = addAccount(password="secret")
alsoProvides(self.request, IClientSkinLayer)

survey_session = SurveySession(
id=1,
title="Euphorie",
zodb_path="nl/ict/software-development",
account=self.account,
)
survey_session.modified = datetime.datetime.now() - datetime.timedelta(days=366)
Session.add(survey_session)

def test_send_notification(self):
Session.add(
NotificationSubscription(
account_id=self.account.getId(),
category="notification__ra_not_modified",
enabled=True,
)
)
view = api.content.get_view(
context=self.portal.client.nl,
request=self.request,
name="send-notifications-daily",
)
mail_fixture = MockMailFixture()
with mock.patch(
"euphorie.client.notifications.notification__ra_not_modified"
".Notification.available",
return_value=True,
):
view()
mail = mail_fixture.storage[0][0][0]
self.assertIn(self.account.email, mail.get("To"))
self.assertEqual(
mail_fixture.storage[0][1]["subject"], "Reminder: Update of risk assessment"
)

0 comments on commit 3e9e39c

Please sign in to comment.