canaille-globuzma/tests/core/test_profile_creation.py
2023-06-22 17:55:26 +02:00

186 lines
6.4 KiB
Python

from canaille.app import models
def test_user_creation_edition_and_deletion(
testclient, logged_moderator, foo_group, bar_group
):
# The user does not exist.
res = testclient.get("/users", status=200)
assert models.User.get_from_login("george") is None
res.mustcontain(no="george")
# Fill the profile for a new user.
res = testclient.get("/profile", status=200)
res.form["user_name"] = "george"
res.form["given_name"] = "George"
res.form["family_name"] = "Abitbol"
res.form["emails-0"] = "george@abitbol.com"
res.form["phone_numbers-0"] = "555-666-888"
res.form["groups"] = [foo_group.id]
res.form["password1"] = "totoyolo"
res.form["password2"] = "totoyolo"
# User have been created
res = res.form.submit(name="action", value="edit", status=302)
assert ("success", "User account creation succeed.") in res.flashes
res = res.follow(status=200)
george = models.User.get_from_login("george")
foo_group.reload()
assert "George" == george.given_name[0]
assert george.groups == [foo_group]
assert george.check_password("totoyolo")[0]
res = testclient.get("/users", status=200)
res.mustcontain("george")
res = testclient.get("/profile/george/settings", status=200)
assert "readonly" not in res.form["groups"].attrs
# User have been edited
res = testclient.get("/profile/george", status=200)
res.form["given_name"] = "Georgio"
res = res.form.submit(name="action", value="edit").follow()
res = testclient.get("/profile/george/settings", status=200)
res.form["groups"] = [foo_group.id, bar_group.id]
res = res.form.submit(name="action", value="edit").follow()
george = models.User.get_from_login("george")
assert "Georgio" == george.given_name[0]
assert george.check_password("totoyolo")[0]
foo_group.reload()
bar_group.reload()
assert george in set(foo_group.members)
assert george in set(bar_group.members)
assert set(george.groups) == {foo_group, bar_group}
res = testclient.get("/users", status=200)
res.mustcontain("george")
# User have been deleted.
res = testclient.get("/profile/george/settings", status=200)
res = res.form.submit(name="action", value="delete", status=302).follow(status=200)
assert models.User.get_from_login("george") is None
res.mustcontain(no="george")
def test_profile_creation_dynamic_validation(testclient, logged_admin, user):
res = testclient.get("/profile")
res = testclient.post(
"/profile",
{
"csrf_token": res.form["csrf_token"].value,
"emails-0": "john@doe.com",
},
headers={
"HX-Request": "true",
"HX-Trigger-Name": "emails-0",
},
)
res.mustcontain("The email 'john@doe.com' is already used")
def test_user_creation_without_password(testclient, logged_moderator):
res = testclient.get("/profile", status=200)
res.form["user_name"] = "george"
res.form["family_name"] = "Abitbol"
res.form["emails-0"] = "george@abitbol.com"
res = res.form.submit(name="action", value="edit", status=302)
assert ("success", "User account creation succeed.") in res.flashes
res = res.follow(status=200)
george = models.User.get_from_login("george")
assert george.user_name[0] == "george"
assert not george.has_password()
george.delete()
def test_user_creation_form_validation_failed(
testclient, logged_moderator, foo_group, bar_group
):
res = testclient.get("/users", status=200)
assert models.User.get_from_login("george") is None
res.mustcontain(no="george")
res = testclient.get("/profile", status=200)
res = res.form.submit(name="action", value="edit")
assert ("error", "User account creation failed.") in res.flashes
assert models.User.get_from_login("george") is None
def test_username_already_taken(
testclient, logged_moderator, user, foo_group, bar_group
):
res = testclient.get("/profile", status=200)
res.form["user_name"] = "user"
res.form["family_name"] = "foo"
res.form["emails-0"] = "any@thing.com"
res = res.form.submit(name="action", value="edit")
assert ("error", "User account creation failed.") in res.flashes
res.mustcontain("The login 'user' already exists")
def test_email_already_taken(testclient, logged_moderator, user, foo_group, bar_group):
res = testclient.get("/profile", status=200)
res.form["user_name"] = "user2"
res.form["family_name"] = "foo"
res.form["emails-0"] = "john@doe.com"
res = res.form.submit(name="action", value="edit")
assert ("error", "User account creation failed.") in res.flashes
res.mustcontain("The email 'john@doe.com' is already used")
def test_cn_setting_with_given_name_and_surname(testclient, logged_moderator):
res = testclient.get("/profile", status=200)
res.form["user_name"] = "george"
res.form["given_name"] = "George"
res.form["family_name"] = "Abitbol"
res.form["emails-0"] = "george@abitbol.com"
res = res.form.submit(name="action", value="edit", status=302).follow(status=200)
george = models.User.get_from_login("george")
assert george.formatted_name[0] == "George Abitbol"
george.delete()
def test_cn_setting_with_surname_only(testclient, logged_moderator):
res = testclient.get("/profile", status=200)
res.form["user_name"] = "george"
res.form["family_name"] = "Abitbol"
res.form["emails-0"] = "george@abitbol.com"
res = res.form.submit(name="action", value="edit", status=302).follow(status=200)
george = models.User.get_from_login("george")
assert george.formatted_name[0] == "Abitbol"
george.delete()
def test_formcontrol(testclient, logged_admin):
res = testclient.get("/profile")
assert "emails-1" not in res.form.fields
res = res.form.submit(status=200, name="fieldlist_add", value="emails-0")
assert "emails-1" in res.form.fields
def test_formcontrol_htmx(testclient, logged_admin):
res = testclient.get("/profile")
data = {
field: res.form[field].value
for field in res.form.fields
if len(res.form.fields.get(field)) == 1
}
data["fieldlist_add"] = "emails-0"
response = testclient.post(
"/profile",
data,
headers={
"HX-Request": "true",
"HX-Trigger-Name": "listfield_add",
},
)
assert "emails-0" in response.text
assert "emails-1" in response.text