From ef958a648850ec7ef12262457e1b637c6c285ef4 Mon Sep 17 00:00:00 2001 From: Ee Durbin Date: Thu, 6 Feb 2025 10:09:48 -0500 Subject: [PATCH] refactor oidc forms tests to remove stubs (#17569) --- tests/unit/oidc/forms/test_activestate.py | 45 ++++++++++----------- tests/unit/oidc/forms/test_github.py | 44 ++++++++++---------- tests/unit/oidc/forms/test_gitlab.py | 47 +++++++++++----------- tests/unit/oidc/forms/test_google.py | 49 +++++++++++------------ 4 files changed, 91 insertions(+), 94 deletions(-) diff --git a/tests/unit/oidc/forms/test_activestate.py b/tests/unit/oidc/forms/test_activestate.py index e6a38094e081..9db9fe34e5b4 100644 --- a/tests/unit/oidc/forms/test_activestate.py +++ b/tests/unit/oidc/forms/test_activestate.py @@ -19,7 +19,12 @@ from webob.multidict import MultiDict from warehouse.oidc.forms import activestate -from warehouse.packaging.interfaces import ProjectNameUnavailableExistingError + +from ....common.db.accounts import UserFactory +from ....common.db.packaging import ( + ProjectFactory, + RoleFactory, +) fake_username = "some-username" fake_org_name = "some-org" @@ -32,12 +37,9 @@ class TestPendingActiveStatePublisherForm: - def test_validate(self, monkeypatch): + def test_validate(self, monkeypatch, project_service): route_url = pretend.stub() - def check_project_name(name): - return None - data = MultiDict( { "organization": "some-org", @@ -49,7 +51,7 @@ def check_project_name(name): form = activestate.PendingActiveStatePublisherForm( MultiDict(data), route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=pretend.stub(), ) @@ -58,23 +60,22 @@ def check_project_name(name): monkeypatch.setattr(form, "_lookup_organization", lambda *o: None) - assert form._check_project_name == check_project_name + assert form._check_project_name == project_service.check_project_name assert form._route_url == route_url assert form.validate() - def test_validate_project_name_already_in_use_owner(self, pyramid_config): + def test_validate_project_name_already_in_use_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "") - user = pretend.stub() - owners = [user] - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + project = ProjectFactory.create(name="some-project") + RoleFactory.create(user=user, project=project) form = activestate.PendingActiveStatePublisherForm( route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) @@ -92,19 +93,17 @@ def check_project_name(name): ) ] - def test_validate_project_name_already_in_use_not_owner(self, pyramid_config): + def test_validate_project_name_already_in_use_not_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "") - user = pretend.stub() - owners = [] - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + ProjectFactory.create(name="some-project") form = activestate.PendingActiveStatePublisherForm( route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) diff --git a/tests/unit/oidc/forms/test_github.py b/tests/unit/oidc/forms/test_github.py index c1b1f2ec193d..5b4d4da20810 100644 --- a/tests/unit/oidc/forms/test_github.py +++ b/tests/unit/oidc/forms/test_github.py @@ -26,15 +26,18 @@ ProjectNameUnavailableStdlibError, ) +from ....common.db.accounts import UserFactory +from ....common.db.packaging import ( + ProjectFactory, + RoleFactory, +) + class TestPendingGitHubPublisherForm: - def test_validate(self, monkeypatch): + def test_validate(self, monkeypatch, project_service): route_url = pretend.stub() user = pretend.stub() - def check_project_name(name): - return None # Name is available. - data = MultiDict( { "owner": "some-owner", @@ -47,7 +50,7 @@ def check_project_name(name): MultiDict(data), api_token=pretend.stub(), route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) @@ -55,25 +58,24 @@ def check_project_name(name): owner_info = {"login": "fake-username", "id": "1234"} monkeypatch.setattr(form, "_lookup_owner", lambda o: owner_info) - assert form._check_project_name == check_project_name + assert form._check_project_name == project_service.check_project_name assert form._route_url == route_url assert form._user == user assert form.validate() - def test_validate_project_name_already_in_use_owner(self, pyramid_config): + def test_validate_project_name_already_in_use_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "") - user = pretend.stub() - owners = [user] - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + project = ProjectFactory.create(name="some-project") + RoleFactory.create(user=user, project=project) form = github.PendingGitHubPublisherForm( api_token="fake-token", route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) @@ -91,20 +93,18 @@ def check_project_name(name): ) ] - def test_validate_project_name_already_in_use_not_owner(self, pyramid_config): + def test_validate_project_name_already_in_use_not_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "") - user = pretend.stub() - owners = [] - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + ProjectFactory.create(name="some-project") form = github.PendingGitHubPublisherForm( api_token="fake-token", route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) diff --git a/tests/unit/oidc/forms/test_gitlab.py b/tests/unit/oidc/forms/test_gitlab.py index dd6c2d887106..1a19299434ae 100644 --- a/tests/unit/oidc/forms/test_gitlab.py +++ b/tests/unit/oidc/forms/test_gitlab.py @@ -17,17 +17,19 @@ from webob.multidict import MultiDict from warehouse.oidc.forms import gitlab -from warehouse.packaging.interfaces import ProjectNameUnavailableExistingError + +from ....common.db.accounts import UserFactory +from ....common.db.packaging import ( + ProjectFactory, + RoleFactory, +) class TestPendingGitLabPublisherForm: - def test_validate(self, monkeypatch): + def test_validate(self, project_service): route_url = pretend.stub() user = pretend.stub() - def check_project_name(name): - return None # Name is available. - data = MultiDict( { "namespace": "some-owner", @@ -39,29 +41,28 @@ def check_project_name(name): form = gitlab.PendingGitLabPublisherForm( MultiDict(data), route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) assert form._route_url == route_url - assert form._check_project_name == check_project_name + assert form._check_project_name == project_service.check_project_name assert form._user == user # We're testing only the basic validation here. assert form.validate() - def test_validate_project_name_already_in_use_owner(self, pyramid_config): - user = pretend.stub() - owners = [user] + def test_validate_project_name_already_in_use_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url") - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + project = ProjectFactory.create(name="some-project") + RoleFactory.create(user=user, project=project) form = gitlab.PendingGitLabPublisherForm( route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) @@ -79,19 +80,17 @@ def check_project_name(name): ) ] - def test_validate_project_name_already_in_use_not_owner(self, pyramid_config): - user = pretend.stub() - owners = [] + def test_validate_project_name_already_in_use_not_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url") - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + ProjectFactory.create(name="some-project") form = gitlab.PendingGitLabPublisherForm( route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) @@ -165,7 +164,7 @@ def test_validate(self, data): {"project": "some", "namespace": "some", "workflow_filepath": ""}, ], ) - def test_validate_basic_invalid_fields(self, monkeypatch, data): + def test_validate_basic_invalid_fields(self, data): form = gitlab.GitLabPublisherForm(MultiDict(data)) # We're testing only the basic validation here. diff --git a/tests/unit/oidc/forms/test_google.py b/tests/unit/oidc/forms/test_google.py index cca87c6637c5..7e519d290846 100644 --- a/tests/unit/oidc/forms/test_google.py +++ b/tests/unit/oidc/forms/test_google.py @@ -17,17 +17,19 @@ from webob.multidict import MultiDict from warehouse.oidc.forms import google -from warehouse.packaging.interfaces import ProjectNameUnavailableExistingError + +from ....common.db.accounts import UserFactory +from ....common.db.packaging import ( + ProjectFactory, + RoleFactory, +) class TestPendingGooglePublisherForm: - def test_validate(self, monkeypatch): + def test_validate(self, project_service): route_url = pretend.stub() user = pretend.stub() - def check_project_name(name): - return None # Name is available. - data = MultiDict( { "sub": "some-subject", @@ -38,28 +40,27 @@ def check_project_name(name): form = google.PendingGooglePublisherForm( MultiDict(data), route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) - assert form._check_project_name == check_project_name + assert form._check_project_name == project_service.check_project_name assert form._route_url == route_url assert form._user == user assert form.validate() - def test_validate_project_name_already_in_use_owner(self, pyramid_config): - user = pretend.stub() - owners = [user] + def test_validate_project_name_already_in_use_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url") - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + project = ProjectFactory.create(name="some-project") + RoleFactory.create(user=user, project=project) form = google.PendingGooglePublisherForm( route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) @@ -77,19 +78,17 @@ def check_project_name(name): ) ] - def test_validate_project_name_already_in_use_not_owner(self, pyramid_config): - user = pretend.stub() - owners = [] + def test_validate_project_name_already_in_use_not_owner( + self, pyramid_config, project_service + ): route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url") - def check_project_name(name): - raise ProjectNameUnavailableExistingError( - existing_project=pretend.stub(owners=owners) - ) + user = UserFactory.create() + ProjectFactory.create(name="some-project") form = google.PendingGooglePublisherForm( route_url=route_url, - check_project_name=check_project_name, + check_project_name=project_service.check_project_name, user=user, ) @@ -108,7 +107,7 @@ class TestGooglePublisherForm: ("some-subject", "some-email@example.com"), ], ) - def test_validate(self, monkeypatch, sub, email): + def test_validate(self, sub, email): data = MultiDict( { "sub": sub, @@ -128,7 +127,7 @@ def test_validate(self, monkeypatch, sub, email): ("some-subject", "invalid_email"), ], ) - def test_validate_basic_invalid_fields(self, monkeypatch, sub, email): + def test_validate_basic_invalid_fields(self, sub, email): data = MultiDict( { "sub": sub,