Skip to content

Commit 52bc506

Browse files
committed
Update implementation and add more tests
1 parent 916d820 commit 52bc506

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

api/tests/test_asset_api.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,24 @@ def test_authenticated_user_get_single_asset_via_asset_code(
6565
):
6666
mock_verify_id_token.return_value = {"email": self.user.email}
6767
response = client.get(
68-
"{}?search={}".format(self.asset_urls, self.asset.asset_code),
68+
"{}?asset_code={}".format(self.asset_urls, self.asset.asset_code),
6969
HTTP_AUTHORIZATION="Token {}".format(self.token_user),
7070
)
71-
self.assertIn(self.asset.asset_code, response.data["results"][0]["asset_code"])
7271
self.assertEqual(response.status_code, status.HTTP_200_OK)
72+
self.assertIn(self.asset.asset_code, response.data["results"][0]["asset_code"])
7373

7474
@patch("api.authentication.auth.verify_id_token")
75-
def test_authenticated_securityuser_get_single_asset_via_asset_code(
75+
def test_securityuser_filtering_asset_via_asset_code(
7676
self, mock_verify_id_token
7777
):
7878
mock_verify_id_token.return_value = {"email": self.security_user.email}
7979
response = client.get(
80-
"{}?search={}".format(self.asset_urls, self.asset.asset_code),
80+
f"{self.asset_urls}?asset_code={self.asset.asset_code}",
8181
HTTP_AUTHORIZATION="Token {}".format(self.token_checked_by),
8282
)
83+
filtered_assets = Asset.objects.filter(asset_code=self.asset.asset_code)
8384
self.assertEqual(response.status_code, status.HTTP_200_OK)
85+
self.assertEqual(len(filtered_assets), len(response.data["results"]))
8486
self.assertIn(self.asset.asset_code, response.data["results"][0]["asset_code"])
8587

8688
@patch("api.authentication.auth.verify_id_token")
@@ -89,7 +91,7 @@ def test_authenticated_user_get_single_asset_via_serial_number(
8991
):
9092
mock_verify_id_token.return_value = {"email": self.user.email}
9193
response = client.get(
92-
"{}?search={}".format(self.asset_urls, self.asset.serial_number),
94+
"{}?serial_number={}".format(self.asset_urls, self.asset.serial_number),
9395
HTTP_AUTHORIZATION="Token {}".format(self.token_user),
9496
)
9597
self.assertIn(
@@ -103,7 +105,7 @@ def test_authenticated_securityuser_get_single_asset_via_serial_number(
103105
):
104106
mock_verify_id_token.return_value = {"email": self.security_user.email}
105107
response = client.get(
106-
"{}?search={}".format(self.asset_urls, self.asset.serial_number),
108+
"{}?serial_number={}".format(self.asset_urls, self.asset.serial_number),
107109
HTTP_AUTHORIZATION="Token {}".format(self.token_checked_by),
108110
)
109111
self.assertEqual(response.status_code, status.HTTP_200_OK)
@@ -470,10 +472,9 @@ def test_fetching_assets_assigned_to_a_random_user_by_non_admin(
470472
str(response.data["detail"]),
471473
"Operation not permitted. You are not authorised.",
472474
)
473-
self.assertEqual(response.status_code, 200)
474475

475476
@patch("api.authentication.auth.verify_id_token")
476-
def test_asset_search_endpoint(self, mock_verify_id_token):
477+
def test_search_fnx_on_asset_endpoint(self, mock_verify_id_token):
477478
mock_verify_id_token.return_value = {"email": self.admin_user.email}
478479
self.admin_user.is_securityuser = True
479480
self.admin_user.save()
@@ -506,17 +507,18 @@ def test_asset_search_endpoint(self, mock_verify_id_token):
506507
asset_location=self.centre,
507508
department=self.department,
508509
)
510+
509511
response = client.get(
510512
"{}?search={}".format(self.asset_urls, "ANDELA"),
511513
HTTP_AUTHORIZATION="Token {}".format(self.token_admin),
512514
)
513515
# return only assets with ANDELA match which is just asset_one and asset_two
514516
self.assertEqual(response.data["count"], 2)
515517
self.assertEqual(
516-
response.data.get('results')[1].get('uuid'), str(asset_one.uuid)
518+
response.data.get("results")[1].get("uuid"), str(asset_one.uuid)
517519
)
518520
self.assertEqual(
519-
response.data.get('results')[0].get('uuid'), str(asset_two.uuid)
521+
response.data.get("results")[0].get("uuid"), str(asset_two.uuid)
520522
)
521523

522524
response = client.get(
@@ -526,8 +528,9 @@ def test_asset_search_endpoint(self, mock_verify_id_token):
526528
# return only assets with SN_ART match which is just asset_one and asset_three
527529
self.assertEqual(response.data["count"], 2)
528530
self.assertEqual(
529-
response.data.get('results')[1].get('uuid'), str(asset_one.uuid)
531+
response.data.get("results")[1].get("uuid"), str(asset_one.uuid)
530532
)
531533
self.assertEqual(
532-
response.data.get('results')[0].get('uuid'), str(asset_three.uuid)
534+
response.data.get("results")[0].get("uuid"), str(asset_three.uuid)
533535
)
536+

api/views/assets.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from django.db.models import Q
1515
from django.db.utils import IntegrityError
1616
from django.http import FileResponse
17+
from django_filters.rest_framework import DjangoFilterBackend
1718
from rest_framework import serializers, status
1819
from rest_framework.exceptions import PermissionDenied
1920
from rest_framework.filters import OrderingFilter, SearchFilter
@@ -127,7 +128,7 @@ class AssetViewSet(ModelViewSet):
127128
filterset_class = AssetFilter
128129
authentication_classes = (FirebaseTokenAuthentication,)
129130
http_method_names = ["get"]
130-
filter_backends = (SearchFilter,)
131+
filter_backends = (SearchFilter, DjangoFilterBackend)
131132
search_fields = ['asset_code', 'serial_number']
132133

133134
def get_queryset(self):

0 commit comments

Comments
 (0)