Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ module = [
"sqlalchemy.*", # https://docs.sqlalchemy.org/en/14/orm/extensions/mypy.html
"transaction.*",
"venusian.*",
"webob.*", # https://github.com/python/typeshed/pull/9874
"whitenoise.*",
"wtforms.*", # https://github.com/wtforms/wtforms/issues/618
"yara.*",
Expand Down
156 changes: 86 additions & 70 deletions tests/unit/accounts/test_forms.py

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions tests/unit/admin/views/test_banners.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,18 +218,21 @@ def test_preview_banner(self, db_request):

class TestBannerForm:
def test_required_fields(self, banner_data):
form = views.BannerForm(data={})
form = views.BannerForm(formdata=MultiDict())

assert form.validate() is False
assert set(form.errors) == set(banner_data)

def test_valid_data(self, banner_data):
form = views.BannerForm(data=banner_data)
form = views.BannerForm(formdata=MultiDict(banner_data))
assert form.validate() is True
data = form.data
defaults = {
"fa_icon": Banner.DEFAULT_FA_ICON,
"active": False,
"link_label": Banner.DEFAULT_BTN_LABEL,
}

# Mash the `end` into a date object to match the form's coerced result.
banner_data["end"] = datetime.date.fromisoformat(banner_data["end"])
assert data == {**banner_data, **defaults}
10 changes: 5 additions & 5 deletions tests/unit/admin/views/test_sponsors.py
Original file line number Diff line number Diff line change
Expand Up @@ -260,29 +260,29 @@ def test_required_fields(self):
assert field in form.errors

def test_valid_data(self):
form = views.SponsorForm(data=self.data)
form = views.SponsorForm(formdata=MultiDict(self.data))
assert form.validate() is True

def test_white_logo_is_required_for_footer_display(self):
self.data["footer"] = True

# don't validate without logo
form = views.SponsorForm(data=self.data)
form = views.SponsorForm(formdata=MultiDict(self.data))
assert form.validate() is False
assert "white_logo" in form.errors

self.data["white_logo_url"] = "http://domain.com/white-logo.jpg"
form = views.SponsorForm(data=self.data)
form = views.SponsorForm(formdata=MultiDict(self.data))
assert form.validate() is True

def test_white_logo_is_required_for_infra_display(self):
self.data["infra_sponsor"] = True

# don't validate without logo
form = views.SponsorForm(data=self.data)
form = views.SponsorForm(formdata=MultiDict(self.data))
assert form.validate() is False
assert "white_logo" in form.errors

self.data["white_logo_url"] = "http://domain.com/white-logo.jpg"
form = views.SponsorForm(data=self.data)
form = views.SponsorForm(formdata=MultiDict(self.data))
assert form.validate() is True
62 changes: 36 additions & 26 deletions tests/unit/manage/test_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ def test_validate_username_with_user(self):
[
("", "Select role"),
("invalid", "Not a valid choice."),
(None, "Not a valid choice."),
(None, "Select role"),
],
)
def test_validate_role_name_fails(self, value, expected):
Expand All @@ -81,7 +81,7 @@ def test_creation(self):
def test_email_exists_error(self, pyramid_config):
user_id = pretend.stub()
form = forms.AddEmailForm(
data={"email": "[email protected]"},
formdata=MultiDict({"email": "[email protected]"}),
user_id=user_id,
user_service=pretend.stub(find_userid_by_email=lambda _: user_id),
)
Expand All @@ -95,7 +95,7 @@ def test_email_exists_error(self, pyramid_config):

def test_email_exists_other_account_error(self, pyramid_config):
form = forms.AddEmailForm(
data={"email": "[email protected]"},
formdata=MultiDict({"email": "[email protected]"}),
user_id=pretend.stub(),
user_service=pretend.stub(find_userid_by_email=lambda _: pretend.stub()),
)
Expand All @@ -109,7 +109,7 @@ def test_email_exists_other_account_error(self, pyramid_config):

def test_prohibited_email_error(self, pyramid_config):
form = forms.AddEmailForm(
data={"email": "[email protected]"},
formdata=MultiDict({"email": "[email protected]"}),
user_service=pretend.stub(find_userid_by_email=lambda _: None),
user_id=pretend.stub(),
)
Expand Down Expand Up @@ -148,7 +148,7 @@ def test_verify_totp_invalid(self, monkeypatch):
monkeypatch.setattr(otp, "verify_totp", verify_totp)

