canaille-globuzma/tests/core/test_profile_photo.py

149 lines
4.2 KiB
Python
Raw Permalink Normal View History

import datetime
2023-03-16 17:39:28 +00:00
from webtest import Upload
from canaille.app import models
2023-03-16 17:39:28 +00:00
def test_photo(testclient, user, jpeg_photo, backend):
user.photo = jpeg_photo
backend.save(user)
backend.reload(user)
res = testclient.get("/profile/user/photo")
2023-03-16 17:39:28 +00:00
assert res.body == jpeg_photo
assert res.last_modified == user.last_modified
etag = res.etag
assert etag
res = testclient.get(
"/profile/user/photo",
headers={
"If-Modified-Since": (
res.last_modified + datetime.timedelta(days=1)
).strftime("%a, %d %b %Y %H:%M:%S UTC")
},
status=304,
)
assert not res.body
res = testclient.get(
"/profile/user/photo",
headers={"If-None-Match": etag},
status=304,
)
assert not res.body
2023-03-16 17:39:28 +00:00
def test_photo_invalid_user(testclient, user):
2023-05-25 11:37:58 +00:00
testclient.get("/profile/invalid/photo", status=404)
2023-03-16 17:39:28 +00:00
def test_photo_absent(testclient, user):
assert not user.photo
2023-05-25 11:37:58 +00:00
testclient.get("/profile/user/photo", status=404)
2023-03-16 17:39:28 +00:00
def test_photo_invalid_path(testclient, user):
testclient.get("/profile/user/invalid", status=404)
def test_photo_on_profile_edition(
testclient,
logged_user,
jpeg_photo,
backend,
2023-03-16 17:39:28 +00:00
):
# Add a photo
res = testclient.get("/profile/user", status=200)
2023-07-20 16:43:28 +00:00
form = res.forms["baseform"]
form["photo"] = Upload("logo.jpg", jpeg_photo)
form["photo_delete"] = False
res = form.submit(name="action", value="edit-profile")
2023-05-30 07:44:11 +00:00
assert ("success", "Profile updated successfully.") in res.flashes
2023-03-16 17:39:28 +00:00
res = res.follow()
backend.reload(logged_user)
2023-03-16 17:39:28 +00:00
assert logged_user.photo == jpeg_photo
2023-03-16 17:39:28 +00:00
# No change
res = testclient.get("/profile/user", status=200)
2023-07-20 16:43:28 +00:00
form = res.forms["baseform"]
form["photo_delete"] = False
res = form.submit(name="action", value="edit-profile")
2023-05-30 07:44:11 +00:00
assert ("success", "Profile updated successfully.") in res.flashes
2023-03-16 17:39:28 +00:00
res = res.follow()
backend.reload(logged_user)
2023-03-16 17:39:28 +00:00
assert logged_user.photo == jpeg_photo
2023-03-16 17:39:28 +00:00
# Photo deletion
res = testclient.get("/profile/user", status=200)
2023-07-20 16:43:28 +00:00
form = res.forms["baseform"]
form["photo_delete"] = True
res = form.submit(name="action", value="edit-profile")
2023-05-30 07:44:11 +00:00
assert ("success", "Profile updated successfully.") in res.flashes
2023-03-16 17:39:28 +00:00
res = res.follow()
backend.reload(logged_user)
2023-03-16 17:39:28 +00:00
assert logged_user.photo is None
2023-03-16 17:39:28 +00:00
# Photo deletion AND upload, this should never happen
res = testclient.get("/profile/user", status=200)
2023-07-20 16:43:28 +00:00
form = res.forms["baseform"]
form["photo"] = Upload("logo.jpg", jpeg_photo)
form["photo_delete"] = True
res = form.submit(name="action", value="edit-profile")
2023-05-30 07:44:11 +00:00
assert ("success", "Profile updated successfully.") in res.flashes
2023-03-16 17:39:28 +00:00
res = res.follow()
backend.reload(logged_user)
2023-03-16 17:39:28 +00:00
assert logged_user.photo is None
2023-03-16 17:39:28 +00:00
def test_photo_on_profile_creation(testclient, jpeg_photo, logged_admin, backend):
2023-03-16 17:39:28 +00:00
res = testclient.get("/users", status=200)
assert backend.get(models.User, user_name="foobar") is None
2023-03-16 17:39:28 +00:00
res.mustcontain(no="foobar")
res = testclient.get("/profile", status=200)
2023-07-20 16:43:28 +00:00
form = res.forms["baseform"]
form["photo"] = Upload("logo.jpg", jpeg_photo)
form["user_name"] = "foobar"
form["family_name"] = "Abitbol"
form["emails-0"] = "george@abitbol.test"
2023-07-20 16:43:28 +00:00
res = form.submit(name="action", value="edit-profile", status=302).follow(
status=200
)
2023-03-16 17:39:28 +00:00
user = backend.get(models.User, user_name="foobar")
assert user.photo == jpeg_photo
backend.delete(user)
2023-03-16 17:39:28 +00:00
def test_photo_deleted_on_profile_creation(
testclient, jpeg_photo, logged_admin, backend
):
2023-03-16 17:39:28 +00:00
res = testclient.get("/users", status=200)
assert backend.get(models.User, user_name="foobar") is None
2023-03-16 17:39:28 +00:00
res.mustcontain(no="foobar")
res = testclient.get("/profile", status=200)
2023-07-20 16:43:28 +00:00
form = res.forms["baseform"]
form["photo"] = Upload("logo.jpg", jpeg_photo)
form["photo_delete"] = True
form["user_name"] = "foobar"
form["family_name"] = "Abitbol"
form["emails-0"] = "george@abitbol.test"
2023-07-20 16:43:28 +00:00
res = form.submit(name="action", value="edit-profile", status=302).follow(
status=200
)
2023-03-16 17:39:28 +00:00
user = backend.get(models.User, user_name="foobar")
assert user.photo is None
backend.delete(user)