Merge branch 'fix-internal-server-errors' into 'master'
Fix internal server errors
See merge request !8
diff --git a/crashreports/rest_api_devices.py b/crashreports/rest_api_devices.py
index 3934db6..e3a4e5f 100644
--- a/crashreports/rest_api_devices.py
+++ b/crashreports/rest_api_devices.py
@@ -1,6 +1,6 @@
from crashreports.models import *
from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
-from crashreports.serializers import DeviceSerializer
+from crashreports.serializers import DeviceSerializer, DeviceCreateSerializer
from django.contrib.auth.models import Permission
from rest_framework import generics
from rest_framework.authtoken.models import Token
@@ -36,13 +36,16 @@
a token.
We generate the uuid here as this makes it easier to deal with collisions.
"""
+ # Return status '400 Bad Request' if data is not well-formed.
+ serializer = DeviceCreateSerializer(data=request.data)
+ serializer.is_valid(raise_exception=True)
device = Device()
user = User.objects.create_user("device_" + str(device.uuid), '', None)
permission = Permission.objects.get(name='Can add crashreport')
user.user_permissions.add(permission)
user.save()
- device.board_date = request.data['board_date']
- device.chipset = request.data['chipset']
+ device.board_date = serializer.validated_data['board_date']
+ device.chipset = serializer.validated_data['chipset']
device.user = user
device.token = Token.objects.create(user=user).key
device.save()
diff --git a/crashreports/serializers.py b/crashreports/serializers.py
index e219242..dffce56 100644
--- a/crashreports/serializers.py
+++ b/crashreports/serializers.py
@@ -82,3 +82,14 @@
class Meta:
model = Device
+
+
+class DeviceCreateSerializer(DeviceSerializer):
+
+ class Meta:
+ model = Device
+ fields = ('board_date', 'chipset')
+ extra_kwargs = {
+ 'board_date': {'required': True},
+ 'chipset': {'required': True},
+ }
diff --git a/crashreports/tests.py b/crashreports/tests.py
index ea29d57..1f88f22 100644
--- a/crashreports/tests.py
+++ b/crashreports/tests.py
@@ -11,14 +11,37 @@
class DeviceTestCase(APITestCase):
def setUp(self):
- pass
+ self.url = "/hiccup/api/v1/devices/register/"
def test(self):
- request = self.client.post("/hiccup/api/v1/devices/register/", device_register_data)
+ request = self.client.post(self.url, device_register_data)
self.assertTrue("token" in request.data)
self.assertTrue("uuid" in request.data)
self.assertEqual(request.status_code, status.HTTP_200_OK)
+ def test_create_missing_fields(self):
+ request = self.client.post(self.url)
+ self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+ def test_create_missing_board_date(self):
+ request = self.client.post(self.url, {
+ "board_date": device_register_data["board_date"]
+ })
+ self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+ def test_create_missing_chipset(self):
+ request = self.client.post(self.url, {
+ "chipset": device_register_data["chipset"]
+ })
+ self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+ def test_create_invalid_board_date(self):
+ request = self.client.post(self.url, {
+ "board_date": "not_a_valid_date"
+ })
+ self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST)
+
+
# Create your tests here.
device_register_data = {
diff --git a/hiccup/settings.py b/hiccup/settings.py
index bac2829..939e5e3 100644
--- a/hiccup/settings.py
+++ b/hiccup/settings.py
@@ -183,6 +183,29 @@
STATIC_ROOT = "/home/hiccup/static/static"
+
+# Logging
+# https://docs.djangoproject.com/en/2.0/topics/logging/#examples
+
+LOGGING = {
+ 'version': 1,
+ 'disable_existing_loggers': False,
+ 'handlers': {
+ 'file': {
+ 'level': 'DEBUG',
+ 'class': 'logging.FileHandler',
+ 'filename': '/home/hiccup/log/debug.log',
+ },
+ },
+ 'loggers': {
+ 'django': {
+ 'handlers': ['file'],
+ 'level': 'DEBUG',
+ 'propagate': True,
+ },
+ },
+}
+
try:
from local_settings import *
except ImportError as e: