2023-04-09 09:37:04 +00:00
|
|
|
from canaille.app import models
|
2023-04-09 11:34:38 +00:00
|
|
|
from canaille.core.populate import fake_groups
|
|
|
|
from canaille.core.populate import fake_users
|
2021-04-08 15:38:13 +00:00
|
|
|
|
2021-06-03 10:28:45 +00:00
|
|
|
|
2024-05-12 20:28:32 +00:00
|
|
|
def test_delete_group(testclient, backend, user, admin, foo_group):
|
|
|
|
foo_group.members = [user, admin]
|
|
|
|
backend.save(foo_group)
|
|
|
|
|
|
|
|
user = backend.get(models.User, user.id)
|
|
|
|
user.groups = []
|
|
|
|
backend.save(user)
|
|
|
|
|
|
|
|
|
2023-05-20 15:17:46 +00:00
|
|
|
def test_no_group(app, backend):
|
2024-04-10 13:44:11 +00:00
|
|
|
assert backend.query(models.Group) == []
|
2021-04-08 15:38:13 +00:00
|
|
|
|
2021-06-03 10:28:45 +00:00
|
|
|
|
2024-04-14 18:37:52 +00:00
|
|
|
def test_group_list_pagination(testclient, logged_admin, foo_group, backend):
|
2023-02-25 17:11:19 +00:00
|
|
|
res = testclient.get("/groups")
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-02-25 17:11:19 +00:00
|
|
|
|
|
|
|
groups = fake_groups(25)
|
|
|
|
|
|
|
|
res = testclient.get("/groups")
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain("26 items")
|
2023-02-25 17:11:19 +00:00
|
|
|
group_name = res.pyquery(
|
|
|
|
".groups tbody tr:nth-of-type(1) td:nth-of-type(2) a"
|
|
|
|
).text()
|
|
|
|
assert group_name
|
|
|
|
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
|
|
|
res = form.submit(name="page", value="2")
|
2023-03-09 19:46:04 +00:00
|
|
|
assert group_name not in res.pyquery(
|
|
|
|
".groups tbody tr td:nth-of-type(2) a"
|
|
|
|
).text().split(" ")
|
2023-02-25 17:11:19 +00:00
|
|
|
for group in groups:
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(group)
|
2023-02-25 17:11:19 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups")
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-02-25 17:11:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_group_list_bad_pages(testclient, logged_admin):
|
|
|
|
res = testclient.get("/groups")
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
2023-02-25 17:11:19 +00:00
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/groups", {"csrf_token": form["csrf_token"].value, "page": "2"}, status=404
|
2023-02-25 17:11:19 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
res = testclient.get("/groups")
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
2023-02-25 17:11:19 +00:00
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/groups", {"csrf_token": form["csrf_token"].value, "page": "-1"}, status=404
|
2023-02-25 17:11:19 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-05-20 16:28:31 +00:00
|
|
|
def test_group_deletion(testclient, backend):
|
2023-04-09 09:37:04 +00:00
|
|
|
user = models.User(
|
2023-04-07 19:03:11 +00:00
|
|
|
formatted_name="foobar",
|
|
|
|
family_name="foobar",
|
|
|
|
user_name="foobar",
|
2023-10-02 19:58:46 +00:00
|
|
|
emails=["foo@bar.com"],
|
2023-04-07 19:03:11 +00:00
|
|
|
)
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(user)
|
2023-04-07 19:03:11 +00:00
|
|
|
|
2023-04-09 09:37:04 +00:00
|
|
|
group = models.Group(
|
2023-04-07 19:03:11 +00:00
|
|
|
members=[user],
|
|
|
|
display_name="foobar",
|
|
|
|
)
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(group)
|
2023-04-17 16:09:52 +00:00
|
|
|
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(user)
|
2023-04-07 19:03:11 +00:00
|
|
|
assert user.groups == [group]
|
|
|
|
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(group)
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(user)
|
2023-04-07 19:03:11 +00:00
|
|
|
assert not user.groups
|
|
|
|
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(user)
|
2023-04-07 19:03:11 +00:00
|
|
|
|
|
|
|
|
2023-03-07 17:29:18 +00:00
|
|
|
def test_group_list_search(testclient, logged_admin, foo_group, bar_group):
|
|
|
|
res = testclient.get("/groups")
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain("2 items")
|
|
|
|
res.mustcontain(foo_group.display_name)
|
|
|
|
res.mustcontain(bar_group.display_name)
|
2023-03-07 17:29:18 +00:00
|
|
|
|
|
|
|
form = res.forms["search"]
|
|
|
|
form["query"] = "oo"
|
|
|
|
res = form.submit()
|
|
|
|
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain(foo_group.display_name)
|
|
|
|
res.mustcontain(no=bar_group.display_name)
|
2023-03-07 17:29:18 +00:00
|
|
|
|
|
|
|
|
2024-04-14 18:31:43 +00:00
|
|
|
def test_set_groups(app, user, foo_group, bar_group, backend):
|
2023-04-07 22:31:22 +00:00
|
|
|
assert user in foo_group.members
|
2023-04-17 16:09:52 +00:00
|
|
|
assert user.groups == [foo_group]
|
2021-06-03 10:00:04 +00:00
|
|
|
|
2023-04-07 22:31:22 +00:00
|
|
|
user.groups = [foo_group, bar_group]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(user)
|
2021-07-29 14:00:21 +00:00
|
|
|
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(bar_group)
|
2023-04-07 22:31:22 +00:00
|
|
|
assert user in bar_group.members
|
2023-11-24 11:10:17 +00:00
|
|
|
assert bar_group in user.groups
|
2021-06-03 10:00:04 +00:00
|
|
|
|
2023-04-07 22:31:22 +00:00
|
|
|
user.groups = [foo_group]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(user)
|
2021-07-29 14:00:21 +00:00
|
|
|
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(foo_group)
|
|
|
|
backend.reload(bar_group)
|
2023-04-07 22:31:22 +00:00
|
|
|
assert user in foo_group.members
|
|
|
|
assert user not in bar_group.members
|
2021-07-01 16:21:20 +00:00
|
|
|
|
2021-07-29 14:00:21 +00:00
|
|
|
|
2024-04-14 18:31:43 +00:00
|
|
|
def test_set_groups_with_leading_space_in_user_id_attribute(app, foo_group, backend):
|
2023-04-09 09:37:04 +00:00
|
|
|
user = models.User(
|
2023-02-05 17:57:18 +00:00
|
|
|
formatted_name=" Doe", # leading space in id attribute
|
|
|
|
family_name="Doe",
|
|
|
|
user_name="user2",
|
2023-10-02 19:58:46 +00:00
|
|
|
emails=["john@doe.com"],
|
2022-03-02 17:31:48 +00:00
|
|
|
)
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(user)
|
2022-03-02 17:31:48 +00:00
|
|
|
|
2023-04-07 22:31:22 +00:00
|
|
|
user.groups = [foo_group]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(user)
|
2022-03-02 17:31:48 +00:00
|
|
|
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(foo_group)
|
2023-04-07 22:31:22 +00:00
|
|
|
assert user in foo_group.members
|
2022-03-02 17:31:48 +00:00
|
|
|
|
2023-04-07 22:31:22 +00:00
|
|
|
user.groups = []
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(user)
|
2022-03-02 17:31:48 +00:00
|
|
|
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(foo_group)
|
2023-04-07 22:31:22 +00:00
|
|
|
assert user.id not in foo_group.members
|
2022-03-02 17:31:48 +00:00
|
|
|
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(user)
|
2022-05-18 09:31:26 +00:00
|
|
|
|
2022-03-02 17:31:48 +00:00
|
|
|
|
2021-07-29 14:00:21 +00:00
|
|
|
def test_moderator_can_create_edit_and_delete_group(
|
2024-04-14 15:30:59 +00:00
|
|
|
testclient, logged_moderator, foo_group, backend
|
2021-07-29 14:00:21 +00:00
|
|
|
):
|
2021-07-01 16:21:20 +00:00
|
|
|
# The group does not exist
|
|
|
|
res = testclient.get("/groups", status=200)
|
2024-04-14 15:30:59 +00:00
|
|
|
assert backend.get(models.Group, display_name="bar") is None
|
|
|
|
assert backend.get(models.Group, display_name="foo") == foo_group
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain(no="bar")
|
|
|
|
res.mustcontain("foo")
|
2021-07-01 16:21:20 +00:00
|
|
|
|
|
|
|
# Fill the form for a new group
|
|
|
|
res = testclient.get("/groups/add", status=200)
|
2023-02-26 21:23:57 +00:00
|
|
|
form = res.forms["creategroupform"]
|
2023-02-05 18:39:52 +00:00
|
|
|
form["display_name"] = "bar"
|
2023-02-26 21:23:57 +00:00
|
|
|
form["description"] = "yolo"
|
2021-07-01 16:21:20 +00:00
|
|
|
|
|
|
|
# Group has been created
|
2023-02-26 21:23:57 +00:00
|
|
|
res = form.submit(status=302).follow(status=200)
|
2021-07-01 16:21:20 +00:00
|
|
|
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(logged_moderator)
|
2024-04-14 15:30:59 +00:00
|
|
|
bar_group = backend.get(models.Group, display_name="bar")
|
2023-02-05 18:39:52 +00:00
|
|
|
assert bar_group.display_name == "bar"
|
2023-11-15 17:20:13 +00:00
|
|
|
assert bar_group.description == "yolo"
|
2023-04-07 22:31:22 +00:00
|
|
|
assert bar_group.members == [
|
2023-03-11 18:12:58 +00:00
|
|
|
logged_moderator
|
2022-05-08 14:31:17 +00:00
|
|
|
] # Group cannot be empty so creator is added in it
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain("bar")
|
2021-07-01 16:21:20 +00:00
|
|
|
|
|
|
|
# Group name can not be edited
|
|
|
|
res = testclient.get("/groups/bar", status=200)
|
2023-02-26 21:23:57 +00:00
|
|
|
form = res.forms["editgroupform"]
|
2023-02-05 18:39:52 +00:00
|
|
|
form["display_name"] = "bar2"
|
2023-11-15 17:20:13 +00:00
|
|
|
form["description"] = "yolo2"
|
2021-07-01 16:21:20 +00:00
|
|
|
|
2023-07-24 16:07:35 +00:00
|
|
|
res = form.submit(name="action", value="edit")
|
|
|
|
assert res.flashes == [("error", "Group edition failed.")]
|
|
|
|
res.mustcontain("This field cannot be edited")
|
2021-07-01 16:21:20 +00:00
|
|
|
|
2024-04-14 15:30:59 +00:00
|
|
|
bar_group = backend.get(models.Group, display_name="bar")
|
2023-02-05 18:39:52 +00:00
|
|
|
assert bar_group.display_name == "bar"
|
2023-11-15 17:20:13 +00:00
|
|
|
assert bar_group.description == "yolo"
|
2024-04-14 15:30:59 +00:00
|
|
|
assert backend.get(models.Group, display_name="bar2") is None
|
2023-07-24 16:07:35 +00:00
|
|
|
|
|
|
|
# Group description can be edited
|
|
|
|
res = testclient.get("/groups/bar", status=200)
|
|
|
|
form = res.forms["editgroupform"]
|
2023-11-15 17:20:13 +00:00
|
|
|
form["description"] = "yolo2"
|
2023-07-24 16:07:35 +00:00
|
|
|
|
|
|
|
res = form.submit(name="action", value="edit")
|
2024-09-11 07:33:42 +00:00
|
|
|
assert res.flashes == [("success", "The group bar has been successfully edited.")]
|
2023-07-24 16:07:35 +00:00
|
|
|
res = res.follow()
|
|
|
|
|
2024-04-14 15:30:59 +00:00
|
|
|
bar_group = backend.get(models.Group, display_name="bar")
|
2023-07-24 16:07:35 +00:00
|
|
|
assert bar_group.display_name == "bar"
|
2023-11-15 17:20:13 +00:00
|
|
|
assert bar_group.description == "yolo2"
|
2021-07-29 14:00:21 +00:00
|
|
|
|
2021-07-29 09:37:02 +00:00
|
|
|
# Group is deleted
|
2023-07-06 16:43:37 +00:00
|
|
|
res = res.forms["editgroupform"].submit(name="action", value="confirm-delete")
|
|
|
|
res = res.form.submit(name="action", value="delete", status=302)
|
2024-04-14 15:30:59 +00:00
|
|
|
assert backend.get(models.Group, display_name="bar") is None
|
2024-09-11 07:33:42 +00:00
|
|
|
assert ("success", "The group bar has been successfully deleted") in res.flashes
|
2021-07-29 09:37:02 +00:00
|
|
|
|
2021-07-29 14:00:21 +00:00
|
|
|
|
2022-05-19 10:36:39 +00:00
|
|
|
def test_cannot_create_already_existing_group(testclient, logged_moderator, foo_group):
|
2023-03-28 18:30:29 +00:00
|
|
|
res = testclient.get("/groups/add")
|
|
|
|
res = testclient.post(
|
|
|
|
"/groups/add",
|
|
|
|
{"csrf_token": res.form["csrf_token"].value, "display_name": "foo"},
|
|
|
|
status=200,
|
|
|
|
)
|
2021-07-29 14:00:21 +00:00
|
|
|
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain("Group creation failed.")
|
|
|
|
res.mustcontain("The group 'foo' already exists")
|
2021-07-29 14:00:21 +00:00
|
|
|
|
|
|
|
|
2022-12-06 17:36:07 +00:00
|
|
|
def test_invalid_group(testclient, logged_moderator):
|
|
|
|
testclient.get("/groups/invalid", status=404)
|
|
|
|
|
|
|
|
|
2022-05-19 10:36:39 +00:00
|
|
|
def test_simple_user_cannot_view_or_edit_groups(testclient, logged_user, foo_group):
|
2021-07-29 09:37:02 +00:00
|
|
|
testclient.get("/groups", status=403)
|
|
|
|
testclient.get("/groups/add", status=403)
|
|
|
|
testclient.get("/groups/foo", status=403)
|
2021-10-29 12:19:46 +00:00
|
|
|
|
|
|
|
|
2022-12-06 17:36:07 +00:00
|
|
|
def test_invalid_form_request(testclient, logged_moderator, foo_group):
|
|
|
|
res = testclient.get("/groups/foo")
|
2023-02-26 21:23:57 +00:00
|
|
|
form = res.forms["editgroupform"]
|
|
|
|
res = form.submit(name="action", value="invalid-action", status=400)
|
2022-12-06 17:36:07 +00:00
|
|
|
|
|
|
|
|
2024-04-14 20:51:58 +00:00
|
|
|
def test_edition_failed(testclient, logged_moderator, foo_group, backend):
|
2022-12-06 17:36:07 +00:00
|
|
|
res = testclient.get("/groups/foo")
|
2023-02-26 21:23:57 +00:00
|
|
|
form = res.forms["editgroupform"]
|
2023-03-28 18:30:29 +00:00
|
|
|
form["display_name"] = ""
|
2023-02-26 21:23:57 +00:00
|
|
|
res = form.submit(name="action", value="edit")
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain("Group edition failed.")
|
2024-04-14 20:51:58 +00:00
|
|
|
backend.reload(foo_group)
|
2023-02-05 18:39:52 +00:00
|
|
|
assert foo_group.display_name == "foo"
|
2023-02-25 17:11:19 +00:00
|
|
|
|
|
|
|
|
2024-04-14 18:31:43 +00:00
|
|
|
def test_user_list_pagination(testclient, logged_admin, foo_group, backend):
|
2023-02-25 17:11:19 +00:00
|
|
|
res = testclient.get("/groups/foo")
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-02-25 17:11:19 +00:00
|
|
|
|
|
|
|
users = fake_users(25)
|
|
|
|
for user in users:
|
2023-04-07 22:31:22 +00:00
|
|
|
foo_group.members = foo_group.members + [user]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2023-02-25 17:11:19 +00:00
|
|
|
|
2023-11-24 11:10:17 +00:00
|
|
|
assert len(foo_group.members) == 26
|
2023-02-25 17:11:19 +00:00
|
|
|
res = testclient.get("/groups/foo")
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain("26 items")
|
2023-02-25 17:11:19 +00:00
|
|
|
user_name = res.pyquery(".users tbody tr:nth-of-type(1) td:nth-of-type(2) a").text()
|
|
|
|
assert user_name
|
|
|
|
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
|
|
|
res = form.submit(name="page", value="2")
|
2023-03-09 19:46:04 +00:00
|
|
|
assert user_name not in res.pyquery(".users tr td:nth-of-type(2) a").text().split(
|
|
|
|
" "
|
|
|
|
)
|
2023-02-25 17:11:19 +00:00
|
|
|
for user in users:
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(user)
|
2023-02-25 17:11:19 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-02-25 17:11:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_user_list_bad_pages(testclient, logged_admin, foo_group):
|
|
|
|
res = testclient.get("/groups/foo")
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
2023-02-25 17:11:19 +00:00
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/groups/foo", {"csrf_token": form["csrf_token"].value, "page": "2"}, status=404
|
2023-02-25 17:11:19 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
2023-02-25 17:11:19 +00:00
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/groups/foo",
|
|
|
|
{"csrf_token": form["csrf_token"].value, "page": "-1"},
|
|
|
|
status=404,
|
2023-02-25 17:11:19 +00:00
|
|
|
)
|
2023-03-07 17:29:18 +00:00
|
|
|
|
|
|
|
|
2024-04-14 18:31:43 +00:00
|
|
|
def test_user_list_search(
|
|
|
|
testclient, logged_admin, foo_group, user, moderator, backend
|
|
|
|
):
|
2023-04-07 22:31:22 +00:00
|
|
|
foo_group.members = foo_group.members + [logged_admin, moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2023-03-07 17:29:18 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
2023-03-16 15:25:14 +00:00
|
|
|
res.mustcontain("3 items")
|
2023-11-15 17:20:13 +00:00
|
|
|
res.mustcontain(user.formatted_name)
|
|
|
|
res.mustcontain(logged_admin.formatted_name)
|
|
|
|
res.mustcontain(moderator.formatted_name)
|
2023-03-07 17:29:18 +00:00
|
|
|
|
|
|
|
form = res.forms["search"]
|
|
|
|
form["query"] = "ohn"
|
|
|
|
res = form.submit()
|
|
|
|
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-11-15 17:20:13 +00:00
|
|
|
res.mustcontain(user.formatted_name)
|
|
|
|
res.mustcontain(no=logged_admin.formatted_name)
|
|
|
|
res.mustcontain(no=moderator.formatted_name)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
|
2024-04-14 18:31:43 +00:00
|
|
|
def test_remove_member(testclient, logged_admin, foo_group, user, moderator, backend):
|
2024-04-28 14:13:01 +00:00
|
|
|
foo_group.members = [user, moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
|
|
|
form = res.forms[f"deletegroupmemberform-{user.id}"]
|
|
|
|
|
|
|
|
res = form.submit(name="action", value="confirm-remove-member")
|
|
|
|
res = res.form.submit(name="action", value="remove-member")
|
|
|
|
assert (
|
|
|
|
"success",
|
|
|
|
"John (johnny) Doe has been removed from the group foo",
|
|
|
|
) in res.flashes
|
|
|
|
|
2024-05-03 20:35:23 +00:00
|
|
|
backend.reload(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
assert user not in foo_group.members
|
|
|
|
|
|
|
|
|
|
|
|
def test_remove_member_already_remove_from_group(
|
2024-04-14 18:31:43 +00:00
|
|
|
testclient, logged_admin, foo_group, user, moderator, backend
|
2024-04-28 14:13:01 +00:00
|
|
|
):
|
|
|
|
foo_group.members = [user, moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
|
|
|
form = res.forms[f"deletegroupmemberform-{user.id}"]
|
|
|
|
foo_group.members = [moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
res = form.submit(name="action", value="confirm-remove-member")
|
|
|
|
assert (
|
|
|
|
"error",
|
|
|
|
"The user 'John (johnny) Doe' has already been removed from the group 'foo'",
|
|
|
|
) in res.flashes
|
|
|
|
|
|
|
|
|
|
|
|
def test_confirm_remove_member_already_removed_from_group(
|
2024-04-14 18:31:43 +00:00
|
|
|
testclient, logged_admin, foo_group, user, moderator, backend
|
2024-04-28 14:13:01 +00:00
|
|
|
):
|
|
|
|
foo_group.members = [user, moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
|
|
|
form = res.forms[f"deletegroupmemberform-{user.id}"]
|
|
|
|
res = form.submit(name="action", value="confirm-remove-member")
|
|
|
|
|
|
|
|
foo_group.members = [moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
res = res.form.submit(name="action", value="remove-member")
|
|
|
|
|
|
|
|
assert (
|
|
|
|
"error",
|
|
|
|
"The user 'John (johnny) Doe' has already been removed from the group 'foo'",
|
|
|
|
) in res.flashes
|
|
|
|
|
|
|
|
|
|
|
|
def test_remove_member_already_deleted(
|
2024-05-07 14:17:15 +00:00
|
|
|
testclient, logged_admin, foo_group, moderator, backend
|
2024-04-28 14:13:01 +00:00
|
|
|
):
|
2024-05-07 14:17:15 +00:00
|
|
|
user = models.User(
|
2024-05-07 15:36:32 +00:00
|
|
|
formatted_name="Foo bar",
|
2024-05-07 14:17:15 +00:00
|
|
|
family_name="Bar",
|
|
|
|
user_name="foobar",
|
|
|
|
emails=["foobar@example.org"],
|
|
|
|
)
|
|
|
|
backend.save(user)
|
2024-04-28 14:13:01 +00:00
|
|
|
foo_group.members = [user, moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
|
|
|
form = res.forms[f"deletegroupmemberform-{user.id}"]
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(user)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
res = form.submit(name="action", value="confirm-remove-member")
|
|
|
|
assert (
|
|
|
|
"error",
|
|
|
|
"The user you are trying to remove does not exist.",
|
|
|
|
) in res.flashes
|
|
|
|
|
|
|
|
|
|
|
|
def test_confirm_remove_member_already_deleted(
|
2024-05-07 14:17:15 +00:00
|
|
|
testclient, logged_admin, foo_group, moderator, backend
|
2024-04-28 14:13:01 +00:00
|
|
|
):
|
2024-05-07 14:17:15 +00:00
|
|
|
user = models.User(
|
2024-05-07 15:36:32 +00:00
|
|
|
formatted_name="Foo bar",
|
2024-05-07 14:17:15 +00:00
|
|
|
family_name="Bar",
|
|
|
|
emails=["foobar@example.org"],
|
2024-05-07 15:36:32 +00:00
|
|
|
user_name="foobar",
|
2024-05-07 14:17:15 +00:00
|
|
|
)
|
|
|
|
backend.save(user)
|
2024-04-28 14:13:01 +00:00
|
|
|
foo_group.members = [user, moderator]
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(foo_group)
|
2024-04-28 14:13:01 +00:00
|
|
|
|
|
|
|
res = testclient.get("/groups/foo")
|
|
|
|
form = res.forms[f"deletegroupmemberform-{user.id}"]
|
|
|
|
res = form.submit(name="action", value="confirm-remove-member")
|
|
|
|
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(user)
|
2024-04-28 14:13:01 +00:00
|
|
|
res = res.form.submit(name="action", value="remove-member")
|
|
|
|
|
|
|
|
assert (
|
|
|
|
"error",
|
|
|
|
"The user you are trying to remove does not exist.",
|
|
|
|
) in res.flashes
|