Added helper to filter queryset by privacy level

This commit is contained in:
Eliot Berriot 2018-03-18 21:30:53 +01:00
parent 2a3f43ecb1
commit 3e277aad4f
No known key found for this signature in database
GPG Key ID: DD6965E2476E5C27
2 changed files with 30 additions and 0 deletions

View File

@ -12,3 +12,16 @@ PRIVACY_LEVEL_CHOICES = [
def get_privacy_field():
return models.CharField(
max_length=30, choices=PRIVACY_LEVEL_CHOICES, default='instance')
def privacy_level_query(user, lookup_field='privacy_level'):
if user.is_anonymous:
return models.Q(**{
lookup_field: 'everyone',
})
return models.Q(**{
'{}__in'.format(lookup_field): [
'me', 'followers', 'instance', 'everyone'
]
})

View File

@ -0,0 +1,17 @@
import pytest
from django.contrib.auth.models import AnonymousUser
from django.db.models import Q
from funkwhale_api.common import fields
from funkwhale_api.users.factories import UserFactory
@pytest.mark.parametrize('user,expected', [
(AnonymousUser(), Q(privacy_level='everyone')),
(UserFactory.build(pk=1),
Q(privacy_level__in=['me', 'followers', 'instance', 'everyone'])),
])
def test_privacy_level_query(user,expected):
query = fields.privacy_level_query(user)
assert query == expected