diff --git a/invenio_rdm_records/templates/semantic-ui/invenio_notifications/grant-user-access.create.jinja b/invenio_rdm_records/templates/semantic-ui/invenio_notifications/grant-user-access.create.jinja index 50974e9cd..b5fe7db36 100644 --- a/invenio_rdm_records/templates/semantic-ui/invenio_notifications/grant-user-access.create.jinja +++ b/invenio_rdm_records/templates/semantic-ui/invenio_notifications/grant-user-access.create.jinja @@ -4,7 +4,12 @@ {% set permission = notification.context.permission %} {% set record_title = record.metadata.title %} -{% set record_link = record.links.self_html %} +{# Determine shared link #} +{%- if not record.is_published and permission == "preview" -%} + {% set shared_link = record.links.record_html + "?preview=1" %} +{%- else -%} + {% set shared_link = record.links.self_html %} +{%- endif -%} {% set account_settings_link = "{ui}/account/settings/notifications".format( ui=config.SITE_UI_URL ) @@ -49,11 +54,11 @@ {% endif %} - {%- if record.is_published -%} - {{ _("View the record")}} - {%- else -%} - {{ _("View the draft")}} - {%- endif -%} + + + {{ _("View the record") if record.is_published else _("View the draft") }} + + _ @@ -64,29 +69,29 @@ {%- endblock html_body -%} +{# + Because of whitespace interpretation for plain text we have to: indent, format and strip jinja blocks (-) + just so to get the right output. This is unfortunate for code readability but required for output. +#} {%- block plain_body -%} - {%- if record.is_published -%} - {{ _("You have now permission to {permission} all versions of the record '{record_title}'.").format(record_title=record_title, permission=permission)}} +{%- if record.is_published -%} + {{ _("You have now permission to {permission} all versions of the record '{record_title}'.").format(record_title=record_title, permission=permission)}} +{%- else -%} + {%- if record_title -%} + {{ _("You have now permission to {permission} the draft '{record_title}'.").format(record_title=record_title, permission=permission)}} {%- else -%} - {%- if record_title -%} - {{ _("You have now permission to {permission} the draft '{record_title}'.").format(record_title=record_title, permission=permission)}} - {%- else -%} - {{ _("You have now permission to {permission} the draft.").format(permission=permission)}} - {%- endif -%} + {{ _("You have now permission to {permission} the draft.").format(permission=permission)}} {%- endif -%} +{%- endif -%} {% if message %} -
-
-{{ _("Message:")}} -{{message}} -{% endif %} -{%- if record.is_published -%} - {{ _("View the record: ") }}{{ record_link }} -{%- else -%} - {{ _("View the draft: ") }}{{ record_link }} -{%- endif -%} +{{ _("Message:") }} + +{{ message }} +{%- endif %} + +{{ _("View the record: ") if record.is_published else _("View the draft: ") }}{{ shared_link }} -{{ _("This is an auto-generated message. To manage notifications, visit your account settings: ")}}{{ account_settings_link }} +{{ _("This is an auto-generated message. To manage notifications, visit your account settings: ")}}{{ account_settings_link }} . {%- endblock plain_body -%} diff --git a/tests/services/test_service_access.py b/tests/services/test_service_access.py index 820a3d94e..83aac3dbc 100644 --- a/tests/services/test_service_access.py +++ b/tests/services/test_service_access.py @@ -679,3 +679,36 @@ def test_delete_grant_by_subject_permissions( # assert that now user can not create a new version with pytest.raises(PermissionDeniedError): records_service.new_version(user_with_grant.identity, id_=record.id) + + +def test_preview_draft_link_in_email( + running_app, uploader, minimal_record, community_owner +): + # services + records_service = current_rdm_records.records_service + access_service = records_service.access + # instances + draft = records_service.create(uploader.identity, minimal_record) + + # community_owner is not used because this has anything to do with + # communities. It is used simply because it is a user with "visibility": "public" + # like it is in test_resources_user_access.py + user_id = str(community_owner.id) + grant_payload = { + "grants": [ + { + "subject": {"type": "user", "id": user_id}, + "permission": "preview", + "notify": True, + } + ] + } + mail = running_app.app.extensions.get("mail") + + with mail.record_messages() as outbox: + # This triggers an email notification because of "notify": True + access_service.bulk_create_grants(uploader.identity, draft.id, grant_payload) + + sent_mail = outbox[0] + assert f"/records/{draft.id}?preview=1" in sent_mail.html + assert f"/records/{draft.id}?preview=1" in sent_mail.body