canaille-globuzma/tests/core/test_profile_photo.py
Éloi Rivard 77667c6f52
refactor: all domains used in the unit test suite are now .test
this ensures they will never be valid, and will never generate real
world requests
2024-11-20 23:30:48 +01:00

148 lines
4.2 KiB
Python

import datetime
from webtest import Upload
from canaille.app import models
def test_photo(testclient, user, jpeg_photo, backend):
user.photo = jpeg_photo
backend.save(user)
backend.reload(user)
res = testclient.get("/profile/user/photo")
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
def test_photo_invalid_user(testclient, user):
testclient.get("/profile/invalid/photo", status=404)
def test_photo_absent(testclient, user):
assert not user.photo
testclient.get("/profile/user/photo", status=404)
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,
):
# Add a photo
res = testclient.get("/profile/user", status=200)
form = res.forms["baseform"]
form["photo"] = Upload("logo.jpg", jpeg_photo)
form["photo_delete"] = False
res = form.submit(name="action", value="edit-profile")
assert ("success", "Profile updated successfully.") in res.flashes
res = res.follow()
backend.reload(logged_user)
assert logged_user.photo == jpeg_photo
# No change
res = testclient.get("/profile/user", status=200)
form = res.forms["baseform"]
form["photo_delete"] = False
res = form.submit(name="action", value="edit-profile")
assert ("success", "Profile updated successfully.") in res.flashes
res = res.follow()
backend.reload(logged_user)
assert logged_user.photo == jpeg_photo
# Photo deletion
res = testclient.get("/profile/user", status=200)
form = res.forms["baseform"]
form["photo_delete"] = True
res = form.submit(name="action", value="edit-profile")
assert ("success", "Profile updated successfully.") in res.flashes
res = res.follow()
backend.reload(logged_user)
assert logged_user.photo is None
# Photo deletion AND upload, this should never happen
res = testclient.get("/profile/user", status=200)
form = res.forms["baseform"]
form["photo"] = Upload("logo.jpg", jpeg_photo)
form["photo_delete"] = True
res = form.submit(name="action", value="edit-profile")
assert ("success", "Profile updated successfully.") in res.flashes
res = res.follow()
backend.reload(logged_user)
assert logged_user.photo is None
def test_photo_on_profile_creation(testclient, jpeg_photo, logged_admin, backend):
res = testclient.get("/users", status=200)
assert backend.get(models.User, user_name="foobar") is None
res.mustcontain(no="foobar")
res = testclient.get("/profile", status=200)
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"
res = form.submit(name="action", value="edit-profile", status=302).follow(
status=200
)
user = backend.get(models.User, user_name="foobar")
assert user.photo == jpeg_photo
backend.delete(user)
def test_photo_deleted_on_profile_creation(
testclient, jpeg_photo, logged_admin, backend
):
res = testclient.get("/users", status=200)
assert backend.get(models.User, user_name="foobar") is None
res.mustcontain(no="foobar")
res = testclient.get("/profile", status=200)
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"
res = form.submit(name="action", value="edit-profile", status=302).follow(
status=200
)
user = backend.get(models.User, user_name="foobar")
assert user.photo is None
backend.delete(user)