1
0
mirror of https://github.com/daniviga/bite.git synced 2025-04-20 14:31:20 +02:00

Add some tests

This commit is contained in:
Daniele Viganò 2020-06-19 18:35:37 +02:00
parent b18030f5e5
commit 68e7dc737c
Signed by: dani
GPG Key ID: DB49AFC03C40EE02
4 changed files with 104 additions and 5 deletions

View File

@ -1,3 +1,26 @@
from django.test import TestCase from django.test import TestCase, Client
from api.models import Device, WhiteList
# Create your tests here.
class ApiTestCase(TestCase):
c = Client()
def setUp(self):
WhiteList.objects.create(serial='test1234')
Device.objects.create(serial='test1234')
def test_no_whitelist(self):
response = self.c.post('/api/device/subscribe/',
{'serial': 'test12345'})
self.assertEqual(response.status_code, 400)
def test_subscribe_post(self):
WhiteList.objects.create(serial='test12345')
response = self.c.post('/api/device/subscribe/',
{'serial': 'test12345'})
self.assertEqual(response.status_code, 201)
def test_subscribe_get(self):
response = self.c.get('/api/device/list/')
self.assertEqual(
response.json()[0]['serial'], 'test1234')

View File

@ -0,0 +1,20 @@
# Generated by Django 3.0.7 on 2020-06-19 16:27
import django.contrib.postgres.fields.jsonb
from django.db import migrations
import telemetry.models
class Migration(migrations.Migration):
dependencies = [
('telemetry', '0007_telemetry_transport'),
]
operations = [
migrations.AlterField(
model_name='telemetry',
name='payload',
field=django.contrib.postgres.fields.jsonb.JSONField(validators=[telemetry.models.telemetry_validation]),
),
]

View File

@ -1,10 +1,16 @@
from django.db import models from django.db import models
from django.core.validators import MinValueValidator from django.core.validators import MinValueValidator
from django.core.exceptions import ValidationError
from django.contrib.postgres.fields import JSONField from django.contrib.postgres.fields import JSONField
from api.models import Device from api.models import Device
def telemetry_validation(value):
if not value:
raise ValidationError("No telemetry has been sent")
class Telemetry(models.Model): class Telemetry(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE) device = models.ForeignKey(Device, on_delete=models.CASCADE)
time = models.DateTimeField(primary_key=True, auto_now_add=True) time = models.DateTimeField(primary_key=True, auto_now_add=True)
@ -14,7 +20,7 @@ class Telemetry(models.Model):
clock = models.IntegerField( clock = models.IntegerField(
validators=[MinValueValidator(0)], validators=[MinValueValidator(0)],
null=True) null=True)
payload = JSONField() payload = JSONField(validators=[telemetry_validation])
class Meta: class Meta:
ordering = ['-time', 'device'] ordering = ['-time', 'device']

View File

@ -1,3 +1,53 @@
from django.test import TestCase import json
from django.test import TestCase, Client
from api.models import Device, WhiteList
# Create your tests here.
class ApiTestCase(TestCase):
c = Client()
payload = {
'id': 'sensor.server.domain',
'light': 434,
'temperature': {
'celsius': 27.02149,
'raw': 239,
'volts': 0.770215
}
}
telemetry = {
'device': 'test1234',
'clock': 1591194712,
'payload': json.dumps(payload)
}
def setUp(self):
WhiteList.objects.create(serial='test1234')
Device.objects.create(serial='test1234')
def test_no_device(self):
fake_telemetry = dict(self.telemetry) # make a copy of the dict
fake_telemetry['device'] = '1234test'
response = self.c.post('/telemetry/', fake_telemetry)
self.assertEqual(response.status_code, 400)
def test_empty_telemetry(self):
fake_telemetry = dict(self.telemetry) # make a copy of the dict
fake_telemetry['payload'] = ''
response = self.c.post('/telemetry/', fake_telemetry)
self.assertEqual(response.status_code, 400)
def test_telemetry_post(self):
response = self.c.post('/telemetry/', self.telemetry)
self.assertEqual(response.status_code, 201)
def test_telemetry_get(self):
response = self.c.post('/telemetry/', self.telemetry)
response = self.c.get('/telemetry/test1234/last/')
self.assertEqual(
response.json()['device'], 'test1234')
self.assertEqual(
response.json()['transport'], 'http')
self.assertJSONEqual(
json.dumps(response.json()['payload']), self.payload)