2023-03-17 23:51:09 +00:00
|
|
|
import datetime
|
|
|
|
|
2023-03-16 17:39:28 +00:00
|
|
|
from webtest import Upload
|
|
|
|
|
2024-03-15 18:58:06 +00:00
|
|
|
from canaille.app import models
|
|
|
|
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2024-04-14 18:31:43 +00:00
|
|
|
def test_photo(testclient, user, jpeg_photo, backend):
|
2023-11-22 13:47:48 +00:00
|
|
|
user.photo = jpeg_photo
|
2024-04-14 18:31:43 +00:00
|
|
|
backend.save(user)
|
2023-04-08 19:34:09 +00:00
|
|
|
user.reload()
|
2023-03-17 23:51:09 +00:00
|
|
|
|
2023-02-05 17:57:18 +00:00
|
|
|
res = testclient.get("/profile/user/photo")
|
2023-03-16 17:39:28 +00:00
|
|
|
assert res.body == jpeg_photo
|
2023-02-05 17:57:18 +00:00
|
|
|
assert res.last_modified == user.last_modified
|
2023-03-17 23:51:09 +00:00
|
|
|
etag = res.etag
|
|
|
|
assert etag
|
|
|
|
|
|
|
|
res = testclient.get(
|
2023-02-05 17:57:18 +00:00
|
|
|
"/profile/user/photo",
|
2023-03-17 23:51:09 +00:00
|
|
|
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(
|
2023-02-05 17:57:18 +00:00
|
|
|
"/profile/user/photo",
|
2023-03-17 23:51:09 +00:00
|
|
|
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):
|
2023-02-05 17:57:18 +00:00
|
|
|
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)
|
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()
|
|
|
|
|
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.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()
|
|
|
|
|
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.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()
|
|
|
|
|
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.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()
|
|
|
|
|
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.photo is None
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
2024-04-14 15:30:59 +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)
|
2024-04-14 15:30:59 +00:00
|
|
|
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.com"
|
|
|
|
res = form.submit(name="action", value="edit-profile", status=302).follow(
|
|
|
|
status=200
|
|
|
|
)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2024-04-14 15:30:59 +00:00
|
|
|
user = backend.get(models.User, user_name="foobar")
|
2023-11-15 17:20:13 +00:00
|
|
|
assert user.photo == jpeg_photo
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(user)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
|
|
|
|
2024-04-14 15:30:59 +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)
|
2024-04-14 15:30:59 +00:00
|
|
|
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.com"
|
|
|
|
res = form.submit(name="action", value="edit-profile", status=302).follow(
|
|
|
|
status=200
|
|
|
|
)
|
2023-03-16 17:39:28 +00:00
|
|
|
|
2024-04-14 15:30:59 +00:00
|
|
|
user = backend.get(models.User, user_name="foobar")
|
2023-11-15 17:20:13 +00:00
|
|
|
assert user.photo is None
|
2024-04-14 18:37:52 +00:00
|
|
|
backend.delete(user)
|