form = forms.ProvisionTOTPForm(
data={"totp_value": "123456"}, totp_secret=pretend.stub()
formdata=MultiDict({"totp_value": "123456"}), totp_secret=pretend.stub()
)
assert not form.validate()
assert form.totp_value.errors.pop() == "Invalid TOTP code. Try again?"
Expand All @@ -158,7 +158,7 @@ def test_verify_totp_valid(self, monkeypatch):
monkeypatch.setattr(otp, "verify_totp", verify_totp)

form = forms.ProvisionTOTPForm(
data={"totp_value": "123456"}, totp_secret=pretend.stub()
formdata=MultiDict({"totp_value": "123456"}), totp_secret=pretend.stub()
)
assert form.validate()

Expand All @@ -182,10 +182,9 @@ def test_validate_confirm_password(self):
),
)
form = forms.DeleteTOTPForm(
username="username",
formdata=MultiDict({"username": "username", "password": "password"}),
request=request,
user_service=user_service,
password="password",
)

assert form.validate()
Expand Down Expand Up @@ -218,7 +217,7 @@ def test_verify_assertion_invalid_json(self):
)

form = forms.ProvisionWebAuthnForm(
data={"credential": "invalid json", "label": "fake label"},
formdata=MultiDict({"credential": "invalid json", "label": "fake label"}),
user_service=user_service,
user_id=pretend.stub(),
challenge=pretend.stub(),
Expand All @@ -239,7 +238,7 @@ def test_verify_assertion_invalid(self):
get_webauthn_by_label=pretend.call_recorder(lambda *a: None),
)
form = forms.ProvisionWebAuthnForm(
data={"credential": "{}", "label": "fake label"},
formdata=MultiDict({"credential": "{}", "label": "fake label"}),
user_service=user_service,
user_id=pretend.stub(),
challenge=pretend.stub(),
Expand All @@ -255,7 +254,7 @@ def test_verify_label_missing(self):
verify_webauthn_credential=lambda *a, **kw: pretend.stub()
)
form = forms.ProvisionWebAuthnForm(
data={"credential": "{}"},
formdata=MultiDict({"credential": "{}"}),
user_service=user_service,
user_id=pretend.stub(),
challenge=pretend.stub(),
Expand All @@ -272,7 +271,7 @@ def test_verify_label_already_in_use(self):
get_webauthn_by_label=pretend.call_recorder(lambda *a: pretend.stub()),
)
form = forms.ProvisionWebAuthnForm(
data={"credential": "{}", "label": "fake label"},
formdata=MultiDict({"credential": "{}", "label": "fake label"}),
user_service=user_service,
user_id=pretend.stub(),
challenge=pretend.stub(),
Expand All @@ -290,7 +289,7 @@ def test_creates_validated_credential(self):
get_webauthn_by_label=pretend.call_recorder(lambda *a: None),
)
form = forms.ProvisionWebAuthnForm(
data={"credential": "{}", "label": "fake label"},
formdata=MultiDict({"credential": "{}", "label": "fake label"}),
user_service=user_service,
user_id=pretend.stub(),
challenge=pretend.stub(),
Expand Down Expand Up @@ -323,7 +322,7 @@ def test_validate_label_not_in_use(self):
get_webauthn_by_label=pretend.call_recorder(lambda *a: None)
)
form = forms.DeleteWebAuthnForm(
data={"label": "fake label"},
formdata=MultiDict({"label": "fake label"}),
user_service=user_service,
user_id=pretend.stub(),
)
Expand All @@ -337,7 +336,7 @@ def test_creates_webauthn_attribute(self):
get_webauthn_by_label=pretend.call_recorder(lambda *a: fake_webauthn)
)
form = forms.DeleteWebAuthnForm(
data={"label": "fake label"},
formdata=MultiDict({"label": "fake label"}),
user_service=user_service,
user_id=pretend.stub(),
)
Expand All @@ -363,7 +362,7 @@ def test_creation(self):

