Skip to content

Commit

Permalink
notifications: fix patron with additional email
Browse files Browse the repository at this point in the history
* Sends the notification to the patron additional email if exists
  instead of the library.
* Closes #2152.
* Adapts the fixtures to have a user with an additional email only.

Co-Authored-by: Johnny Mariéthoz <[email protected]>
Co-Authored-by: Bertrand Zuchuat <[email protected]>
  • Loading branch information
3 people committed Jul 21, 2021
1 parent b6b0758 commit 417754b
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 8 deletions.
4 changes: 2 additions & 2 deletions data/users.json
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@
"pid": "5",
"birth_date": "2004-10-11",
"city": "Aosta",
"email": "[email protected]",
"username": "helder",
"first_name": "Helder",
"roles": [
Expand All @@ -135,7 +134,8 @@
"$ref": "https://bib.rero.ch/api/patron_types/2"
},
"communication_channel": "email",
"communication_language": "ita"
"communication_language": "ita",
"additional_communication_email": "[email protected]"
}
},
{
Expand Down
14 changes: 8 additions & 6 deletions rero_ils/modules/notifications/dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,14 @@ def send_mail_to_patron(ctx_data):
"""
# get the recipient email from loan.patron.patron.email
error_reason = ''
recipients = [ctx_data['patron'].get('email')]
# additional recipient
add_recipient = ctx_data['patron'].get(
'additional_communication_email')
if add_recipient:
recipients.append(add_recipient)
recipients = []
patron = ctx_data['patron']
for email in [
patron.get('email'),
patron['patron'].get('additional_communication_email')
]:
if email:
recipients.append(email)
if not recipients:
error_reason = '(Missing notification recipients)'
reply_to = ctx_data['library'].get('email')
Expand Down
98 changes: 98 additions & 0 deletions tests/api/notifications/test_notifications_rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,8 @@ def test_recall_notification_without_email(
transaction_user_pid=librarian_martigny.pid
)
)
request_loan_pid = data.get(
'action_applied')[LoanAction.REQUEST].get('pid')
assert res.status_code == 200
flush_index(NotificationsSearch.Meta.index)

Expand All @@ -503,6 +505,102 @@ def test_recall_notification_without_email(
assert mailbox[0].recipients == [email_notification_type(
lib_martigny, notification['notification_type'])]
mailbox.clear()
params = {
'transaction_location_pid': loc_public_martigny.pid,
'transaction_user_pid': librarian_martigny.pid
}
# cancel request
res, _ = postdata(
client,
'api_item.cancel_item_request',
dict(
item_pid=item3_lib_martigny.pid,
pid=request_loan_pid,
transaction_user_pid=librarian_martigny.pid,
transaction_library_pid=lib_martigny.pid
)
)
assert res.status_code == 200
_, actions = item3_lib_martigny.checkin(**params)


def test_recall_notification_with_patron_additional_email_only(
client, patron_sion_with_additional_email, lib_martigny,
json_header, patron2_martigny,
item3_lib_martigny, librarian_martigny,
circulation_policies, loc_public_martigny,
mailbox):
"""Test recall notification."""
mailbox.clear()
login_user_via_session(client, librarian_martigny.user)
res, data = postdata(
client,
'api_item.checkout',
dict(
item_pid=item3_lib_martigny.pid,
patron_pid=patron_sion_with_additional_email.pid,
transaction_location_pid=loc_public_martigny.pid,
transaction_user_pid=librarian_martigny.pid,
)
)
assert res.status_code == 200
loan_pid = data.get('action_applied')[LoanAction.CHECKOUT].get('pid')
loan = Loan.get_record_by_pid(loan_pid)

assert not loan.is_notified(
notification_type=Notification.RECALL_NOTIFICATION_TYPE)
# test notification
res, data = postdata(
client,
'api_item.librarian_request',
dict(
item_pid=item3_lib_martigny.pid,
pickup_location_pid=loc_public_martigny.pid,
patron_pid=patron2_martigny.pid,
transaction_library_pid=lib_martigny.pid,
transaction_user_pid=librarian_martigny.pid
)
)
assert res.status_code == 200
flush_index(NotificationsSearch.Meta.index)

request_loan_pid = data.get(
'action_applied')[LoanAction.REQUEST].get('pid')

assert loan.is_notified(
notification_type=Notification.RECALL_NOTIFICATION_TYPE)
notification = get_notification(
loan, notification_type=Notification.RECALL_NOTIFICATION_TYPE)
assert notification.loan_pid == loan.pid
assert not loan.is_notified(
notification_type=Notification.AVAILABILITY_NOTIFICATION_TYPE)
assert not get_notification(
loan, notification_type=Notification.AVAILABILITY_NOTIFICATION_TYPE)

for notification_type in Notification.ALL_NOTIFICATIONS:
process_notifications(notification_type)
# one new email for the librarian
assert mailbox[0].recipients == \
[patron_sion_with_additional_email[
'patron']['additional_communication_email']]
mailbox.clear()
params = {
'transaction_location_pid': loc_public_martigny.pid,
'transaction_user_pid': librarian_martigny.pid
}
# cancel request
res, _ = postdata(
client,
'api_item.cancel_item_request',
dict(
item_pid=item3_lib_martigny.pid,
pid=request_loan_pid,
transaction_user_pid=librarian_martigny.pid,
transaction_library_pid=lib_martigny.pid
)
)
assert res.status_code == 200
_, actions = item3_lib_martigny.checkin(**params)


def test_transaction_library_pid(notification_late_martigny,
Expand Down
17 changes: 17 additions & 0 deletions tests/fixtures/circulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,23 @@ def patron_sion_without_email1(
yield create_patron(data)


@pytest.fixture(scope="module")
def patron_sion_with_additional_email(
app,
roles,
lib_sion,
patron_type_grown_sion,
patron_sion_data):
"""Create Sion patron with an additional email only."""
data = deepcopy(patron_sion_data)
del data['email']
data['pid'] = 'ptrn10additionalemail'
data['username'] = 'additionalemail'
data['patron']['additional_communication_email'] = \
'[email protected]'
yield create_patron(data)


# ------------ Loans: pending loan ----------
@pytest.fixture(scope="module")
def loan_pending_martigny(
Expand Down

0 comments on commit 417754b

Please sign in to comment.