canaille-globuzma/tests/core/test_profile_photo.py

135 lines
3.9 KiB
Python
Raw Normal View History

import datetime
from canaille.app import models
2023-03-16 17:39:28 +00:00
from webtest import Upload
def test_photo(testclient, user, jpeg_photo):
user.photo = [jpeg_photo]
2023-03-16 17:39:28 +00:00
user.save()
user.reload()
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,
):
# Add a photo
res = testclient.get("/profile/user", status=200)
res.form["photo"] = Upload("logo.jpg", jpeg_photo)
res.form["photo_delete"] = False
2023-03-16 17:39:28 +00:00
res = res.form.submit(name="action", value="edit")
assert ("success", "Profile updated successfuly.") in res.flashes
res = res.follow()
logged_user.reload()
2023-03-16 17:39:28 +00:00
assert [jpeg_photo] == logged_user.photo
2023-03-16 17:39:28 +00:00
# No change
res = testclient.get("/profile/user", status=200)
res.form["photo_delete"] = False
2023-03-16 17:39:28 +00:00
res = res.form.submit(name="action", value="edit")
assert ("success", "Profile updated successfuly.") in res.flashes
res = res.follow()
logged_user.reload()
2023-03-16 17:39:28 +00:00
assert [jpeg_photo] == logged_user.photo
2023-03-16 17:39:28 +00:00
# Photo deletion
res = testclient.get("/profile/user", status=200)
res.form["photo_delete"] = True
2023-03-16 17:39:28 +00:00
res = res.form.submit(name="action", value="edit")
assert ("success", "Profile updated successfuly.") in res.flashes
res = res.follow()
logged_user.reload()
2023-03-16 17:39:28 +00:00
assert logged_user.photo == []
2023-03-16 17:39:28 +00:00
# Photo deletion AND upload, this should never happen
res = testclient.get("/profile/user", status=200)
res.form["photo"] = Upload("logo.jpg", jpeg_photo)
res.form["photo_delete"] = True
2023-03-16 17:39:28 +00:00
res = res.form.submit(name="action", value="edit")
assert ("success", "Profile updated successfuly.") in res.flashes
res = res.follow()
logged_user.reload()
2023-03-16 17:39:28 +00:00
assert [] == logged_user.photo
2023-03-16 17:39:28 +00:00
def test_photo_on_profile_creation(testclient, jpeg_photo, logged_admin):
2023-03-16 17:39:28 +00:00
res = testclient.get("/users", status=200)
assert models.User.get_from_login("foobar") is None
2023-03-16 17:39:28 +00:00
res.mustcontain(no="foobar")
res = testclient.get("/profile", status=200)
res.form["photo"] = Upload("logo.jpg", jpeg_photo)
res.form["user_name"] = "foobar"
res.form["family_name"] = "Abitbol"
res.form["email"] = "george@abitbol.com"
2023-03-16 17:39:28 +00:00
res = res.form.submit(name="action", value="edit", status=302).follow(status=200)
user = models.User.get_from_login("foobar")
assert user.photo == [jpeg_photo]
2023-03-16 17:39:28 +00:00
user.delete()
def test_photo_deleted_on_profile_creation(testclient, jpeg_photo, logged_admin):
2023-03-16 17:39:28 +00:00
res = testclient.get("/users", status=200)
assert models.User.get_from_login("foobar") is None
2023-03-16 17:39:28 +00:00
res.mustcontain(no="foobar")
res = testclient.get("/profile", status=200)
res.form["photo"] = Upload("logo.jpg", jpeg_photo)
res.form["photo_delete"] = True
res.form["user_name"] = "foobar"
res.form["family_name"] = "Abitbol"
res.form["email"] = "george@abitbol.com"
2023-03-16 17:39:28 +00:00
res = res.form.submit(name="action", value="edit", status=302).follow(status=200)
user = models.User.get_from_login("foobar")
assert user.photo == []
2023-03-16 17:39:28 +00:00
user.delete()