Skip to content

Commit

Permalink
[fix] Ignored empty values in DeviceUpdateInfoView openwisp#425
Browse files Browse the repository at this point in the history
  • Loading branch information
nemesifier committed Apr 7, 2021
1 parent efdc0df commit 18fc208
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 4 deletions.
5 changes: 4 additions & 1 deletion openwisp_controller/config/controller/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,10 @@ def post(self, request, *args, **kwargs):
# update device information
for attr in self.UPDATABLE_FIELDS:
if attr in request.POST:
setattr(device, attr, request.POST.get(attr))
# ignore empty values
value = request.POST.get(attr).strip()
if value:
setattr(device, attr, value)
# validate and save everything or fail otherwise
try:
device.full_clean()
Expand Down
19 changes: 16 additions & 3 deletions openwisp_controller/config/tests/test_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -705,6 +705,7 @@ def test_device_report_status_405(self):

def test_device_update_info(self):
d = self._create_device_config()
url = reverse('controller:device_update_info', args=[d.pk])
params = {
'key': d.key,
'model': 'TP-Link TL-WDR4300 v2',
Expand All @@ -714,16 +715,28 @@ def test_device_update_info(self):
self.assertNotEqual(d.os, params['os'])
self.assertNotEqual(d.system, params['system'])
self.assertNotEqual(d.model, params['model'])
response = self.client.post(
reverse('controller:device_update_info', args=[d.pk]), params
)
response = self.client.post(url, params)
self.assertEqual(response.status_code, 200)
self._check_header(response)
d.refresh_from_db()
self.assertEqual(d.os, params['os'])
self.assertEqual(d.system, params['system'])
self.assertEqual(d.model, params['model'])

with self.subTest('ignore empty values'):
response = self.client.post(
url, {'key': d.key, 'model': '', 'os': '', 'system': ''}
)
self.assertEqual(response.status_code, 200)
self._check_header(response)
d.refresh_from_db()
self.assertNotEqual(d.os, '')
self.assertNotEqual(d.system, '')
self.assertNotEqual(d.model, '')
self.assertEqual(d.os, params['os'])
self.assertEqual(d.system, params['system'])
self.assertEqual(d.model, params['model'])

def test_device_update_info_bad_uuid(self):
d = self._create_device_config()
pk = '{}-wrong'.format(d.pk)
Expand Down

0 comments on commit 18fc208

Please sign in to comment.