Skip to content

Commit

Permalink
alias tests
Browse files Browse the repository at this point in the history
  • Loading branch information
brassy-endomorph committed Sep 24, 2024
1 parent 5abb59f commit c5105b3
Show file tree
Hide file tree
Showing 3 changed files with 197 additions and 0 deletions.
10 changes: 10 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,16 @@ def _pgp_user(client: FlaskClient, user: User) -> None:
db.session.commit()


@pytest.fixture()
def user_alias(app: Flask, user: User) -> Username:
uuid_ish = str(uuid4())[0:12]
username = Username(user_id=user.id, _username=f"test-{uuid_ish}", is_primary=False)
db.session.add(username)
db.session.commit()

return username


@pytest.fixture()
def message(app: Flask, user: User) -> Message:
msg = Message(content=str(uuid4()), username_id=user.primary_username.id)
Expand Down
26 changes: 26 additions & 0 deletions tests/test_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,32 @@ def test_profile_submit_message(client: FlaskClient, user: User) -> None:
assert msg_content in response.text, response.text


@pytest.mark.usefixtures("_authenticated_user")
def test_profile_submit_message_to_alias(
client: FlaskClient, user: User, user_alias: Username
) -> None:
msg_content = "This is a test message."

response = client.post(
url_for("profile", username=user_alias.username),
data={
"content": msg_content,
"client_side_encrypted": "false",
"captcha_answer": get_captcha_from_session(client, user.primary_username.username),
},
follow_redirects=True,
)
assert response.status_code == 200, response.text
assert "Message submitted successfully." in response.text

message = db.session.scalars(db.select(Message).filter_by(username_id=user_alias.id)).one()
assert message.content == msg_content

response = client.get(url_for("inbox", username=user_alias.username), follow_redirects=True)
assert response.status_code == 200
assert msg_content in response.text, response.text


@pytest.mark.usefixtures("_authenticated_user")
def test_profile_submit_message_with_contact_method(client: FlaskClient, user: User) -> None:
message_content = "This is a test message."
Expand Down
161 changes: 161 additions & 0 deletions tests/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,48 @@ def test_update_smtp_settings_default_forwarding(
assert updated_user.smtp_sender is None


@pytest.mark.usefixtures("_authenticated_user")
def test_add_alias(client: FlaskClient, user: User) -> None:
alias_username = str(uuid4())[0:12]
response = client.post(
url_for("settings.index"),
data={
"username": alias_username,
"new_alias": "", # html form
},
follow_redirects=True,
)
assert response.status_code == 200
assert "Alias created successfully" in response.text

alias = db.session.scalars(db.select(Username).filter_by(_username=alias_username)).one()
assert not alias.is_primary
assert alias.user_id == user.id


@pytest.mark.usefixtures("_authenticated_user")
def test_add_alias_duplicate(client: FlaskClient, user: User) -> None:
response = client.post(
url_for("settings.index"),
data={
"username": user.primary_username.username,
"new_alias": "", # html form
},
follow_redirects=True,
)
assert "This username is already taken." in response.text
assert db.session.scalar(db.func.count(Username.id)) == 1


@pytest.mark.usefixtures("_authenticated_user")
def test_alias_page_loads(client: FlaskClient, user: User, user_alias: Username) -> None:
response = client.get(
url_for("settings.alias", username_id=user_alias.id), follow_redirects=True
)
assert response.status_code == 200
assert f"Alias: @{user_alias.username}" in response.text


@pytest.mark.usefixtures("_authenticated_user")
def test_delete_account(client: FlaskClient, user: User, message: Message) -> None:
# save these because SqlAlchemy is too smart about nullifying them on deletion
Expand All @@ -317,3 +359,122 @@ def test_delete_account(client: FlaskClient, user: User, message: Message) -> No
assert db.session.scalars(db.select(User).filter_by(id=user_id)).one_or_none() is None
assert db.session.scalars(db.select(Username).filter_by(id=username_id)).one_or_none() is None
assert db.session.scalars(db.select(Message).filter_by(id=msg_id)).one_or_none() is None


@pytest.mark.usefixtures("_authenticated_user")
def test_alias_change_display_name(client: FlaskClient, user: User, user_alias: Username) -> None:
new_display_name = (user_alias.display_name or "") + "_NEW"

response = client.post(
url_for("settings.alias", username_id=user_alias.id),
data={
"display_name": new_display_name,
"update_display_name": "", # html form
},
follow_redirects=True,
)
assert response.status_code == 200
assert "Display name updated successfully" in response.text

updated_user = db.session.scalars(
db.select(Username).filter_by(_username=user_alias.username)
).one()
assert updated_user.display_name == new_display_name


@pytest.mark.usefixtures("_authenticated_user")
def test_change_bio(client: FlaskClient, user: User) -> None:
data = {
"bio": str(uuid4()),
"update_bio": "", # html form
}

for i in range(1, 5):
data[f"extra_field_label{i}"] = str(uuid4())
data[f"extra_field_value{i}"] = str(uuid4())

response = client.post(
url_for("settings.index"),
data=data,
follow_redirects=True,
)
assert response.status_code == 200
assert "Bio and fields updated successfully" in response.text

updated_user = db.session.scalars(
db.select(Username).filter_by(_username=user.primary_username.username)
).one()
assert updated_user.bio == data["bio"]

for i in range(1, 5):
label = f"extra_field_label{i}"
value = f"extra_field_value{i}"
assert getattr(updated_user, label) == data[label]
assert getattr(updated_user, value) == data[value]


@pytest.mark.usefixtures("_authenticated_user")
def test_alias_change_bio(client: FlaskClient, user: User, user_alias: Username) -> None:
data = {
"bio": str(uuid4()),
"update_bio": "", # html form
}

for i in range(1, 5):
data[f"extra_field_label{i}"] = str(uuid4())
data[f"extra_field_value{i}"] = str(uuid4())

response = client.post(
url_for("settings.alias", username_id=user_alias.id),
data=data,
follow_redirects=True,
)
assert response.status_code == 200
assert "Bio and fields updated successfully" in response.text

updated_user = db.session.scalars(
db.select(Username).filter_by(_username=user_alias.username)
).one()
assert updated_user.bio == data["bio"]

for i in range(1, 5):
label = f"extra_field_label{i}"
value = f"extra_field_value{i}"
assert getattr(updated_user, label) == data[label]
assert getattr(updated_user, value) == data[value]


@pytest.mark.usefixtures("_authenticated_user")
def test_change_directory_visibility(client: FlaskClient, user: User) -> None:
original_visibility = user.primary_username.show_in_directory
resp = client.post(
url_for("settings.index"),
data={
"show_in_directory": not original_visibility,
"update_directory_visibility": "", # html form
},
follow_redirects=True,
)
assert resp.status_code == 200
assert "Directory visibility updated successfully" in resp.text
assert db.session.scalar(
db.select(Username.show_in_directory).filter_by(id=user.primary_username.id)
)


@pytest.mark.usefixtures("_authenticated_user")
def test_alias_change_directory_visibility(
client: FlaskClient, user: User, user_alias: Username
) -> None:
original_visibility = user_alias.show_in_directory
resp = client.post(
url_for("settings.alias", username_id=user_alias.id),
data={
"show_in_directory": not original_visibility,
"update_directory_visibility": "", # html form
},
follow_redirects=True,
)
assert resp.status_code == 200
assert "Directory visibility updated successfully" in resp.text
assert db.session.scalar(db.select(Username.show_in_directory).filter_by(id=user_alias.id))

0 comments on commit c5105b3

Please sign in to comment.