Skip to content

Commit

Permalink
Do not paginate related segments.
Browse files Browse the repository at this point in the history
Add tests for related segment view. Filter closed segments from related
list.
  • Loading branch information
eodolphi committed Aug 9, 2022
1 parent 3be6da3 commit 129b47a
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 129b47a

Please sign in to comment.