Skip to content

Commit ef958a6

Browse files
authored
refactor oidc forms tests to remove stubs (#17569)
1 parent 5e7b834 commit ef958a6

File tree

4 files changed

+91
-94
lines changed

4 files changed

+91
-94
lines changed

tests/unit/oidc/forms/test_activestate.py

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,12 @@
1919
from webob.multidict import MultiDict
2020

2121
from warehouse.oidc.forms import activestate
22-
from warehouse.packaging.interfaces import ProjectNameUnavailableExistingError
22+
23+
from ....common.db.accounts import UserFactory
24+
from ....common.db.packaging import (
25+
ProjectFactory,
26+
RoleFactory,
27+
)
2328

2429
fake_username = "some-username"
2530
fake_org_name = "some-org"
@@ -32,12 +37,9 @@
3237

3338

3439
class TestPendingActiveStatePublisherForm:
35-
def test_validate(self, monkeypatch):
40+
def test_validate(self, monkeypatch, project_service):
3641
route_url = pretend.stub()
3742

38-
def check_project_name(name):
39-
return None
40-
4143
data = MultiDict(
4244
{
4345
"organization": "some-org",
@@ -49,7 +51,7 @@ def check_project_name(name):
4951
form = activestate.PendingActiveStatePublisherForm(
5052
MultiDict(data),
5153
route_url=route_url,
52-
check_project_name=check_project_name,
54+
check_project_name=project_service.check_project_name,
5355
user=pretend.stub(),
5456
)
5557

@@ -58,23 +60,22 @@ def check_project_name(name):
5860

5961
monkeypatch.setattr(form, "_lookup_organization", lambda *o: None)
6062

61-
assert form._check_project_name == check_project_name
63+
assert form._check_project_name == project_service.check_project_name
6264
assert form._route_url == route_url
6365
assert form.validate()
6466

65-
def test_validate_project_name_already_in_use_owner(self, pyramid_config):
67+
def test_validate_project_name_already_in_use_owner(
68+
self, pyramid_config, project_service
69+
):
6670
route_url = pretend.call_recorder(lambda *args, **kwargs: "")
67-
user = pretend.stub()
68-
owners = [user]
6971

70-
def check_project_name(name):
71-
raise ProjectNameUnavailableExistingError(
72-
existing_project=pretend.stub(owners=owners)
73-
)
72+
user = UserFactory.create()
73+
project = ProjectFactory.create(name="some-project")
74+
RoleFactory.create(user=user, project=project)
7475

7576
form = activestate.PendingActiveStatePublisherForm(
7677
route_url=route_url,
77-
check_project_name=check_project_name,
78+
check_project_name=project_service.check_project_name,
7879
user=user,
7980
)
8081

@@ -92,19 +93,17 @@ def check_project_name(name):
9293
)
9394
]
9495

95-
def test_validate_project_name_already_in_use_not_owner(self, pyramid_config):
96+
def test_validate_project_name_already_in_use_not_owner(
97+
self, pyramid_config, project_service
98+
):
9699
route_url = pretend.call_recorder(lambda *args, **kwargs: "")
97-
user = pretend.stub()
98-
owners = []
99100

100-
def check_project_name(name):
101-
raise ProjectNameUnavailableExistingError(
102-
existing_project=pretend.stub(owners=owners)
103-
)
101+
user = UserFactory.create()
102+
ProjectFactory.create(name="some-project")
104103

105104
form = activestate.PendingActiveStatePublisherForm(
106105
route_url=route_url,
107-
check_project_name=check_project_name,
106+
check_project_name=project_service.check_project_name,
108107
user=user,
109108
)
110109

tests/unit/oidc/forms/test_github.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,18 @@
2626
ProjectNameUnavailableStdlibError,
2727
)
2828

29+
from ....common.db.accounts import UserFactory
30+
from ....common.db.packaging import (
31+
ProjectFactory,
32+
RoleFactory,
33+
)
34+
2935

3036
class TestPendingGitHubPublisherForm:
31-
def test_validate(self, monkeypatch):
37+
def test_validate(self, monkeypatch, project_service):
3238
route_url = pretend.stub()
3339
user = pretend.stub()
3440

