Skip to content

Commit

Permalink
Merge pull request #5188 from onepercentclub/hotfix/BB-20389-related-…
Browse files Browse the repository at this point in the history
…segment-pagination

Do not paginate related segments.
  • Loading branch information
eodolphi committed Aug 10, 2022
2 parents 3be6da3 + 129b47a commit 7c6d97a
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 2 deletions.
50 changes: 50 additions & 0 deletions bluebottle/segments/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,3 +437,53 @@ def test_retrieve_activity_with_invisible_segment(self):
len(self.response.data["segments"]),
0
)


class RelatedSegmentListAPITestCase(APITestCase):

def setUp(self):
super().setUp()

self.serializer = SegmentDetailSerializer

self.segment_type = SegmentTypeFactory.create()
self.segments = SegmentFactory.create_batch(10, segment_type=self.segment_type)

self.url = reverse('related-segment-detail', args=(self.segment_type.pk, ))

def test_get(self):
self.perform_get()
self.assertStatus(status.HTTP_200_OK)
self.assertSize(10)

self.assertAttribute('name')
self.assertAttribute('logo')
self.assertAttribute('story')

def test_get_closed_segment(self):
self.segments[0].closed = True
self.segments[0].save()

self.perform_get()
self.assertStatus(status.HTTP_200_OK)
self.assertSize(9)

def test_get_closed_segments_user(self):
self.segments[0].closed = True
self.segments[0].save()
self.user.segments.add(self.segments[0])
self.user.save()

self.perform_get(user=self.user)
self.assertStatus(status.HTTP_200_OK)
self.assertSize(10)

def test_get_closed_platform(self):
with self.closed_site():
self.perform_get()
self.assertStatus(status.HTTP_401_UNAUTHORIZED)

def test_get_closed_platform_logged_in(self):
with self.closed_site():
self.perform_get(user=self.user)
self.assertStatus(status.HTTP_200_OK)
20 changes: 18 additions & 2 deletions bluebottle/segments/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from django.db.models import Q

from rest_framework.pagination import PageNumberPagination

from bluebottle.activities.permissions import ActivitySegmentPermission
Expand Down Expand Up @@ -62,15 +64,29 @@ class RelatedSegmentDetail(JsonApiViewMixin, ListAPIView):
serializer_class = SegmentDetailSerializer
queryset = Segment.objects.filter(segment_type__is_active=True).select_related('segment_type')

pagination_class = None

permission_classes = [
OpenSegmentOrMember,
TenantConditionalOpenClose,
]

def get_queryset(self):
queryset = super().get_queryset()
queryset = super().get_queryset().filter(
segment_type_id=self.kwargs['segment_type'],
)

if not self.request.user.is_staff:
if self.request.user.is_authenticated:
user_segments = (segment.pk for segment in self.request.user.segments.all())
else:
user_segments = []

queryset = queryset.filter(
Q(closed=False) | Q(pk__in=user_segments)
)

return queryset.filter(segment_type_id=self.kwargs['segment_type'])
return queryset


class SegmentPublicDetail(JsonApiViewMixin, RetrieveAPIView):
Expand Down

0 comments on commit 7c6d97a

Please sign in to comment.