Tests for helper functions

This commit is contained in:
Oliver Walters 2019-06-17 22:36:17 +10:00
parent 08358f6961
commit 38ef9b2b13
3 changed files with 67 additions and 60 deletions

View File

@ -4,6 +4,7 @@ omit =
# Do not run coverage on migration files
*/migrations/*
InvenTree/manage.py
InvenTree/keygen.py
Inventree/InvenTree/middleware.py
Inventree/InvenTree/utils.py
Inventree/InvenTree/wsgi.py

View File

@ -30,67 +30,8 @@ def TestIfImageURL(url):
'.jpg', '.jpeg',
'.png', '.bmp',
'.tif', '.tiff',
'.webp',
'.webp', '.gif',
]
def DownloadExternalFile(url, **kwargs):
""" Attempt to download an external file
Args:
url - External URL
"""
result = {
'status': False,
'url': url,
'file': None,
'status_code': 200,
}
headers = {'User-Agent': 'Mozilla/5.0'}
max_size = kwargs.get('max_size', 1048576) # 1MB default limit
# Get the HEAD for the file
try:
head = requests.head(url, stream=True, headers=headers)
except:
result['error'] = 'Error retrieving HEAD data'
return result
if not head.status_code == 200:
result['error'] = 'Incorrect HEAD status code'
result['status_code'] = head.status_code
return result
try:
filesize = int(head.headers['Content-Length'])
except ValueError:
result['error'] = 'Could not decode filesize'
result['extra'] = head.headers['Content-Length']
return result
if filesize > max_size:
result['error'] = 'File size too large ({s})'.format(s=filesize)
return result
# All checks have passed - download the file
try:
request = requests.get(url, stream=True, headers=headers)
except:
result['error'] = 'Error retriving GET data'
return result
try:
dl_file = io.StringIO(request.text)
result['status'] = True
result['file'] = dl_file
return result
except:
result['error'] = 'Could not convert downloaded data to file'
return result
def str2bool(text, test=True):

View File

@ -2,6 +2,8 @@ from django.test import TestCase
import django.core.exceptions as django_exceptions
from .validators import validate_overage, validate_part_name
from . import helpers
class ValidatorTest(TestCase):
@ -36,3 +38,66 @@ class ValidatorTest(TestCase):
with self.assertRaises(django_exceptions.ValidationError):
validate_overage("aaaa")
class TestHelpers(TestCase):
""" Tests for InvenTree helper functions """
def test_image_url(self):
""" Test if a filename looks like an image """
for name in ['ape.png', 'bat.GiF', 'apple.WeBP', 'BiTMap.Bmp']:
self.assertTrue(helpers.TestIfImageURL(name))
for name in ['no.doc', 'nah.pdf', 'whatpng']:
self.assertFalse(helpers.TestIfImageURL(name))
def test_str2bool(self):
""" Test string to boolean conversion """
for s in ['yes', 'Y', 'ok', '1', 'OK', 'Ok', 'tRuE', 'oN']:
self.assertTrue(helpers.str2bool(s))
self.assertFalse(helpers.str2bool(s, test=False))
for s in ['nO', '0', 'none', 'noNE', None, False, 'falSe', 'off']:
self.assertFalse(helpers.str2bool(s))
self.assertTrue(helpers.str2bool(s, test=False))
for s in ['wombat', '', 'xxxx']:
self.assertFalse(helpers.str2bool(s))
self.assertFalse(helpers.str2bool(s, test=False))
class TestQuoteWrap(TestCase):
""" Tests for string wrapping """
def test_single(self):
self.assertEqual(helpers.WrapWithQuotes('hello'), '"hello"')
self.assertEqual(helpers.WrapWithQuotes('hello"'), '"hello"')
class TestMakeBarcoede(TestCase):
""" Tests for barcode string creation """
def test_barcode(self):
data = {
'animal': 'cat',
'legs': 3,
'noise': 'purr'
}
bc = helpers.MakeBarcode("part", 3, "www.google.com", data)
self.assertIn('animal', bc)
self.assertIn('tool', bc)
self.assertIn('"tool": "InvenTree"', bc)
class TestDownloadFile(TestCase):
def test_download(self):
helpers.DownloadFile("hello world", "out.txt")
helpers.DownloadFile(bytes("hello world".encode("utf8")), "out.bin")