Skip to content

Commit

Permalink
Test rejections for setting initial displayed age
Browse files Browse the repository at this point in the history
  • Loading branch information
charmander committed Mar 18, 2024
1 parent 3dbe9d8 commit 0f4ea03
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 8 deletions.
21 changes: 15 additions & 6 deletions weasyl/test/web/test_characters.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,30 @@ def _character_user(db):
return db_utils.create_user(username='character_test')


@pytest.fixture(name='character')
def _character(app, db, character_user):
def create_character(app, character_user, **kwargs):
cookie = db_utils.create_session(character_user)

form = dict(
_BASE_FORM,
submitfile=webtest.Upload('wesley', read_asset('img/wesley1.png'), 'image/png'),
)
for field in kwargs.keys():
if field not in _BASE_FORM:
raise KeyError(field)

form = {
**_BASE_FORM,
"submitfile": webtest.Upload('wesley', read_asset('img/wesley1.png'), 'image/png'),
**kwargs,
}

resp = app.post('/submit/character', form, headers={'Cookie': cookie}).follow(headers={'Cookie': cookie})
charid = int(resp.html.find('input', {'name': 'charid'})['value'])

return charid


@pytest.fixture(name='character')
def _character(app, db, character_user):
return create_character(app, character_user)


@pytest.mark.usefixtures('db', 'character_user')
def test_list_empty(app):
resp = app.get('/characters/character_test')
Expand Down
10 changes: 8 additions & 2 deletions weasyl/test/web/test_journals.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,17 @@ def test_list_unicode_username(app):
assert titles == [u'Unícode journal 😊']


def create_journal(app, user, *, rating):
resp = app.post("/submit/journal", {"title": "Created journal", "rating": rating, "content": "A journal"})
assert resp.status_int == 303
return resp


@pytest.mark.usefixtures('db', 'journal_user')
def test_create(app, journal_user):
cookie = db_utils.create_session(journal_user)
app.set_cookie(*db_utils.create_session(journal_user).split("=", 1))

app.post('/submit/journal', {'title': u'Created journal', 'rating': '10', 'content': u'A journal'}, headers={'Cookie': cookie})
create_journal(app, journal_user, rating="10")

resp = app.get('/~journal_test')
assert resp.html.find(id='user-journal').h4.string == u'Created journal'
Expand Down
89 changes: 89 additions & 0 deletions weasyl/test/web/test_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import arrow
import pytest

from weasyl.errorcode import error_messages
from weasyl.test import db_utils
from weasyl.test.web.test_characters import create_character
from weasyl.test.web.test_journals import create_journal


@contextmanager
Expand Down Expand Up @@ -87,3 +90,89 @@ def test_age_set_and_display(app):
resp = app.get("/control/editprofile")
form = _find_form(resp, action="/control/editprofile")
assert (form["show_age"].checked, form["birthdate-month"].value, form["birthdate-year"].value) == (True, str(birthdate.month), str(birthdate.year)), "birthdate can’t be changed once set"


@pytest.mark.usefixtures("db", "cache")
def test_age_terms(app):
u13_birthdate = arrow.utcnow().shift(years=-13, months=1)

user = db_utils.create_user(username="profiletest")
app.set_cookie(*db_utils.create_session(user).split("=", 1))

resp = app.get("/control/editprofile")
form = _find_form(resp, action="/control/editprofile")
form["show_age"].checked = True
form["birthdate-month"].value = u13_birthdate.month
form["birthdate-year"].value = u13_birthdate.year

resp = form.submit(expect_errors=True)
assert resp.status_int == 422, "can’t display age under 13"
assert resp.html.find(id="error_content").p.text.strip() == error_messages["birthdayInconsistentWithTerms"]

with _guest(app):
resp = app.get("/~profiletest")
assert resp.html.find(id="user-id").text.strip() == ""


def _edit_character(app, user):
charid = create_character(app, user, rating="10")
resp = (
app.get(f"/character/{charid}")
.click("Edit Character Details")
)
form = _find_form(resp, action="/edit/character")
form["rating"] = "30"
form.submit(status=303)


def _edit_journal(app, user):
resp = (
create_journal(app, user, rating="10")
.follow()
.click("Edit Journal Details")
)
form = _find_form(resp, action="/edit/journal")
form["rating"] = "30"
form.submit(status=303)


@pytest.mark.usefixtures("db", "cache")
@pytest.mark.parametrize(("create_post", "expect_assertion"), [
(None, False),
(lambda app, user: create_character(app, user, rating="10"), False),
(lambda app, user: create_character(app, user, rating="30"), True),
(_edit_character, True),
(lambda app, user: create_journal(app, user, rating="10"), False),
(lambda app, user: create_journal(app, user, rating="40"), True),
(_edit_journal, True),
])
def test_assert_adult(app, create_post, expect_assertion):
u18_birthdate = arrow.utcnow().shift(years=-18, months=1)

forward_user = db_utils.create_user(username="forwarduser")
app.set_cookie(*db_utils.create_session(forward_user).split("=", 1))

if create_post is not None:
create_post(app, forward_user)

resp = app.get("/control/editprofile")
form = _find_form(resp, action="/control/editprofile")
form["show_age"].checked = True
form["birthdate-month"].value = u18_birthdate.month
form["birthdate-year"].value = u18_birthdate.year

if expect_assertion:
resp = form.submit(expect_errors=True)
assert resp.status_int == 422, "can’t display age under 18 after using age-restricted ratings"
assert resp.html.find(id="error_content").p.text.strip() == error_messages["birthdayInconsistentWithRating"]

with _guest(app):
resp = app.get("/~forwarduser")
assert resp.html.find(id="user-id").text.strip() == ""
else:
resp = form.submit()
assert resp.status_int == 303, "can display age under 18 after not using age-restricted ratings"

with _guest(app):
resp = app.get("/~forwarduser")
assert resp.html.find(id="user-id").text.strip() == "17"

0 comments on commit 0f4ea03

Please sign in to comment.