small fixes to wip rfid api

This commit is contained in:
Oliver Marks 2017-09-13 07:25:56 +01:00 committed by Oly
parent ed9958b2ad
commit c16e9079ca
4 changed files with 28 additions and 20 deletions

View File

@ -11,26 +11,15 @@ from mhackspace.users.models import Rfid
# just brainstorming so we can start playing with this, # just brainstorming so we can start playing with this,
# be nice to make this a 3rd party django installable app ? # be nice to make this a 3rd party django installable app ?
# description of a device like door, print, laser cutter # description of a device like door, print, laser cutter
class Device(models.Model): class Device(models.Model):
# user = models.ManyToMany(settings.AUTH_USER_MODEL) # user = models.ManyToMany(settings.AUTH_USER_MODEL)
identifier = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(_('Device name'), max_length=255) name = models.CharField(_('Device name'), max_length=255)
identifier = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
description = models.CharField(_('Short description of what the device does'), blank=True, max_length=255) description = models.CharField(_('Short description of what the device does'), blank=True, max_length=255)
added_date = models.DateTimeField(default=timezone.now, editable=False) added_date = models.DateTimeField(default=timezone.now, editable=False)
members = models.ManyToManyField(Rfid, through='DeviceAuth') members = models.ManyToManyField(Rfid, through='DeviceAuth')
# user = models.ForeignKey(
# settings.AUTH_USER_MODEL,
# null=True, blank=True,
# # related_name='rfid_user'
# )
def __str__(self): def __str__(self):
return self.name return self.name

View File

@ -10,8 +10,9 @@ class Task(object):
class DeviceSerializer(serializers.ModelSerializer): class DeviceSerializer(serializers.ModelSerializer):
added_date = serializers.DateTimeField(format='iso-8601')
class Meta: class Meta:
model = DeviceAuth model = Device
fields = ('__all__') fields = ('__all__')

View File

@ -28,24 +28,30 @@ class ApiTests(TestCase):
def setUp(self): def setUp(self):
self.user = User(name='User01') self.user = User(name='User01')
self.user.save() self.user.save()
self.device = Device(name='device01', user=self.user) self.device = Device(
name='device01',
identifier='8e274b70-a4b3-4600-9472-f20ea7828cb6')
self.device.save() self.device.save()
self.rfid = Rfid(code='1', user=self.user) self.rfid = Rfid(code='1', user=self.user)
self.rfid.save() self.rfid.save()
self.auth = DeviceAuth(rfid=self.rfid, device=self.device) self.auth = DeviceAuth(rfid=self.rfid, device=self.device)
self.save() self.auth.save()
def testAuth(self): def testAuth(self):
factory = APIRequestFactory() factory = APIRequestFactory()
request = factory.get('/rfid/') request = factory.get('/rfid/')
def testValidAuthCase(self): def testValidAuthCase(self):
"if we have a user rfid and a device identifier"
client = RequestsClient() client = RequestsClient()
response = client.post( response = client.post(
'http://127.0.0.1:8180/api/v1/rfidAuth/', 'http://127.0.0.1:8180/api/v1/rfidAuth/',
data={'rfid': '1', 'device': self.device.identifier}) data={'rfid': '1', 'device': self.device.identifier})
assert response.status_code == 200 assert response.status_code == 200
expected_result = {'rfid': self.rfid.code, 'name': 'device01', 'device': str(self.device.identifier)} expected_result = {
'rfid': self.rfid.code,
'name': 'device01',
'device': str(self.device.identifier)}
self.assertEquals( self.assertEquals(
response.json(), response.json(),
expected_result expected_result
@ -68,11 +74,23 @@ class ApiTests(TestCase):
client = RequestsClient() client = RequestsClient()
response = client.get('http://127.0.0.1:8180/api/v1/rfid/?format=json') response = client.get('http://127.0.0.1:8180/api/v1/rfid/?format=json')
assert response.status_code == 200 assert response.status_code == 200
self.assertEquals(response.json().get('results'), [{'name': 'device01'}]) self.assertEquals(response.json().get('results'), [{
'name': 'device01',
'identifier': '8e274b70-a4b3-4600-9472-f20ea7828cb6',
'members': [1],
'added_date': self.device.added_date.isoformat().replace('+00:00', 'Z'),
'description': ''
}])
def testFetchDeviceList(self): def testFetchDeviceList(self):
client = RequestsClient() client = RequestsClient()
response = client.get('http://127.0.0.1:8180/api/v1/rfid/?format=json') response = client.get('http://127.0.0.1:8180/api/v1/rfid/?format=json')
assert response.status_code == 200 assert response.status_code == 200
self.assertEquals(response.json().get('results'), [{'name': 'device01'}]) self.assertEquals(response.json().get('results'), [{
'name': 'device01',
'identifier': '8e274b70-a4b3-4600-9472-f20ea7828cb6',
'members': [1],
'added_date': self.device.added_date.isoformat().replace('+00:00', 'Z'),
'description': ''
}])

View File

@ -22,13 +22,13 @@ class AuthUserWithDeviceViewSet(viewsets.ViewSet):
def list(self, request): def list(self, request):
serializer = DeviceSerializer( serializer = DeviceSerializer(
DeviceAuth.objects.all(), many=True) Device.objects.all(), many=True)
return Response(serializer.data) return Response(serializer.data)
def post(self, request, format=None): def post(self, request, format=None):
try: try:
rfid = Rfid.objects.get(code=request.data.get('rfid')) rfid = Rfid.objects.get(code=request.data.get('rfid'))
device = Device.objects.get(identifier=request.data.get('device')) # device = Device.objects.get(identifier=request.data.get('device'))
deviceAuth = DeviceAuth.objects.get(device=device.identifier, rfid=rfid.id) deviceAuth = DeviceAuth.objects.get(device=device.identifier, rfid=rfid.id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND) return Response(status=status.HTTP_404_NOT_FOUND)