Skip to content

Commit

Permalink
refactor oidc forms tests to remove stubs (pypi#17569)
Browse files Browse the repository at this point in the history
  • Loading branch information
ewdurbin authored Feb 6, 2025
1 parent 5e7b834 commit ef958a6
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 94 deletions.
45 changes: 22 additions & 23 deletions tests/unit/oidc/forms/test_activestate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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",
Expand All @@ -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(),
)

Expand All @@ -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,
)

Expand All @@ -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,
)

Expand Down
44 changes: 22 additions & 22 deletions tests/unit/oidc/forms/test_github.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -47,33 +50,32 @@ 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,
)

# We're testing only the basic validation here.
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,
)

Expand All @@ -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,
)

Expand Down
47 changes: 23 additions & 24 deletions tests/unit/oidc/forms/test_gitlab.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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,
)

Expand All @@ -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,
)

Expand Down Expand Up @@ -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.
Expand Down
49 changes: 24 additions & 25 deletions tests/unit/oidc/forms/test_google.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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,
)

Expand All @@ -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,
)

Expand All @@ -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,
Expand All @@ -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,
Expand Down

0 comments on commit ef958a6

Please sign in to comment.