2023-07-20 16:43:28 +00:00
|
|
|
import pytest
|
2023-04-09 11:34:38 +00:00
|
|
|
from canaille.core.populate import fake_users
|
2023-08-13 20:08:28 +00:00
|
|
|
from flask import g
|
2023-03-16 17:39:28 +00:00
|
|
|
from webtest import Upload
|
|
|
|
|
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
@pytest.fixture
|
|
|
|
def configuration(configuration):
|
|
|
|
configuration["EMAIL_CONFIRMATION"] = False
|
|
|
|
return configuration
|
|
|
|
|
|
|
|
|
|
|
|
def test_invalid_form_request(testclient, logged_user):
|
|
|
|
res = testclient.get("/profile/user")
|
|
|
|
res = res.forms["baseform"].submit(
|
|
|
|
name="action", value="invalid-action", status=400
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2023-03-16 17:39:28 +00:00
|
|
|
def test_user_list_pagination(testclient, logged_admin):
|
|
|
|
res = testclient.get("/users")
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
users = fake_users(25)
|
|
|
|
|
|
|
|
res = testclient.get("/users")
|
|
|
|
res.mustcontain("26 items")
|
|
|
|
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-16 17:39:28 +00:00
|
|
|
assert user_name not in res.pyquery(
|
|
|
|
".users tbody tr td:nth-of-type(2) a"
|
|
|
|
).text().split(" ")
|
|
|
|
for user in users:
|
|
|
|
user.delete()
|
|
|
|
|
|
|
|
res = testclient.get("/users")
|
2023-06-30 15:42:16 +00:00
|
|
|
res.mustcontain("1 item")
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_user_list_bad_pages(testclient, logged_admin):
|
|
|
|
res = testclient.get("/users")
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
2023-03-16 17:39:28 +00:00
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/users", {"csrf_token": form["csrf_token"].value, "page": "2"}, status=404
|
2023-03-16 17:39:28 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
res = testclient.get("/users")
|
2023-08-31 20:34:12 +00:00
|
|
|
form = res.forms["tableform"]
|
2023-03-16 17:39:28 +00:00
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/users", {"csrf_token": form["csrf_token"].value, "page": "-1"}, status=404
|
2023-03-16 17:39:28 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def test_user_list_search(testclient, logged_admin, user, moderator):
|
|
|
|
res = testclient.get("/users")
|
|
|
|
res.mustcontain("3 items")
|
2023-11-15 17:20:13 +00:00
|
|
|
res.mustcontain(moderator.formatted_name)
|
|
|
|
res.mustcontain(user.formatted_name)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
form = res.forms["search"]
|
|
|
|
form["query"] = "Jack"
|
|
|
|
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(moderator.formatted_name)
|
|
|
|
res.mustcontain(no=user.formatted_name)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_user_list_search_only_allowed_fields(
|
|
|
|
testclient, logged_admin, user, moderator
|
|
|
|
):
|
|
|
|
res = testclient.get("/users")
|
|
|
|
res.mustcontain("3 items")
|
2023-11-15 17:20:13 +00:00
|
|
|
res.mustcontain(moderator.formatted_name)
|
|
|
|
res.mustcontain(user.formatted_name)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
form = res.forms["search"]
|
|
|
|
form["query"] = "user"
|
|
|
|
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=moderator.formatted_name)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-02-05 17:57:18 +00:00
|
|
|
testclient.app.config["ACL"]["DEFAULT"]["READ"].remove("user_name")
|
2023-08-13 20:08:28 +00:00
|
|
|
g.user.reload()
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
form = res.forms["search"]
|
|
|
|
form["query"] = "user"
|
|
|
|
res = form.submit()
|
|
|
|
|
|
|
|
res.mustcontain("0 items")
|
2023-11-15 17:20:13 +00:00
|
|
|
res.mustcontain(no=user.formatted_name)
|
|
|
|
res.mustcontain(no=moderator.formatted_name)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_edition_permission(
|
|
|
|
testclient,
|
|
|
|
logged_user,
|
|
|
|
admin,
|
|
|
|
):
|
|
|
|
testclient.app.config["ACL"]["DEFAULT"]["PERMISSIONS"] = []
|
2023-11-24 11:10:17 +00:00
|
|
|
logged_user.reload()
|
2023-06-28 15:56:49 +00:00
|
|
|
testclient.get("/profile/user", status=404)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
testclient.app.config["ACL"]["DEFAULT"]["PERMISSIONS"] = ["edit_self"]
|
2023-08-13 20:08:28 +00:00
|
|
|
g.user.reload()
|
2023-03-16 17:39:28 +00:00
|
|
|
testclient.get("/profile/user", status=200)
|
|
|
|
|
|
|
|
|
|
|
|
def test_edition(
|
|
|
|
testclient,
|
|
|
|
logged_user,
|
|
|
|
admin,
|
|
|
|
jpeg_photo,
|
|
|
|
):
|
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
|
|
|
form["given_name"] = "given_name"
|
|
|
|
form["family_name"] = "family_name"
|
|
|
|
form["display_name"] = "display_name"
|
|
|
|
form["emails-0"] = "email@mydomain.tld"
|
|
|
|
form["phone_numbers-0"] = "555-666-777"
|
|
|
|
form["formatted_address"] = "formatted_address"
|
|
|
|
form["street"] = "street"
|
|
|
|
form["postal_code"] = "postal_code"
|
|
|
|
form["locality"] = "locality"
|
|
|
|
form["region"] = "region"
|
|
|
|
form["employee_number"] = 666
|
|
|
|
form["department"] = 1337
|
|
|
|
form["title"] = "title"
|
|
|
|
form["organization"] = "organization"
|
|
|
|
form["preferred_language"] = "fr"
|
|
|
|
form["photo"] = Upload("logo.jpg", jpeg_photo)
|
|
|
|
|
|
|
|
res = form.submit(name="action", value="edit-profile")
|
2023-03-16 17:39:28 +00:00
|
|
|
assert res.flashes == [
|
|
|
|
("success", "Le profil a été mis à jour avec succès.")
|
|
|
|
], res.text
|
|
|
|
res = res.follow()
|
|
|
|
|
2023-04-08 19:34:09 +00:00
|
|
|
logged_user.reload()
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-11-15 17:20:13 +00:00
|
|
|
assert logged_user.given_name == "given_name"
|
|
|
|
assert logged_user.family_name == "family_name"
|
2023-02-05 17:57:18 +00:00
|
|
|
assert logged_user.display_name == "display_name"
|
2023-06-22 13:14:07 +00:00
|
|
|
assert logged_user.emails == ["email@mydomain.tld"]
|
2023-06-22 13:33:03 +00:00
|
|
|
assert logged_user.phone_numbers == ["555-666-777"]
|
2023-11-15 17:20:13 +00:00
|
|
|
assert logged_user.formatted_address == "formatted_address"
|
|
|
|
assert logged_user.street == "street"
|
|
|
|
assert logged_user.postal_code == "postal_code"
|
|
|
|
assert logged_user.locality == "locality"
|
|
|
|
assert logged_user.region == "region"
|
2023-02-05 17:57:18 +00:00
|
|
|
assert logged_user.preferred_language == "fr"
|
|
|
|
assert logged_user.employee_number == "666"
|
2023-11-15 17:20:13 +00:00
|
|
|
assert logged_user.department == "1337"
|
|
|
|
assert logged_user.title == "title"
|
|
|
|
assert logged_user.organization == "organization"
|
|
|
|
assert logged_user.photo == jpeg_photo
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-11-15 17:20:13 +00:00
|
|
|
logged_user.formatted_name = "John (johnny) Doe"
|
|
|
|
logged_user.family_name = "Doe"
|
2023-06-22 13:14:07 +00:00
|
|
|
logged_user.emails = ["john@doe.com"]
|
2023-02-05 17:57:18 +00:00
|
|
|
logged_user.given_name = None
|
|
|
|
logged_user.photo = None
|
2023-03-16 17:39:28 +00:00
|
|
|
logged_user.save()
|
2023-04-13 16:01:43 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_edition_remove_fields(
|
|
|
|
testclient,
|
|
|
|
logged_user,
|
|
|
|
admin,
|
|
|
|
):
|
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
|
|
|
form["display_name"] = ""
|
|
|
|
form["phone_numbers-0"] = ""
|
2023-04-13 16:01:43 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
res = form.submit(name="action", value="edit-profile")
|
2023-05-30 07:44:11 +00:00
|
|
|
assert res.flashes == [("success", "Profile updated successfully.")], res.text
|
2023-04-13 16:01:43 +00:00
|
|
|
res = res.follow()
|
|
|
|
|
|
|
|
logged_user.reload()
|
|
|
|
|
|
|
|
assert not logged_user.display_name
|
2023-06-22 13:33:03 +00:00
|
|
|
assert not logged_user.phone_numbers
|
2023-04-13 16:01:43 +00:00
|
|
|
|
2023-11-22 13:47:48 +00:00
|
|
|
logged_user.formatted_name = "John (johnny) Doe"
|
|
|
|
logged_user.family_name = "Doe"
|
2023-06-22 13:14:07 +00:00
|
|
|
logged_user.emails = ["john@doe.com"]
|
2023-04-13 16:01:43 +00:00
|
|
|
logged_user.given_name = None
|
|
|
|
logged_user.photo = None
|
|
|
|
logged_user.save()
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
2023-05-20 16:28:31 +00:00
|
|
|
def test_field_permissions_none(testclient, logged_user):
|
2023-03-16 17:39:28 +00:00
|
|
|
testclient.get("/profile/user", status=200)
|
2023-06-22 13:33:03 +00:00
|
|
|
logged_user.phone_numbers = ["555-666-777"]
|
2023-03-16 17:39:28 +00:00
|
|
|
logged_user.save()
|
|
|
|
|
|
|
|
testclient.app.config["ACL"]["DEFAULT"] = {
|
2023-02-05 17:57:18 +00:00
|
|
|
"READ": ["user_name"],
|
2023-03-16 17:39:28 +00:00
|
|
|
"WRITE": [],
|
|
|
|
"PERMISSIONS": ["edit_self"],
|
|
|
|
}
|
|
|
|
|
2023-08-13 20:08:28 +00:00
|
|
|
g.user.reload()
|
2023-03-16 17:39:28 +00:00
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
|
|
|
assert "phone_numbers-0" not in form.fields
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/profile/user",
|
|
|
|
{
|
2023-07-20 16:43:28 +00:00
|
|
|
"action": "edit-profile",
|
2023-06-22 14:54:05 +00:00
|
|
|
"phone_numbers-0": "000-000-000",
|
2023-07-20 16:43:28 +00:00
|
|
|
"csrf_token": form["csrf_token"].value,
|
2023-03-28 18:30:29 +00:00
|
|
|
},
|
2023-03-16 17:39:28 +00:00
|
|
|
)
|
2023-04-08 19:34:09 +00:00
|
|
|
logged_user.reload()
|
2023-06-22 13:33:03 +00:00
|
|
|
assert logged_user.phone_numbers == ["555-666-777"]
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
2023-05-20 16:28:31 +00:00
|
|
|
def test_field_permissions_read(testclient, logged_user):
|
2023-03-16 17:39:28 +00:00
|
|
|
testclient.get("/profile/user", status=200)
|
2023-06-22 13:33:03 +00:00
|
|
|
logged_user.phone_numbers = ["555-666-777"]
|
2023-03-16 17:39:28 +00:00
|
|
|
logged_user.save()
|
|
|
|
|
|
|
|
testclient.app.config["ACL"]["DEFAULT"] = {
|
2023-06-22 13:33:03 +00:00
|
|
|
"READ": ["user_name", "phone_numbers"],
|
2023-03-16 17:39:28 +00:00
|
|
|
"WRITE": [],
|
|
|
|
"PERMISSIONS": ["edit_self"],
|
|
|
|
}
|
2023-08-13 20:08:28 +00:00
|
|
|
g.user.reload()
|
2023-03-16 17:39:28 +00:00
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
|
|
|
assert "phone_numbers-0" in form.fields
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/profile/user",
|
|
|
|
{
|
2023-07-20 16:43:28 +00:00
|
|
|
"action": "edit-profile",
|
2023-06-22 14:54:05 +00:00
|
|
|
"phone_numbers-0": "000-000-000",
|
2023-07-20 16:43:28 +00:00
|
|
|
"csrf_token": form["csrf_token"].value,
|
2023-03-28 18:30:29 +00:00
|
|
|
},
|
2023-03-16 17:39:28 +00:00
|
|
|
)
|
2023-04-08 19:34:09 +00:00
|
|
|
logged_user.reload()
|
2023-06-22 13:33:03 +00:00
|
|
|
assert logged_user.phone_numbers == ["555-666-777"]
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
2023-05-20 16:28:31 +00:00
|
|
|
def test_field_permissions_write(testclient, logged_user):
|
2023-03-16 17:39:28 +00:00
|
|
|
testclient.get("/profile/user", status=200)
|
2023-06-22 13:33:03 +00:00
|
|
|
logged_user.phone_numbers = ["555-666-777"]
|
2023-03-16 17:39:28 +00:00
|
|
|
logged_user.save()
|
|
|
|
|
|
|
|
testclient.app.config["ACL"]["DEFAULT"] = {
|
2023-02-05 17:57:18 +00:00
|
|
|
"READ": ["user_name"],
|
2023-06-22 13:33:03 +00:00
|
|
|
"WRITE": ["phone_numbers"],
|
2023-03-16 17:39:28 +00:00
|
|
|
"PERMISSIONS": ["edit_self"],
|
|
|
|
}
|
2023-08-13 20:08:28 +00:00
|
|
|
g.user.reload()
|
2023-03-16 17:39:28 +00:00
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
|
|
|
assert "phone_numbers-0" in form.fields
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
testclient.post(
|
2023-03-28 18:30:29 +00:00
|
|
|
"/profile/user",
|
|
|
|
{
|
2023-07-20 16:43:28 +00:00
|
|
|
"action": "edit-profile",
|
2023-06-22 14:54:05 +00:00
|
|
|
"phone_numbers-0": "000-000-000",
|
2023-07-20 16:43:28 +00:00
|
|
|
"csrf_token": form["csrf_token"].value,
|
2023-03-28 18:30:29 +00:00
|
|
|
},
|
2023-03-16 17:39:28 +00:00
|
|
|
)
|
2023-04-08 19:34:09 +00:00
|
|
|
logged_user.reload()
|
2023-06-22 13:33:03 +00:00
|
|
|
assert logged_user.phone_numbers == ["000-000-000"]
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
2023-06-28 15:56:49 +00:00
|
|
|
def test_simple_user_cannot_edit_other(testclient, admin, logged_user):
|
2023-03-28 18:30:29 +00:00
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
2023-06-28 15:56:49 +00:00
|
|
|
testclient.get("/profile/admin", status=404)
|
2023-03-28 18:30:29 +00:00
|
|
|
testclient.post(
|
|
|
|
"/profile/admin",
|
2023-07-20 16:43:28 +00:00
|
|
|
{"action": "edit-profile", "csrf_token": form["csrf_token"].value},
|
2023-06-28 15:56:49 +00:00
|
|
|
status=404,
|
2023-03-28 18:30:29 +00:00
|
|
|
)
|
|
|
|
testclient.post(
|
|
|
|
"/profile/admin",
|
2023-07-20 16:43:28 +00:00
|
|
|
{"action": "delete", "csrf_token": form["csrf_token"].value},
|
2023-06-28 15:56:49 +00:00
|
|
|
status=404,
|
2023-03-28 18:30:29 +00:00
|
|
|
)
|
2023-03-16 17:39:28 +00:00
|
|
|
testclient.get("/users", status=403)
|
|
|
|
|
|
|
|
|
|
|
|
def test_admin_bad_request(testclient, logged_moderator):
|
|
|
|
testclient.get("/profile/foobar", status=404)
|
|
|
|
|
|
|
|
|
|
|
|
def test_bad_email(testclient, logged_user):
|
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
form["emails-0"] = "john@doe.com"
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
res = form.submit(name="action", value="edit-profile").follow()
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-06-22 13:14:07 +00:00
|
|
|
assert ["john@doe.com"] == logged_user.emails
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
form["emails-0"] = "yolo"
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
res = form.submit(name="action", value="edit-profile", status=200)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
logged_user.reload()
|
|
|
|
|
2023-06-22 13:14:07 +00:00
|
|
|
assert ["john@doe.com"] == logged_user.emails
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_surname_is_mandatory(testclient, logged_user):
|
|
|
|
res = testclient.get("/profile/user", status=200)
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
2023-11-22 13:47:48 +00:00
|
|
|
logged_user.family_name = "Doe"
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
form["family_name"] = ""
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
res = form.submit(name="action", value="edit-profile", status=200)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
logged_user.reload()
|
|
|
|
|
2023-11-15 17:20:13 +00:00
|
|
|
assert "Doe" == logged_user.family_name
|
2023-06-22 14:54:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_formcontrol(testclient, logged_user):
|
|
|
|
res = testclient.get("/profile/user")
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
|
|
|
assert "emails-1" not in form.fields
|
2023-06-22 14:54:05 +00:00
|
|
|
|
2023-07-20 16:43:28 +00:00
|
|
|
res = form.submit(status=200, name="fieldlist_add", value="emails-0")
|
|
|
|
form = res.forms["baseform"]
|
|
|
|
assert "emails-1" in form.fields
|
2023-06-22 14:54:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_formcontrol_htmx(testclient, logged_user):
|
|
|
|
res = testclient.get("/profile/user")
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
2023-06-22 14:54:05 +00:00
|
|
|
data = {
|
2023-07-20 16:43:28 +00:00
|
|
|
field: form[field].value
|
|
|
|
for field in form.fields
|
|
|
|
if len(form.fields.get(field)) == 1
|
2023-06-22 14:54:05 +00:00
|
|
|
}
|
|
|
|
data["fieldlist_add"] = "emails-0"
|
|
|
|
response = testclient.post(
|
|
|
|
"/profile/user",
|
|
|
|
data,
|
|
|
|
headers={
|
|
|
|
"HX-Request": "true",
|
|
|
|
"HX-Trigger-Name": "listfield_add",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
assert "emails-0" in response.text
|
|
|
|
assert "emails-1" in response.text
|
2023-06-28 13:42:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_inline_validation(testclient, logged_admin, user):
|
|
|
|
res = testclient.get("/profile/admin")
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
2023-06-28 13:42:35 +00:00
|
|
|
res = testclient.post(
|
|
|
|
"/profile/admin",
|
|
|
|
{
|
2023-07-20 16:43:28 +00:00
|
|
|
"csrf_token": form["csrf_token"].value,
|
2023-06-28 13:42:35 +00:00
|
|
|
"emails-0": "john@doe.com",
|
2023-07-20 16:43:28 +00:00
|
|
|
"action": "edit-profile",
|
2023-06-28 13:42:35 +00:00
|
|
|
},
|
|
|
|
headers={
|
|
|
|
"HX-Request": "true",
|
|
|
|
"HX-Trigger-Name": "emails-0",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
res.mustcontain("The email 'john@doe.com' is already used")
|
|
|
|
|
|
|
|
|
2023-12-19 17:22:31 +00:00
|
|
|
def test_inline_validation_keep_indicators(testclient, logged_admin, user):
|
|
|
|
testclient.app.config["ACL"]["DEFAULT"]["WRITE"].remove("display_name")
|
|
|
|
testclient.app.config["ACL"]["DEFAULT"]["READ"].append("display_name")
|
|
|
|
testclient.app.config["ACL"]["ADMIN"]["WRITE"].append("display_name")
|
2023-11-24 11:10:17 +00:00
|
|
|
logged_admin.reload()
|
|
|
|
user.reload()
|
2023-06-28 13:42:35 +00:00
|
|
|
|
|
|
|
res = testclient.get("/profile/admin")
|
2023-07-20 16:43:28 +00:00
|
|
|
form = res.forms["baseform"]
|
2023-06-28 13:42:35 +00:00
|
|
|
res = testclient.post(
|
|
|
|
"/profile/user",
|
|
|
|
{
|
2023-07-20 16:43:28 +00:00
|
|
|
"csrf_token": form["csrf_token"].value,
|
2023-06-28 13:42:35 +00:00
|
|
|
"display_name": "George Abitbol",
|
2023-07-20 16:43:28 +00:00
|
|
|
"action": "edit-profile",
|
2023-06-28 13:42:35 +00:00
|
|
|
},
|
|
|
|
headers={
|
|
|
|
"HX-Request": "true",
|
|
|
|
"HX-Trigger-Name": "display_name",
|
|
|
|
},
|
|
|
|
)
|
|
|
|
res.mustcontain("This user cannot edit this field")
|