Merge pull request #7635 from tchellomello/user_API_created

Exposes created attribute via API for User django ORM

Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
This commit is contained in:
softwarefactory-project-zuul[bot] 2020-07-20 19:40:47 +00:00 committed by GitHub
commit 7296415fd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 0 deletions

View File

@ -257,6 +257,11 @@ class FieldLookupBackend(BaseFilterBackend):
if key in self.RESERVED_NAMES:
continue
# HACK: make `created` available via API for the Django User ORM model
# so it keep compatiblity with other objects which exposes the `created` attr.
if queryset.model._meta.object_name == 'User' and key.startswith('created'):
key = key.replace('created', 'date_joined')
# HACK: Make job event filtering by host name mostly work even
# when not capturing job event hosts M2M.
if queryset.model._meta.object_name == 'JobEvent' and key.startswith('hosts__name'):

View File

@ -127,9 +127,15 @@ def user_get_auditor_of_organizations(user):
return Organization.objects.filter(auditor_role__members=user)
@property
def created(user):
return user.date_joined
User.add_to_class('organizations', user_get_organizations)
User.add_to_class('admin_of_organizations', user_get_admin_of_organizations)
User.add_to_class('auditor_of_organizations', user_get_auditor_of_organizations)
User.add_to_class('created', created)
@property

View File

@ -1,3 +1,5 @@
from datetime import date
import pytest
from django.contrib.sessions.middleware import SessionMiddleware
@ -61,3 +63,21 @@ def test_user_cannot_update_last_login(patch, admin):
middleware=SessionMiddleware()
)
assert User.objects.get(pk=admin.pk).last_login is None
@pytest.mark.django_db
def test_user_verify_attribute_created(admin, get):
assert admin.created == admin.date_joined
resp = get(
reverse('api:user_detail', kwargs={'pk': admin.pk}),
admin
)
assert resp.data['created'] == admin.date_joined
past = date(2020, 1, 1).isoformat()
for op, count in (('gt', 1), ('lt', 0)):
resp = get(
reverse('api:user_list') + f'?created__{op}={past}',
admin
)
assert resp.data['count'] == count