Skip to content

Commit d811fa4

Browse files
committed
Develop tests and document '/api/groups/group_info/'
Fix #176 Changes to be committed: modified: api/model/groups.py modified: api/views.py new file: tests/test_views/test_api_groups_group_info.py
1 parent 84a05ee commit d811fa4

File tree

3 files changed

+133
-31
lines changed

3 files changed

+133
-31
lines changed

api/model/groups.py

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,37 +41,41 @@ def post_api_groups_info(request):
4141
"""Retrieve Group information by user"""
4242

4343
user = usr_utils.user_from_request(request=request)
44-
bulk_request = request.data["POST_api_groups_info"]
45-
group_info = []
4644

47-
for index, value in enumerate(bulk_request["names"]):
48-
group = Group.objects.get(name=value)
45+
try:
46+
bulk_request = request.data["POST_api_groups_info"]
47+
48+
group_info = []
4949

50-
try:
51-
admin = GroupInfo.objects.get(group=value).owner_user == user
52-
description = GroupInfo.objects.get(group=value).description
53-
except GroupInfo.DoesNotExist:
54-
admin = False
55-
description = "N/A"
50+
for index, value in enumerate(bulk_request["names"]):
51+
group = Group.objects.get(name=value)
5652

57-
group_permissions = list(
58-
group.permissions.all().values_list("codename", flat=True)
59-
)
60-
group_members = list(group.user_set.all().values_list("username", flat=True))
61-
group_info.append(
62-
{
63-
"name": group.name,
64-
"permissions": group_permissions,
65-
"members": group_members,
66-
"admin": admin,
67-
"description": description,
68-
}
53+
try:
54+
admin = GroupInfo.objects.get(group=value).owner_user == user
55+
description = GroupInfo.objects.get(group=value).description
56+
except GroupInfo.DoesNotExist:
57+
admin = False
58+
description = "N/A"
59+
60+
group_permissions = list(
61+
group.permissions.all().values_list("codename", flat=True)
62+
)
63+
group_members = list(group.user_set.all().values_list("username", flat=True))
64+
group_info.append(
65+
{
66+
"name": group.name,
67+
"permissions": group_permissions,
68+
"members": group_members,
69+
"admin": admin,
70+
"description": description,
71+
}
72+
)
73+
except Exception as error:
74+
return Response(
75+
status=status.HTTP_400_BAD_REQUEST,
76+
data={"message": "Bad request. Request is not formatted correctly."}
6977
)
7078

71-
# print(usr_utils.get_user_groups_by_username(un=username))
72-
# user.get_all_permissions()
73-
# user.get_group_permissions()
74-
print(group_info)
7579
return Response(status=status.HTTP_200_OK, data=group_info)
7680

7781

api/views.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,17 @@ class ApiGroupsInfo(APIView):
252252
--------------------
253253
254254
This API call checks a user's groups and permissions in ths system. The User token is
255-
required but all other parameters are optional.
255+
required.
256+
257+
```JSON
258+
{
259+
"POST_api_groups_info": {
260+
"names": [
261+
"bco_drafter", "bco_publisher"
262+
]
263+
}
264+
}
265+
```
256266
"""
257267

258268
POST_api_groups_info_schema = openapi.Schema(
@@ -279,14 +289,13 @@ class ApiGroupsInfo(APIView):
279289
@swagger_auto_schema(
280290
request_body=request_body,
281291
responses={
282-
200: "Authorization is successful. Group permissions returned",
283-
400: "Bad request. Authorization is not provided in the request headers.",
284-
401: "Unauthorized. Authentication credentials were not valid.",
292+
200: "Success. Group permissions returned",
293+
400: "Bad request. Request is not formatted correctly.",
294+
403: "Forbidden. Invalid token or authentication credentials were not provided.",
285295
},
286296
tags=["Group Management"],
287297
)
288298
def post(self, request):
289-
"""Post?"""
290299
return check_post_and_process(request, post_api_groups_info)
291300

292301

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/usr/bin/env python3
2+
3+
"""Group info
4+
Tests for 'Success. Group permissions returned (200)', 'Forbidden. Invalid
5+
token. (403)', Forbidden response (400)
6+
"""
7+
8+
9+
from django.test import TestCase
10+
from rest_framework.test import APIClient
11+
from rest_framework.authtoken.models import Token
12+
from django.contrib.auth.models import User
13+
from api.model.groups import GroupInfo, Group
14+
15+
16+
class GroupInfoAPITestCase(TestCase):
17+
fixtures = ['tests/fixtures/test_data']
18+
19+
def setUp(self):
20+
self.client = APIClient()
21+
22+
def test_success_response(self):
23+
"""Tests for 'Success. Group permissions returned (200)'
24+
"""
25+
26+
token = Token.objects.get(user=User.objects.get(username='test50')).key
27+
28+
data = {
29+
"POST_api_groups_info": {
30+
"names": [
31+
"bco_drafter", "bco_publisher", "test50", "test_drafter", "other_drafter"
32+
]
33+
}
34+
}
35+
36+
self.client.credentials(HTTP_AUTHORIZATION='Token ' + token)
37+
response = self.client.post('/api/groups/group_info/', data=data, format='json')
38+
39+
self.assertEqual(response.status_code, 200)
40+
self.assertEqual(len(response.json()), 5)
41+
42+
def test_unauthorized(self):
43+
"""Tests for 'Forbidden. Invalid token. (403)'
44+
"""
45+
46+
data = {
47+
"POST_api_groups_info": {
48+
"names": [
49+
"bco_drafter", "bco_publisher", "test50", "test_drafter"
50+
]
51+
}
52+
}
53+
54+
response = self.client.post('/api/groups/group_info/', data=data, format='json')
55+
self.assertEqual(response.status_code, 403)
56+
57+
def test_unauthorized_response(self):
58+
"""
59+
"""
60+
61+
data = {
62+
"POST_api_groups_info": {
63+
"names": [
64+
"bco_drafter", "bco_publisher", "test50", "test_drafter"
65+
]
66+
}
67+
}
68+
69+
self.client.credentials(HTTP_AUTHORIZATION='Token InvalidToken')
70+
response = self.client.post('/api/groups/group_info/', data=data, format='json')
71+
self.assertEqual(response.status_code, 403)
72+
73+
def test_bad_request(self):
74+
"""
75+
"""
76+
77+
token = Token.objects.get(user=User.objects.get(username='test50')).key
78+
79+
data = {
80+
"POST_api_groups_info": {
81+
"bad_names": {
82+
"bco_drafter", "bco_publisher", "test50", "test_drafter"
83+
}
84+
}
85+
}
86+
87+
self.client.credentials(HTTP_AUTHORIZATION='Token ' + token)
88+
response = self.client.post('/api/groups/group_info/', data=data, format='json')
89+
self.assertEqual(response.status_code, 400)

0 commit comments

Comments
 (0)