From 54f89e8b5b8a102d7a6e670f7baac5c024add60c Mon Sep 17 00:00:00 2001 From: Oly Date: Wed, 26 Apr 2017 14:02:26 +0100 Subject: [PATCH] Basic Working tests to build on --- mhackspace/rfid/admin.py | 2 +- mhackspace/rfid/serializers.py | 3 ++- mhackspace/rfid/tests/tests.py | 29 ++++++++++++++++++++++------- mhackspace/rfid/views.py | 19 ++++++++++++------- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/mhackspace/rfid/admin.py b/mhackspace/rfid/admin.py index 0a8621d..c793c98 100644 --- a/mhackspace/rfid/admin.py +++ b/mhackspace/rfid/admin.py @@ -7,7 +7,7 @@ from mhackspace.rfid.models import Device, Rfid @admin.register(Device) class DeviceAdmin(ModelAdmin): - list_display = ('name',) + list_display = ('name', 'identifier') @admin.register(Rfid) class RfidAdmin(ModelAdmin): diff --git a/mhackspace/rfid/serializers.py b/mhackspace/rfid/serializers.py index 2e3ffb1..20efdcb 100644 --- a/mhackspace/rfid/serializers.py +++ b/mhackspace/rfid/serializers.py @@ -17,7 +17,8 @@ class DeviceSerializer(serializers.ModelSerializer): class AuthSerializer(serializers.Serializer): name = serializers.CharField(max_length=255) rfid = serializers.CharField(max_length=255) - device_id = serializers.CharField(max_length=255) + # device = serializers.UUIDField(format='hex_verbose') + device = serializers.CharField(max_length=255) # def create(self, validated_data): # return Task(id=None, **validated_data) diff --git a/mhackspace/rfid/tests/tests.py b/mhackspace/rfid/tests/tests.py index 2356a54..418e702 100644 --- a/mhackspace/rfid/tests/tests.py +++ b/mhackspace/rfid/tests/tests.py @@ -24,28 +24,43 @@ class MigrationTestCase(TestCase): class ApiTests(TestCase): + maxDiff = None def setUp(self): - self.device = Device(name='device01') - self.device.save() self.user = User(name='User01') self.user.save() - self.rfid = Rfid(code=1, user=self.user) + self.device = Device(name='device01', user=self.user) + self.device.save() + self.rfid = Rfid(code='1', user=self.user) self.rfid.save() def testAuth(self): factory = APIRequestFactory() request = factory.get('/rfid/') - def testSamsMadness(self): + def testValidAuthCase(self): client = RequestsClient() response = client.post( 'http://127.0.0.1:8180/api/v1/rfidAuth/', - data={'rfid':'1', 'device': '1'}) - # print(response.json()) + data={'rfid': '1', 'device': self.device.identifier}) assert response.status_code == 200 + expected_result = {'rfid': self.rfid.code, 'name': 'device01', 'device': str(self.device.identifier)} self.assertEquals( response.json(), - [{'rfid': self.rfid.code, 'name': 'device01', 'device_id': self.device.identification}]) + expected_result + ) + + def testInValidAuthCase(self): + client = RequestsClient() + response = client.post( + 'http://127.0.0.1:8180/api/v1/rfidAuth/', + data={'rfid': '99', 'device': str(self.device.identifier)}) + assert response.status_code == 404 + + # response = client.post( + # 'http://127.0.0.1:8180/api/v1/rfidAuth/', + # data={'rfid': '1', 'device': 'test%s' % str(self.device.identifier)[3:]}) + # assert response.status_code == 404 + def testAuthUserWithDevice(self): client = RequestsClient() diff --git a/mhackspace/rfid/views.py b/mhackspace/rfid/views.py index 8918452..4752720 100644 --- a/mhackspace/rfid/views.py +++ b/mhackspace/rfid/views.py @@ -1,10 +1,12 @@ +import logging from rest_framework.response import Response -from rest_framework.views import APIView from rest_framework import viewsets from rest_framework import status from mhackspace.rfid.models import Device, Rfid from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer -from django.shortcuts import get_list_or_404, get_object_or_404 +from django.core.exceptions import ObjectDoesNotExist + +logger = logging.getLogger(__name__) class DeviceViewSet(viewsets.ModelViewSet): @@ -14,20 +16,23 @@ class DeviceViewSet(viewsets.ModelViewSet): # https://medium.com/django-rest-framework/django-rest-framework-viewset-when-you-don-t-have-a-model-335a0490ba6f class AuthUserWithDeviceViewSet(viewsets.ViewSet): - http_method_names = ['post'] + # http_method_names = ['post'] serializer_class = AuthSerializer def list(self, request): serializer = AuthSerializer( - instance={'name': '1', 'rfid': '1', 'device_id': '1'}) + instance={'name': '1', 'rfid': '1', 'device': '1'}) return Response(serializer.data) def post(self, request, format=None): try: rfid = Rfid.objects.get(code=request.data.get('rfid')) - device = Device.objects.get(user=rfid.user, identifier=request.data.get('device_id')) - except: + device = Device.objects.get(user=rfid.user, identifier=request.data.get('device')) + except ObjectDoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) + except: + logger.exception("An error occurred") + return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) serializer = AuthSerializer( - instance={'name': device.name, 'rfid': rfid.code, 'device_id': device.identifier}) + instance={'name': device.name, 'rfid': rfid.code, 'device': device.identifier}) return Response(serializer.data, status=200)