Родитель
784756a8a0
Коммит
9a2a455d3e
|
@ -239,6 +239,7 @@ The schema for the payload returned is:
|
|||
- `?tag=<string>` - Filter entries by a specific tag
|
||||
- `?issue=<string>` - Filter entries by an issue area
|
||||
- `?help_type=<string>` - Filter entries by a specific help category
|
||||
- `?has_help_types=<True or False>` - Filter entries by whether they have help types or not. Note that `True` or `False` is case-sensitive.
|
||||
- `?featured=<true or false>` - Filter featured or non-featured entries
|
||||
- `?ordering=<string>` - Order entries by a certain property e.g. `?ordering=title`. Prepend the property with a hyphen to get entries in descending order, e.g. `?ordering=-title`
|
||||
- `?moderationstate=<string>` - Filter entries by its moderation state. This filter will only be applied if the API call was made by an authenticated user with moderation permissions
|
||||
|
|
|
@ -10,6 +10,7 @@ from rest_framework.request import Request
|
|||
from pulseapi.creators.models import EntryCreator
|
||||
from pulseapi.profiles.models import UserProfile
|
||||
from pulseapi.entries.models import Entry, ModerationState
|
||||
from pulseapi.helptypes.factory import HelpTypeFactory
|
||||
from pulseapi.entries.serializers import (
|
||||
EntrySerializerWithV1Creators,
|
||||
EntrySerializerWithCreators,
|
||||
|
@ -152,6 +153,31 @@ class TestEntryView(PulseStaffTestCase):
|
|||
)
|
||||
self.assertEqual(postresponse.status_code, 200)
|
||||
|
||||
def test_no_help_type_filter(self):
|
||||
"""Test filtering entries that don't have a help type"""
|
||||
counter = 0
|
||||
for entry in self.entries:
|
||||
if counter % 2 == 0:
|
||||
help_type = HelpTypeFactory()
|
||||
entry.help_types.add(help_type)
|
||||
else:
|
||||
entry.help_types.clear()
|
||||
counter += 1
|
||||
|
||||
entries_without_help_types = Entry.objects.filter(help_types__isnull=True).count()
|
||||
entries_with_help_types = Entry.objects.filter(help_types__isnull=False).count()
|
||||
|
||||
url = reverse('entries-list', args=[settings.API_VERSIONS['version_2'] + '/'])
|
||||
response_1 = self.client.get('{url}?has_help_types=False'.format(url=url))
|
||||
response_entries_without_help_types = json.loads(str(response_1.content, 'utf-8'))
|
||||
response_2 = self.client.get('{url}?has_help_types=True'.format(
|
||||
url=reverse('entries-list', args=[settings.API_VERSIONS['version_2'] + '/']),
|
||||
))
|
||||
response_entries_with_help_types = json.loads(str(response_2.content, 'utf-8'))
|
||||
|
||||
self.assertEqual(response_entries_without_help_types['count'], entries_without_help_types)
|
||||
self.assertEqual(response_entries_with_help_types['count'], entries_with_help_types)
|
||||
|
||||
def test_featured_filter(self):
|
||||
"""Entry with all content"""
|
||||
|
||||
|
|
|
@ -167,6 +167,11 @@ class EntryCustomFilter(filters.FilterSet):
|
|||
name='help_types__name',
|
||||
lookup_expr='iexact',
|
||||
)
|
||||
has_help_types = django_filters.BooleanFilter(
|
||||
name='help_types',
|
||||
lookup_expr='isnull',
|
||||
exclude=True,
|
||||
)
|
||||
featured = django_filters.BooleanFilter(
|
||||
name='featured'
|
||||
)
|
||||
|
@ -301,6 +306,9 @@ class EntriesListView(ListCreateAPIView):
|
|||
- `?tag=` - Allows filtering entries by a specific tag
|
||||
- `?issue=` - Allows filtering entries by a specific issue
|
||||
- `?help_type=` - Allows filtering entries by a specific help type
|
||||
- `?has_help_types=<True or False>` - Filter entries by whether they have
|
||||
help types or not. Note that `True`
|
||||
or `False` is case-sensitive.
|
||||
- `?featured=True` (or False) - both capitalied. Boolean is set in admin UI
|
||||
- `?page=` - Page number, defaults to 1
|
||||
- `?page_size=` - Number of results on a page. Defaults to 48
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
"""
|
||||
Create fake help types for local development, tests, and Heroku's review app.
|
||||
"""
|
||||
|
||||
from factory import DjangoModelFactory, Faker
|
||||
|
||||
from pulseapi.helptypes.models import HelpType
|
||||
|
||||
|
||||
class HelpTypeFactory(DjangoModelFactory):
|
||||
name = Faker('job')
|
||||
|
||||
class Meta:
|
||||
model = HelpType
|
Загрузка…
Ссылка в новой задаче