Fix friend_code max length issues in tests, and fix in_game_name length issues, also update tests to fit more scenarios
This commit is contained in:
parent
0d4655bf80
commit
b9c4d7a61d
10 changed files with 558 additions and 66 deletions
|
|
@ -25,6 +25,7 @@ from trades.templatetags.trade_offer_tags import render_trade_offer
|
|||
from django.template import RequestContext
|
||||
from playwright.sync_api import sync_playwright
|
||||
from django.conf import settings
|
||||
from .mixins import FriendCodeRequiredMixin
|
||||
|
||||
class TradeOfferCreateView(LoginRequiredMixin, CreateView):
|
||||
http_method_names = ['get'] # restricts this view to GET only
|
||||
|
|
@ -108,15 +109,10 @@ class TradeOfferAllListView(ListView):
|
|||
)
|
||||
return super().render_to_response(context, **response_kwargs)
|
||||
|
||||
class TradeOfferMyListView(LoginRequiredMixin, ListView):
|
||||
model = TradeOffer # Fallback model; our context data holds separate filtered querysets.
|
||||
class TradeOfferMyListView(LoginRequiredMixin, FriendCodeRequiredMixin, ListView):
|
||||
model = TradeOffer
|
||||
template_name = "trades/trade_offer_my_list.html"
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
if request.user.is_authenticated and not request.user.friend_codes.exists():
|
||||
raise PermissionDenied("No friend codes available for your account.")
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_selected_friend_code(self):
|
||||
friend_codes = self.request.user.friend_codes.all()
|
||||
friend_code_param = self.request.GET.get("friend_code")
|
||||
|
|
@ -127,10 +123,8 @@ class TradeOfferMyListView(LoginRequiredMixin, ListView):
|
|||
selected_friend_code = self.request.user.default_friend_code or friend_codes.first()
|
||||
else:
|
||||
selected_friend_code = self.request.user.default_friend_code or friend_codes.first()
|
||||
|
||||
if not selected_friend_code:
|
||||
raise PermissionDenied("You do not have an active friend code associated with your account.")
|
||||
|
||||
return selected_friend_code
|
||||
|
||||
def get_show_closed(self):
|
||||
|
|
@ -224,15 +218,13 @@ class TradeOfferMyListView(LoginRequiredMixin, ListView):
|
|||
return render(self.request, "trades/_trade_offer_list_paginated.html", {"offers": offers})
|
||||
return super().render_to_response(context, **response_kwargs)
|
||||
|
||||
class TradeOfferDeleteView(LoginRequiredMixin, DeleteView):
|
||||
class TradeOfferDeleteView(LoginRequiredMixin, FriendCodeRequiredMixin, DeleteView):
|
||||
model = TradeOffer
|
||||
success_url = reverse_lazy("trade_offer_list")
|
||||
template_name = "trades/trade_offer_delete.html"
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
# Retrieve the object normally
|
||||
self.object = super().get_object()
|
||||
# Perform the permission check here
|
||||
if self.object.initiated_by_id not in request.user.friend_codes.values_list("id", flat=True):
|
||||
raise PermissionDenied("You are not authorized to delete or close this trade offer.")
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
|
@ -339,7 +331,10 @@ class TradeOfferSearchView(ListView):
|
|||
|
||||
qs = TradeOffer.objects.filter(
|
||||
is_closed=False,
|
||||
).exclude(initiated_by__in=self.request.user.friend_codes.all())
|
||||
)
|
||||
|
||||
if self.request.user.is_authenticated:
|
||||
qs = qs.exclude(initiated_by__in=self.request.user.friend_codes.all())
|
||||
|
||||
# Chain filters for offered selections (i.e. the user "has" cards).
|
||||
if have_selections:
|
||||
|
|
@ -498,7 +493,7 @@ class TradeOfferDetailView(DetailView):
|
|||
|
||||
return context
|
||||
|
||||
class TradeAcceptanceCreateView(LoginRequiredMixin, CreateView):
|
||||
class TradeAcceptanceCreateView(LoginRequiredMixin, FriendCodeRequiredMixin, CreateView):
|
||||
"""
|
||||
View to create a new TradeAcceptance.
|
||||
The URL should provide 'offer_pk' so that the proper TradeOffer can be identified.
|
||||
|
|
@ -509,19 +504,17 @@ class TradeAcceptanceCreateView(LoginRequiredMixin, CreateView):
|
|||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.trade_offer = self.get_trade_offer()
|
||||
if self.trade_offer.initiated_by_id in request.user.friend_codes.values_list("id", flat=True) or self.trade_offer.is_closed:
|
||||
raise PermissionDenied("You cannot accept this trade offer.")
|
||||
if not request.user.friend_codes.exists():
|
||||
raise PermissionDenied("No friend codes available for your account.")
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_trade_offer(self):
|
||||
return (
|
||||
TradeOffer.objects.get(pk=self.kwargs['offer_pk'])
|
||||
)
|
||||
return TradeOffer.objects.get(pk=self.kwargs['offer_pk'])
|
||||
|
||||
def get_form_kwargs(self):
|
||||
kwargs = super().get_form_kwargs()
|
||||
if (self.trade_offer.initiated_by_id in
|
||||
self.request.user.friend_codes.values_list("id", flat=True) or
|
||||
self.trade_offer.is_closed):
|
||||
raise PermissionDenied("You cannot accept this trade offer.")
|
||||
kwargs['trade_offer'] = self.trade_offer
|
||||
kwargs['friend_codes'] = self.request.user.friend_codes.all()
|
||||
return kwargs
|
||||
|
|
@ -561,7 +554,7 @@ class TradeAcceptanceCreateView(LoginRequiredMixin, CreateView):
|
|||
def get_success_url(self):
|
||||
return reverse_lazy("trade_offer_detail", kwargs={"pk": self.trade_offer.pk})
|
||||
|
||||
class TradeAcceptanceUpdateView(LoginRequiredMixin, UpdateView):
|
||||
class TradeAcceptanceUpdateView(LoginRequiredMixin, FriendCodeRequiredMixin, UpdateView):
|
||||
"""
|
||||
View to update the state of an existing TradeAcceptance.
|
||||
The allowed state transitions are provided via the form.
|
||||
|
|
@ -572,10 +565,9 @@ class TradeAcceptanceUpdateView(LoginRequiredMixin, UpdateView):
|
|||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
if not request.user.friend_codes.exists():
|
||||
raise PermissionDenied("No friend codes available for your account.")
|
||||
friend_codes = request.user.friend_codes.values_list("id", flat=True)
|
||||
if self.object.accepted_by_id not in friend_codes and self.object.trade_offer.initiated_by_id not in friend_codes:
|
||||
if (self.object.accepted_by_id not in friend_codes and
|
||||
self.object.trade_offer.initiated_by_id not in friend_codes):
|
||||
raise PermissionDenied("You are not authorized to update this acceptance.")
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue