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:
parent
b18030f5e5
commit
68e7dc737c
@ -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')
|
||||||
|
20
bite/telemetry/migrations/0008_auto_20200619_1627.py
Normal file
20
bite/telemetry/migrations/0008_auto_20200619_1627.py
Normal 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]),
|
||||||
|
),
|
||||||
|
]
|
@ -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']
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user