Skip to content

Commit a9de63c

Browse files
committed
Use service layer in form view
Utilize the service layer function for removing team members in the form views responsible for kicking members from a team, and in the form responsible for leaving a team. Update tests accordingly to the new changes. Remove redundant get_team_or_404 function. Refs. TS-2315
1 parent 147b34f commit a9de63c

File tree

4 files changed

+27
-21
lines changed

4 files changed

+27
-21
lines changed

django/thunderstore/api/cyberstorm/views/team.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,6 @@
3030
from thunderstore.repository.models.team import Team, TeamMember
3131

3232

33-
def get_team_object_or_404(team_name: str) -> Team:
34-
return get_object_or_404(
35-
Team.objects.exclude(is_active=False),
36-
name=team_name,
37-
)
38-
39-
4033
def get_team_member_object_or_404(team_name: str, team_member: str) -> TeamMember:
4134
return get_object_or_404(
4235
TeamMember.objects.real_users(),

django/thunderstore/repository/forms/team.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.contrib.auth import get_user_model
55
from django.core.exceptions import ObjectDoesNotExist, ValidationError
66

7+
from thunderstore.api.cyberstorm.services.team import remove_team_member
78
from thunderstore.core.exceptions import PermissionValidationError
89
from thunderstore.core.types import UserType
910
from thunderstore.repository.models import (
@@ -93,15 +94,17 @@ def __init__(self, user: Optional[UserType], *args, **kwargs):
9394
super().__init__(*args, **kwargs)
9495
self.user = user
9596

96-
def clean_membership(self):
97-
membership = self.cleaned_data["membership"]
98-
if membership.user != self.user:
99-
membership.team.ensure_user_can_manage_members(self.user)
100-
membership.team.ensure_member_can_be_removed(membership)
101-
return membership
102-
10397
def save(self):
104-
self.cleaned_data["membership"].delete()
98+
if self.errors:
99+
raise ValidationError(self.errors)
100+
101+
try:
102+
membership = self.cleaned_data["membership"]
103+
remove_team_member(agent=self.user, team_member=membership)
104+
except ValidationError as e:
105+
self.add_error(None, e)
106+
107+
return None
105108

106109

107110
class EditTeamMemberForm(forms.ModelForm):

django/thunderstore/repository/tests/test_team_forms.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Optional
22

33
import pytest
4+
from django.core.exceptions import ValidationError
45

56
from conftest import TestUserTypes
67
from thunderstore.core.factories import UserFactory
@@ -253,8 +254,14 @@ def test_form_remove_team_member(
253254
assert form.save() is None
254255
assert TeamMember.objects.filter(pk=membership).exists() is False
255256
else:
256-
assert form.is_valid() is False
257-
assert form.errors
257+
if form.errors:
258+
assert form.is_valid() is False
259+
with pytest.raises(ValidationError):
260+
form.save()
261+
else:
262+
form.save()
263+
assert form.is_valid() is False
264+
assert form.errors
258265

259266

260267
@pytest.mark.django_db
@@ -294,6 +301,7 @@ def test_form_remove_team_member_last_owner() -> None:
294301
user=user,
295302
data={"membership": last_owner.pk},
296303
)
304+
form.save()
297305
assert form.is_valid() is False
298306
assert "Cannot remove last owner from team" in str(repr(form.errors))
299307

django/thunderstore/repository/views/team_settings.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
DonationLinkTeamForm,
2727
EditTeamMemberForm,
2828
RemoveTeamMemberForm,
29-
TeamMemberRole,
3029
)
3130
from thunderstore.repository.models import Team, TeamMember, reverse
3231

@@ -111,14 +110,15 @@ def get_context_data(self, **kwargs):
111110
return context
112111

113112
def form_invalid(self, form):
114-
messages.error(
115-
self.request, "There was a problem performing the requested action"
116-
)
113+
error_message = "There was a problem performing the requested action"
114+
messages.error(self.request, error_message)
117115
capture_exception(ValidationError(form.errors))
118116
return super().form_invalid(form)
119117

120118
def form_valid(self, form):
121119
form.save()
120+
if form.errors: # Check if there are any errors in the form post-validation
121+
return self.form_invalid(form)
122122
messages.success(self.request, "Action performed successfully")
123123
return redirect(self.object.settings_url)
124124

@@ -200,6 +200,8 @@ def form_invalid(self, form):
200200
@transaction.atomic
201201
def form_valid(self, form):
202202
form.save()
203+
if form.errors:
204+
return self.form_invalid(form)
203205
return redirect(reverse("settings.teams"))
204206

205207

0 commit comments

Comments
 (0)