mirror of
https://github.com/logos-co/open-law.git
synced 2025-02-15 00:06:58 +00:00
added test for notification
This commit is contained in:
parent
16e255d174
commit
75a248aac3
@ -43,7 +43,7 @@ def section_notification(action: m.Notification.Actions, entity_id: int, user_id
|
|||||||
)
|
)
|
||||||
|
|
||||||
case m.Notification.Actions.EDIT:
|
case m.Notification.Actions.EDIT:
|
||||||
text = f"{current_user.username} rename a section on {book.label}"
|
text = f"{current_user.username} renamed a section on {book.label}"
|
||||||
link = (
|
link = (
|
||||||
url_for("book.collection_view", book_id=book.id)
|
url_for("book.collection_view", book_id=book.id)
|
||||||
+ f"#section-{section.label}"
|
+ f"#section-{section.label}"
|
||||||
@ -115,6 +115,8 @@ def interpretation_notification(
|
|||||||
|
|
||||||
case m.Notification.Actions.APPROVE:
|
case m.Notification.Actions.APPROVE:
|
||||||
if user_id == book.owner.id:
|
if user_id == book.owner.id:
|
||||||
|
if current_user.id == book.owner.id:
|
||||||
|
return
|
||||||
# This for the book owner
|
# This for the book owner
|
||||||
text = f"{current_user.username} approved an interpretation for {section.label} on {book.label}"
|
text = f"{current_user.username} approved an interpretation for {section.label} on {book.label}"
|
||||||
link = url_for(
|
link = url_for(
|
||||||
@ -125,6 +127,11 @@ def interpretation_notification(
|
|||||||
elif user_id == interpretation.user_id and user_id != book.owner.id:
|
elif user_id == interpretation.user_id and user_id != book.owner.id:
|
||||||
# This for the interpretation owner
|
# This for the interpretation owner
|
||||||
text = f"Your interpretation has been approved for {section.label} on {book.label}"
|
text = f"Your interpretation has been approved for {section.label} on {book.label}"
|
||||||
|
link = url_for(
|
||||||
|
"book.interpretation_view",
|
||||||
|
book_id=book.id,
|
||||||
|
section_id=section.id,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -60,11 +60,7 @@ def approve_interpretation(interpretation_id: int):
|
|||||||
"Approve" if interpretation.approved else "Cancel approve",
|
"Approve" if interpretation.approved else "Cancel approve",
|
||||||
interpretation,
|
interpretation,
|
||||||
)
|
)
|
||||||
if (
|
if interpretation.approved and current_user.id != interpretation.user_id:
|
||||||
interpretation.approved
|
|
||||||
and current_user.id != book.owner.id
|
|
||||||
and current_user.id != interpretation.user_id
|
|
||||||
):
|
|
||||||
# notifications
|
# notifications
|
||||||
interpretation_notification(
|
interpretation_notification(
|
||||||
m.Notification.Actions.APPROVE, interpretation.id, book.owner.id
|
m.Notification.Actions.APPROVE, interpretation.id, book.owner.id
|
||||||
|
179
tests/test_notifications.py
Normal file
179
tests/test_notifications.py
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
from flask import Response
|
||||||
|
from flask.testing import FlaskClient
|
||||||
|
|
||||||
|
from app import models as m, db
|
||||||
|
|
||||||
|
from tests.utils import (
|
||||||
|
login,
|
||||||
|
create_book,
|
||||||
|
create_collection,
|
||||||
|
create_section,
|
||||||
|
create_interpretation,
|
||||||
|
create_comment,
|
||||||
|
create,
|
||||||
|
logout,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_notifications(client: FlaskClient):
|
||||||
|
_, user = login(client)
|
||||||
|
user: m.User
|
||||||
|
assert user.id
|
||||||
|
|
||||||
|
book = create_book(client)
|
||||||
|
collection, _ = create_collection(client, book.id)
|
||||||
|
section, _ = create_section(client, book.id, collection.id)
|
||||||
|
interpretation, _ = create_interpretation(client, book.id, section.id)
|
||||||
|
user_2_id = create(username="user_2")
|
||||||
|
user_2: m.User = db.session.get(m.User, user_2_id)
|
||||||
|
assert user_2
|
||||||
|
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/add_contributor",
|
||||||
|
data=dict(user_id=user_2.id, role=m.BookContributor.Roles.MODERATOR),
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
logout(client)
|
||||||
|
login(client, user_2.username)
|
||||||
|
comment, _ = create_comment(client, book.id, interpretation.id)
|
||||||
|
assert comment
|
||||||
|
assert comment.user_id == user_2_id
|
||||||
|
assert len(user.active_notifications) == 1
|
||||||
|
|
||||||
|
logout(client)
|
||||||
|
login(client)
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/approve/comment/{comment.id}",
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/delete_contributor",
|
||||||
|
data=dict(user_id=user_2_id),
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
# check that user_2 have notification about he was added, deleted as Editor/Moderator and his comment was approved
|
||||||
|
assert len(user_2.active_notifications) == 3
|
||||||
|
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/add_contributor",
|
||||||
|
data=dict(user_id=user_2.id, role=m.BookContributor.Roles.EDITOR),
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert len(user_2.active_notifications) == 4
|
||||||
|
|
||||||
|
logout(client)
|
||||||
|
login(client, user_2.username)
|
||||||
|
|
||||||
|
collection_2, _ = create_collection(client, book.id)
|
||||||
|
assert collection_2
|
||||||
|
assert len(user.active_notifications) == 2
|
||||||
|
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/{collection_2.id}/edit",
|
||||||
|
data=dict(label="Test Collection #1 Label"),
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
section_2, _ = create_section(client, book.id, collection_2.id)
|
||||||
|
interpretation_2, _ = create_interpretation(client, book.id, section_2.id)
|
||||||
|
comment_2, _ = create_comment(client, book.id, interpretation_2.id)
|
||||||
|
assert interpretation_2
|
||||||
|
assert len(user.active_notifications) == 5
|
||||||
|
|
||||||
|
logout(client)
|
||||||
|
login(client)
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/{interpretation_2.id}/comment_delete",
|
||||||
|
data=dict(
|
||||||
|
text=comment.text,
|
||||||
|
interpretation_id=interpretation_2.id,
|
||||||
|
comment_id=comment_2.id,
|
||||||
|
),
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
response.status_code == 200
|
||||||
|
|
||||||
|
assert len(user_2.active_notifications) == 5
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/approve/interpretation/{interpretation_2.id}",
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
response.status_code == 200
|
||||||
|
assert len(user_2.active_notifications) == 6
|
||||||
|
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/{interpretation_2.id}/delete_interpretation",
|
||||||
|
data=dict(interpretation_id=interpretation_2.id),
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
response.status_code == 200
|
||||||
|
|
||||||
|
assert len(user_2.active_notifications) == 7
|
||||||
|
|
||||||
|
logout(client)
|
||||||
|
login(client, user_2.username)
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/{section_2.id}/edit_section",
|
||||||
|
data=dict(
|
||||||
|
section_id=section_2.id,
|
||||||
|
label="Test",
|
||||||
|
),
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert len(user.active_notifications) == 6
|
||||||
|
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/{section_2.id}/delete_section",
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
response: Response = client.post(
|
||||||
|
f"/book/{book.id}/{collection_2.id}/delete",
|
||||||
|
follow_redirects=True,
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
assert len(user.active_notifications) == 8
|
||||||
|
|
||||||
|
strings = [
|
||||||
|
"New interpretation to%",
|
||||||
|
"%renamed a section on%",
|
||||||
|
"%create a new section on%",
|
||||||
|
"%delete a section on%",
|
||||||
|
"%create a new collection on%",
|
||||||
|
"%renamed a collection on%",
|
||||||
|
"%delete a collection on%",
|
||||||
|
"New comment to your interpretation",
|
||||||
|
]
|
||||||
|
for string in strings:
|
||||||
|
notification = m.Notification.query.filter(
|
||||||
|
m.Notification.text.ilike(f"{string}")
|
||||||
|
).first()
|
||||||
|
assert notification
|
||||||
|
assert notification.user_id == user.id
|
||||||
|
|
||||||
|
strings_for_user_2 = [
|
||||||
|
"You've been added to%",
|
||||||
|
"Your comment has been approved%",
|
||||||
|
"You've been removed from%",
|
||||||
|
"A moderator has removed your comment",
|
||||||
|
"Your interpretation has been approved%",
|
||||||
|
"A moderator has removed your interpretation",
|
||||||
|
]
|
||||||
|
for string in strings_for_user_2:
|
||||||
|
notification = m.Notification.query.filter(
|
||||||
|
m.Notification.text.ilike(f"{string}")
|
||||||
|
).first()
|
||||||
|
assert notification
|
||||||
|
assert notification.user_id == user_2.id
|
Loading…
x
Reference in New Issue
Block a user