Changeset View
Changeset View
Standalone View
Standalone View
swh/model/tests/fields/test_simple.py
# Copyright (C) 2015 The Software Heritage developers | # Copyright (C) 2015 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import datetime | import datetime | ||||
import unittest | import unittest | ||||
from nose.tools import istest | |||||
from swh.model.exceptions import ValidationError | from swh.model.exceptions import ValidationError | ||||
from swh.model.fields import simple | from swh.model.fields import simple | ||||
class ValidateSimple(unittest.TestCase): | class ValidateSimple(unittest.TestCase): | ||||
def setUp(self): | def setUp(self): | ||||
self.valid_str = 'I am a valid string' | self.valid_str = 'I am a valid string' | ||||
self.valid_bytes = b'I am a valid bytes object' | self.valid_bytes = b'I am a valid bytes object' | ||||
self.enum_values = {'an enum value', 'other', 'and another'} | self.enum_values = {'an enum value', 'other', 'and another'} | ||||
self.invalid_enum_value = 'invalid enum value' | self.invalid_enum_value = 'invalid enum value' | ||||
self.valid_int = 42 | self.valid_int = 42 | ||||
self.valid_real = 42.42 | self.valid_real = 42.42 | ||||
self.valid_datetime = datetime.datetime(1999, 1, 1, 12, 0, 0, | self.valid_datetime = datetime.datetime(1999, 1, 1, 12, 0, 0, | ||||
tzinfo=datetime.timezone.utc) | tzinfo=datetime.timezone.utc) | ||||
self.invalid_datetime_notz = datetime.datetime(1999, 1, 1, 12, 0, 0) | self.invalid_datetime_notz = datetime.datetime(1999, 1, 1, 12, 0, 0) | ||||
@istest | def test_validate_int(self): | ||||
def validate_int(self): | |||||
self.assertTrue(simple.validate_int(self.valid_int)) | self.assertTrue(simple.validate_int(self.valid_int)) | ||||
@istest | def test_validate_int_invalid_type(self): | ||||
def validate_int_invalid_type(self): | |||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_int(self.valid_str) | simple.validate_int(self.valid_str) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'unexpected-type') | self.assertEqual(exc.code, 'unexpected-type') | ||||
self.assertEqual(exc.params['expected_type'], 'Integral') | self.assertEqual(exc.params['expected_type'], 'Integral') | ||||
self.assertEqual(exc.params['type'], 'str') | self.assertEqual(exc.params['type'], 'str') | ||||
@istest | def test_validate_str(self): | ||||
def validate_str(self): | |||||
self.assertTrue(simple.validate_str(self.valid_str)) | self.assertTrue(simple.validate_str(self.valid_str)) | ||||
@istest | def test_validate_str_invalid_type(self): | ||||
def validate_str_invalid_type(self): | |||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_str(self.valid_int) | simple.validate_str(self.valid_int) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'unexpected-type') | self.assertEqual(exc.code, 'unexpected-type') | ||||
self.assertEqual(exc.params['expected_type'], 'str') | self.assertEqual(exc.params['expected_type'], 'str') | ||||
self.assertEqual(exc.params['type'], 'int') | self.assertEqual(exc.params['type'], 'int') | ||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_str(self.valid_bytes) | simple.validate_str(self.valid_bytes) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'unexpected-type') | self.assertEqual(exc.code, 'unexpected-type') | ||||
self.assertEqual(exc.params['expected_type'], 'str') | self.assertEqual(exc.params['expected_type'], 'str') | ||||
self.assertEqual(exc.params['type'], 'bytes') | self.assertEqual(exc.params['type'], 'bytes') | ||||
@istest | def test_validate_bytes(self): | ||||
def validate_bytes(self): | |||||
self.assertTrue(simple.validate_bytes(self.valid_bytes)) | self.assertTrue(simple.validate_bytes(self.valid_bytes)) | ||||
@istest | def test_validate_bytes_invalid_type(self): | ||||
def validate_bytes_invalid_type(self): | |||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_bytes(self.valid_int) | simple.validate_bytes(self.valid_int) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'unexpected-type') | self.assertEqual(exc.code, 'unexpected-type') | ||||
self.assertEqual(exc.params['expected_type'], 'bytes') | self.assertEqual(exc.params['expected_type'], 'bytes') | ||||
self.assertEqual(exc.params['type'], 'int') | self.assertEqual(exc.params['type'], 'int') | ||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_bytes(self.valid_str) | simple.validate_bytes(self.valid_str) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'unexpected-type') | self.assertEqual(exc.code, 'unexpected-type') | ||||
self.assertEqual(exc.params['expected_type'], 'bytes') | self.assertEqual(exc.params['expected_type'], 'bytes') | ||||
self.assertEqual(exc.params['type'], 'str') | self.assertEqual(exc.params['type'], 'str') | ||||
@istest | def test_validate_datetime(self): | ||||
def validate_datetime(self): | |||||
self.assertTrue(simple.validate_datetime(self.valid_datetime)) | self.assertTrue(simple.validate_datetime(self.valid_datetime)) | ||||
self.assertTrue(simple.validate_datetime(self.valid_int)) | self.assertTrue(simple.validate_datetime(self.valid_int)) | ||||
self.assertTrue(simple.validate_datetime(self.valid_real)) | self.assertTrue(simple.validate_datetime(self.valid_real)) | ||||
@istest | def test_validate_datetime_invalid_type(self): | ||||
def validate_datetime_invalid_type(self): | |||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_datetime(self.valid_str) | simple.validate_datetime(self.valid_str) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'unexpected-type') | self.assertEqual(exc.code, 'unexpected-type') | ||||
self.assertEqual(exc.params['expected_type'], 'one of datetime, Real') | self.assertEqual(exc.params['expected_type'], 'one of datetime, Real') | ||||
self.assertEqual(exc.params['type'], 'str') | self.assertEqual(exc.params['type'], 'str') | ||||
@istest | def test_validate_datetime_invalide_tz(self): | ||||
def validate_datetime_invalide_tz(self): | |||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_datetime(self.invalid_datetime_notz) | simple.validate_datetime(self.invalid_datetime_notz) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'datetime-without-tzinfo') | self.assertEqual(exc.code, 'datetime-without-tzinfo') | ||||
@istest | def test_validate_enum(self): | ||||
def validate_enum(self): | |||||
for value in self.enum_values: | for value in self.enum_values: | ||||
self.assertTrue(simple.validate_enum(value, self.enum_values)) | self.assertTrue(simple.validate_enum(value, self.enum_values)) | ||||
@istest | def test_validate_enum_invalid_value(self): | ||||
def validate_enum_invalid_value(self): | |||||
with self.assertRaises(ValidationError) as cm: | with self.assertRaises(ValidationError) as cm: | ||||
simple.validate_enum(self.invalid_enum_value, self.enum_values) | simple.validate_enum(self.invalid_enum_value, self.enum_values) | ||||
exc = cm.exception | exc = cm.exception | ||||
self.assertIsInstance(str(exc), str) | self.assertIsInstance(str(exc), str) | ||||
self.assertEqual(exc.code, 'unexpected-value') | self.assertEqual(exc.code, 'unexpected-value') | ||||
self.assertEqual(exc.params['value'], self.invalid_enum_value) | self.assertEqual(exc.params['value'], self.invalid_enum_value) | ||||
self.assertEqual(exc.params['expected_values'], | self.assertEqual(exc.params['expected_values'], | ||||
', '.join(sorted(self.enum_values))) | ', '.join(sorted(self.enum_values))) |