Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import pandas as pd
import json

import numpy as np
import pandas as pd
from django.core.management import BaseCommand
from api.v1.v1_profile.models import Levels, Administration
from django.db.transaction import atomic
from faker import Faker

from api.v1.v1_profile.models import Levels, Administration

geo_config = [{
"level": 0,
Expand Down Expand Up @@ -36,8 +39,13 @@ def get_parent_id(df, x):


def seed_administration_test():
fake = Faker()
level = Levels(name="country", level=1)
level.save()
level_2 = Levels(name=fake.company(), level=2)
level_2.save()
level_3 = Levels(name=fake.company(), level=3)
level_3.save()
administration = Administration(id=1,
name="Indonesia",
parent=None,
Expand All @@ -48,6 +56,16 @@ def seed_administration_test():
parent=administration,
level=level)
administration.save()
administration = Administration(id=3,
name=fake.company(),
parent=administration,
level=level_2)
administration.save()
administration = Administration(id=4,
name=fake.company(),
parent=administration,
level=level_3)
administration.save()


def seed_administration_prod():
Expand Down
22 changes: 16 additions & 6 deletions backend/api/v1/v1_users/tests/tests_user_invitation.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,22 @@ def test_user_list(self):
users = response.json()

self.assertEqual(response.status_code, 200)
self.assertEqual(users[0]['first_name'], 'Admin')
self.assertEqual(users[0]['last_name'], 'RTMIS')
self.assertEqual(users[0]['email'], 'admin@rtmis.com')
self.assertEqual(users[0]['administration'],
self.assertEqual(users['data'][0]['first_name'], 'Admin')
self.assertEqual(users['data'][0]['last_name'], 'RTMIS')
self.assertEqual(users['data'][0]['email'], 'admin@rtmis.com')
self.assertEqual(users['data'][0]['administration'],
{'id': 1, 'name': 'Indonesia', 'level': 1})
self.assertEqual(users[0]['role'],
self.assertEqual(users['data'][0]['role'],
{'id': 1, 'value': 'Super Admin'})
call_command("fake_user_seeder", "-r", 33)
response = self.client.get(
"/api/v1/list/users/?page=3", follow=True,
**{'HTTP_AUTHORIZATION': f'Bearer {token}'})
users = response.json()
self.assertEqual(len(users['data']), 10)
self.assertEqual(
['id', 'first_name', 'last_name', 'email', 'administration',
'role', 'invite'], list(users['data'][0]))

def test_add_edit_user(self):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add more user with the new user seeder call command, check the pagination objects.

call_command("administration_seeder", "--test")
Expand Down Expand Up @@ -75,7 +84,8 @@ def test_add_edit_user(self):
list_response = self.client.get("/api/v1/list/users/", follow=True,
**header)
users = list_response.json()
fl = list(filter(lambda x: x['email'] == 'john@example.com', users))
fl = list(
filter(lambda x: x['email'] == 'john@example.com', users['data']))

add_response = self.client.put(
"/api/v1/edit/user/{0}/".format(fl[0]['id']),
Expand Down
65 changes: 41 additions & 24 deletions backend/api/v1/v1_users/views.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
# Create your views here.
from math import ceil

from django.contrib.auth import authenticate
from django.core import signing
from django.core.paginator import Paginator, InvalidPage, EmptyPage
Expand All @@ -20,6 +22,7 @@
VerifyInviteSerializer, SetUserPasswordSerializer, \
ListAdministrationSerializer, AddEditUserSerializer, ListUserSerializer, \
ListUserRequestSerializer
from rtmis.settings import REST_FRAMEWORK
from utils.custom_permissions import IsSuperAdmin, IsAdmin
from utils.custom_serializer_fields import validate_serializers_message

Expand Down Expand Up @@ -170,26 +173,33 @@ def add_user(request, version):
status=status.HTTP_500_INTERNAL_SERVER_ERROR)


@extend_schema(responses={200: ListUserSerializer(many=True)},
tags=['User'],
parameters=[
OpenApiParameter(name='page',
required=True,
type=OpenApiTypes.NUMBER,
location=OpenApiParameter.QUERY),
OpenApiParameter(name='role',
required=False,
type=OpenApiTypes.NUMBER,
location=OpenApiParameter.QUERY),
OpenApiParameter(name='administration',
required=False,
type=OpenApiTypes.NUMBER,
location=OpenApiParameter.QUERY),
OpenApiParameter(name='pending',
required=False,
type=OpenApiTypes.BOOL,
location=OpenApiParameter.QUERY),
])
@extend_schema(responses={
(200, 'application/json'):
inline_serializer("UserList", fields={
"current": serializers.IntegerField(),
"total": serializers.IntegerField(),
"total_page": serializers.IntegerField(),
"data": ListUserSerializer(many=True),
})},
tags=['User'],
parameters=[
OpenApiParameter(name='page',
required=True,
type=OpenApiTypes.NUMBER,
location=OpenApiParameter.QUERY),
OpenApiParameter(name='role',
required=False,
type=OpenApiTypes.NUMBER,
location=OpenApiParameter.QUERY),
OpenApiParameter(name='administration',
required=False,
type=OpenApiTypes.NUMBER,
location=OpenApiParameter.QUERY),
OpenApiParameter(name='pending',
required=False,
type=OpenApiTypes.BOOL,
location=OpenApiParameter.QUERY),
])
@api_view(['GET'])
@permission_classes([IsAuthenticated, IsSuperAdmin | IsAdmin])
def list_users(request, version):
Expand Down Expand Up @@ -226,14 +236,21 @@ def list_users(request, version):
administration_ids.append(child.id)
filter_data[
'user_access__administration_id__in'] = administration_ids
page_size = REST_FRAMEWORK.get('PAGE_SIZE')
queryset = SystemUser.objects.filter(**filter_data).order_by('id')
paginator_temp = Paginator(queryset, 10)
paginator_temp = Paginator(queryset, page_size)
paginator_temp.page(request.GET.get('page', 1))
paginator = PageNumberPagination()
instance = paginator.paginate_queryset(queryset, request)
return Response(ListUserSerializer(
instance=instance,
many=True).data, status=status.HTTP_200_OK)
data = {
"current": request.GET.get('page'),
"data": ListUserSerializer(
instance=instance,
many=True).data,
"total": queryset.count(),
"total_page": ceil(queryset.count() / page_size)
}
return Response(data, status=status.HTTP_200_OK)
except (InvalidPage, EmptyPage):
return Response([], status=status.HTTP_200_OK)
except Exception as ex:
Expand Down