def test_validate_description_missing(self):
form = forms.CreateMacaroonForm(
data={"token_scope": "scope:user"},
formdata=MultiDict({"token_scope": "scope:user"}),
user_id=pretend.stub(),
macaroon_service=pretend.stub(),
project_names=pretend.stub(),
Expand All @@ -374,7 +373,7 @@ def test_validate_description_missing(self):

def test_validate_description_in_use(self):
form = forms.CreateMacaroonForm(
data={"description": "dummy", "token_scope": "scope:user"},
formdata=MultiDict({"description": "dummy", "token_scope": "scope:user"}),
user_id=pretend.stub(),
macaroon_service=pretend.stub(
get_macaroon_by_description=lambda *a: pretend.stub()
Expand All @@ -387,7 +386,7 @@ def test_validate_description_in_use(self):

def test_validate_token_scope_missing(self):
form = forms.CreateMacaroonForm(
data={"description": "dummy"},
formdata=MultiDict({"description": "dummy"}),
user_id=pretend.stub(),
macaroon_service=pretend.stub(get_macaroon_by_description=lambda *a: None),
project_names=pretend.stub(),
Expand All @@ -398,7 +397,9 @@ def test_validate_token_scope_missing(self):

def test_validate_token_scope_unspecified(self):
form = forms.CreateMacaroonForm(
data={"description": "dummy", "token_scope": "scope:unspecified"},
formdata=MultiDict(
{"description": "dummy", "token_scope": "scope:unspecified"}
),
user_id=pretend.stub(),
macaroon_service=pretend.stub(get_macaroon_by_description=lambda *a: None),
project_names=pretend.stub(),
Expand All @@ -412,7 +413,7 @@ def test_validate_token_scope_unspecified(self):
)
def test_validate_token_scope_invalid_format(self, scope):
form = forms.CreateMacaroonForm(
data={"description": "dummy", "token_scope": scope},
formdata=MultiDict({"description": "dummy", "token_scope": scope}),
user_id=pretend.stub(),
macaroon_service=pretend.stub(get_macaroon_by_description=lambda *a: None),
project_names=pretend.stub(),
Expand All @@ -423,7 +424,9 @@ def test_validate_token_scope_invalid_format(self, scope):

def test_validate_token_scope_invalid_project(self):
form = forms.CreateMacaroonForm(
data={"description": "dummy", "token_scope": "scope:project:foo"},
formdata=MultiDict(
{"description": "dummy", "token_scope": "scope:project:foo"}
),
user_id=pretend.stub(),
macaroon_service=pretend.stub(get_macaroon_by_description=lambda *a: None),
project_names=["bar"],
Expand All @@ -434,7 +437,7 @@ def test_validate_token_scope_invalid_project(self):

def test_validate_token_scope_valid_user(self):
form = forms.CreateMacaroonForm(
data={"description": "dummy", "token_scope": "scope:user"},
formdata=MultiDict({"description": "dummy", "token_scope": "scope:user"}),
user_id=pretend.stub(),
macaroon_service=pretend.stub(get_macaroon_by_description=lambda *a: None),
project_names=pretend.stub(),
Expand All @@ -444,7 +447,9 @@ def test_validate_token_scope_valid_user(self):

def test_validate_token_scope_valid_project(self):
form = forms.CreateMacaroonForm(
data={"description": "dummy", "token_scope": "scope:project:foo"},
formdata=MultiDict(
{"description": "dummy", "token_scope": "scope:project:foo"}
),
user_id=pretend.stub(),
macaroon_service=pretend.stub(get_macaroon_by_description=lambda *a: None),
project_names=["foo"],
Expand Down Expand Up @@ -478,7 +483,7 @@ def test_validate_macaroon_id_invalid(self):
remote_addr="1.2.3.4", banned=pretend.stub(by_ip=lambda ip_address: False)
)
form = forms.DeleteMacaroonForm(
data={"macaroon_id": pretend.stub(), "password": "password"},
formdata=MultiDict({"macaroon_id": pretend.stub(), "password": "password"}),
request=request,
macaroon_service=macaroon_service,
user_service=user_service,
Expand All @@ -499,10 +504,15 @@ def test_validate_macaroon_id(self):
remote_addr="1.2.3.4", banned=pretend.stub(by_ip=lambda ip_address: False)
)
form = forms.DeleteMacaroonForm(
data={"macaroon_id": pretend.stub(), "password": "password"},
formdata=MultiDict(
{
"macaroon_id": pretend.stub(),
"username": "username",
"password": "password",
}
),
request=request,
macaroon_service=macaroon_service,
username="username",
user_service=user_service,
)

Expand Down
Loading