35-
def check_project_name(name):
36-
return None # Name is available.
37-
3841
data = MultiDict(
3942
{
4043
"owner": "some-owner",
@@ -47,33 +50,32 @@ def check_project_name(name):
4750
MultiDict(data),
4851
api_token=pretend.stub(),
4952
route_url=route_url,
50-
check_project_name=check_project_name,
53+
check_project_name=project_service.check_project_name,
5154
user=user,
5255
)
5356

5457
# We're testing only the basic validation here.
5558
owner_info = {"login": "fake-username", "id": "1234"}
5659
monkeypatch.setattr(form, "_lookup_owner", lambda o: owner_info)
5760

58-
assert form._check_project_name == check_project_name
61+
assert form._check_project_name == project_service.check_project_name
5962
assert form._route_url == route_url
6063
assert form._user == user
6164
assert form.validate()
6265

63-
def test_validate_project_name_already_in_use_owner(self, pyramid_config):
66+
def test_validate_project_name_already_in_use_owner(
67+
self, pyramid_config, project_service
68+
):
6469
route_url = pretend.call_recorder(lambda *args, **kwargs: "")
65-
user = pretend.stub()
66-
owners = [user]
6770

68-
def check_project_name(name):
69-
raise ProjectNameUnavailableExistingError(
70-
existing_project=pretend.stub(owners=owners)
71-
)
71+
user = UserFactory.create()
72+
project = ProjectFactory.create(name="some-project")
73+
RoleFactory.create(user=user, project=project)
7274

7375
form = github.PendingGitHubPublisherForm(
7476
api_token="fake-token",
7577
route_url=route_url,
76-
check_project_name=check_project_name,
78+
check_project_name=project_service.check_project_name,
7779
user=user,
7880
)
7981

@@ -91,20 +93,18 @@ def check_project_name(name):
9193
)
9294
]
9395

94-
def test_validate_project_name_already_in_use_not_owner(self, pyramid_config):
96+
def test_validate_project_name_already_in_use_not_owner(
97+
self, pyramid_config, project_service
98+
):
9599
route_url = pretend.call_recorder(lambda *args, **kwargs: "")
96-
user = pretend.stub()
97-
owners = []
98100

99-
def check_project_name(name):
100-
raise ProjectNameUnavailableExistingError(
101-
existing_project=pretend.stub(owners=owners)
102-
)
101+
user = UserFactory.create()
102+
ProjectFactory.create(name="some-project")
103103

104104
form = github.PendingGitHubPublisherForm(
105105
api_token="fake-token",
106106
route_url=route_url,
107-
check_project_name=check_project_name,
107+
check_project_name=project_service.check_project_name,
108108
user=user,
109109
)
110110

tests/unit/oidc/forms/test_gitlab.py

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,19 @@
1717
from webob.multidict import MultiDict
1818

1919
from warehouse.oidc.forms import gitlab
20-
from warehouse.packaging.interfaces import ProjectNameUnavailableExistingError
20+
21+
from ....common.db.accounts import UserFactory
22+
from ....common.db.packaging import (
23+
ProjectFactory,
24+
RoleFactory,
25+
)
2126

2227

2328
class TestPendingGitLabPublisherForm:
24-
def test_validate(self, monkeypatch):
29+
def test_validate(self, project_service):
2530
route_url = pretend.stub()
2631
user = pretend.stub()
2732

28-
def check_project_name(name):
29-
return None # Name is available.
30-
3133
data = MultiDict(
3234
{
3335
"namespace": "some-owner",
@@ -39,29 +41,28 @@ def check_project_name(name):
3941
form = gitlab.PendingGitLabPublisherForm(
4042
MultiDict(data),
4143
route_url=route_url,
42-
check_project_name=check_project_name,
44+
check_project_name=project_service.check_project_name,
4345
user=user,
4446
)
4547

4648
assert form._route_url == route_url
47-
assert form._check_project_name == check_project_name
49+
assert form._check_project_name == project_service.check_project_name
4850
assert form._user == user
4951
# We're testing only the basic validation here.
5052
assert form.validate()
5153

52-
def test_validate_project_name_already_in_use_owner(self, pyramid_config):
53-
user = pretend.stub()
54-
owners = [user]
54+
def test_validate_project_name_already_in_use_owner(
55+
self, pyramid_config, project_service
56+
):
5557
route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url")
5658

57-
def check_project_name(name):
58-
raise ProjectNameUnavailableExistingError(
59-
existing_project=pretend.stub(owners=owners)
60-
)
59+
user = UserFactory.create()
60+
project = ProjectFactory.create(name="some-project")
61+
RoleFactory.create(user=user, project=project)
6162

6263
form = gitlab.PendingGitLabPublisherForm(
6364
route_url=route_url,
64-
check_project_name=check_project_name,
65+
check_project_name=project_service.check_project_name,
6566
user=user,
6667
)
6768

@@ -79,19 +80,17 @@ def check_project_name(name):
7980
)
8081
]
8182

82-
def test_validate_project_name_already_in_use_not_owner(self, pyramid_config):
83-
user = pretend.stub()
84-
owners = []
83+
def test_validate_project_name_already_in_use_not_owner(
84+
self, pyramid_config, project_service
85+
):
8586
route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url")
8687

87-
def check_project_name(name):
88-
raise ProjectNameUnavailableExistingError(
89-
existing_project=pretend.stub(owners=owners)
90-
)
88+
user = UserFactory.create()
89+
ProjectFactory.create(name="some-project")
9190

9291
form = gitlab.PendingGitLabPublisherForm(
9392
route_url=route_url,
94-
check_project_name=check_project_name,
93+
check_project_name=project_service.check_project_name,
9594
user=user,
9695
)
9796

@@ -165,7 +164,7 @@ def test_validate(self, data):
165164
{"project": "some", "namespace": "some", "workflow_filepath": ""},
166165
],
167166
)
168-
def test_validate_basic_invalid_fields(self, monkeypatch, data):
167+
def test_validate_basic_invalid_fields(self, data):
169168
form = gitlab.GitLabPublisherForm(MultiDict(data))
170169

171170
# We're testing only the basic validation here.

tests/unit/oidc/forms/test_google.py

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,19 @@
1717
from webob.multidict import MultiDict
1818

1919
from warehouse.oidc.forms import google
20-
from warehouse.packaging.interfaces import ProjectNameUnavailableExistingError
20+
21+
from ....common.db.accounts import UserFactory
22+
from ....common.db.packaging import (
23+
ProjectFactory,
24+
RoleFactory,
25+
)
2126

2227

2328
class TestPendingGooglePublisherForm:
24-
def test_validate(self, monkeypatch):
29+
def test_validate(self, project_service):
2530
route_url = pretend.stub()
2631
user = pretend.stub()
2732

28-
def check_project_name(name):
29-
return None # Name is available.
30-
3133
data = MultiDict(
3234
{
3335
"sub": "some-subject",
@@ -38,28 +40,27 @@ def check_project_name(name):
3840
form = google.PendingGooglePublisherForm(
3941
MultiDict(data),
4042
route_url=route_url,
41-
check_project_name=check_project_name,
43+
check_project_name=project_service.check_project_name,
4244
user=user,
4345
)
4446

45-
assert form._check_project_name == check_project_name
47+
assert form._check_project_name == project_service.check_project_name
4648
assert form._route_url == route_url
4749
assert form._user == user
4850
assert form.validate()
4951

50-
def test_validate_project_name_already_in_use_owner(self, pyramid_config):
51-
user = pretend.stub()
52-
owners = [user]
52+
def test_validate_project_name_already_in_use_owner(
53+
self, pyramid_config, project_service
54+
):
5355
route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url")
5456

55-
def check_project_name(name):
56-
raise ProjectNameUnavailableExistingError(
57-
existing_project=pretend.stub(owners=owners)
58-
)
57+
user = UserFactory.create()
58+
project = ProjectFactory.create(name="some-project")
59+
RoleFactory.create(user=user, project=project)
5960

6061
form = google.PendingGooglePublisherForm(
6162
route_url=route_url,
62-
check_project_name=check_project_name,
63+
check_project_name=project_service.check_project_name,
6364
user=user,
6465
)
6566

@@ -77,19 +78,17 @@ def check_project_name(name):
7778
)
7879
]
7980

80-
def test_validate_project_name_already_in_use_not_owner(self, pyramid_config):
81-
user = pretend.stub()
82-
owners = []
81+
def test_validate_project_name_already_in_use_not_owner(
82+
self, pyramid_config, project_service
83+
):
8384
route_url = pretend.call_recorder(lambda *args, **kwargs: "my_url")
8485

85-
def check_project_name(name):
86-
raise ProjectNameUnavailableExistingError(
87-
existing_project=pretend.stub(owners=owners)
88-
)
86+
user = UserFactory.create()
87+
ProjectFactory.create(name="some-project")
8988

9089
form = google.PendingGooglePublisherForm(
9190
route_url=route_url,
92-
check_project_name=check_project_name,
91+
check_project_name=project_service.check_project_name,
9392
user=user,
9493
)
9594

@@ -108,7 +107,7 @@ class TestGooglePublisherForm:
108107
("some-subject", "[email protected]"),
109108
],
110109
)
111-
def test_validate(self, monkeypatch, sub, email):
110+
def test_validate(self, sub, email):
112111
data = MultiDict(
113112
{
114113
"sub": sub,
@@ -128,7 +127,7 @@ def test_validate(self, monkeypatch, sub, email):
128127
("some-subject", "invalid_email"),
129128
],
130129
)
131-
def test_validate_basic_invalid_fields(self, monkeypatch, sub, email):
130+
def test_validate_basic_invalid_fields(self, sub, email):
132131
data = MultiDict(
133132
{
134133
"sub": sub,

0 commit comments

Comments
 (0)