aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorElena ``of Valhalla'' Grandi <valhalla@trueelena.org>2020-10-07 08:45:39 +0200
committerElena ``of Valhalla'' Grandi <valhalla@trueelena.org>2020-10-07 08:45:39 +0200
commit9b54ed0ba513c4fe2e7d403b014e9819a8e84fa5 (patch)
treee461a910e7a390b75439818dbbc81217cbe676f1 /tests
parent7e0061b4d99e8a23734bdd6d9a83942eb73c5793 (diff)
Validate also lists
Diffstat (limited to 'tests')
-rw-r--r--tests/data/wrong/items/07f079d281f542f88b97aa1c30d72e12.yaml11
-rw-r--r--tests/test_types.py70
2 files changed, 57 insertions, 24 deletions
diff --git a/tests/data/wrong/items/07f079d281f542f88b97aa1c30d72e12.yaml b/tests/data/wrong/items/07f079d281f542f88b97aa1c30d72e12.yaml
deleted file mode 100644
index 79fe93f..0000000
--- a/tests/data/wrong/items/07f079d281f542f88b97aa1c30d72e12.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: 'bad things'
-description: |
- An entry with bad things (empty instead of an empty list)
-position: ''
-# number (integer): Enter an integer here
-number: 0
-# float (float): Enter a floating point number here
-float: 0.0
-# price (decimal): prices are never float!
-price: 0.00
-things:
diff --git a/tests/test_types.py b/tests/test_types.py
index 363d9a4..9e0c931 100644
--- a/tests/test_types.py
+++ b/tests/test_types.py
@@ -19,7 +19,7 @@ class testTypes(unittest.TestCase):
}
def test_base(self):
- checker = types.LesanaType(self._get_field_def('base'))
+ checker = types.LesanaType(self._get_field_def('base'), {})
# The base class does not implement empty nor load
with self.assertRaises(NotImplementedError):
@@ -29,7 +29,7 @@ class testTypes(unittest.TestCase):
checker.load("")
def test_string(self):
- checker = types.LesanaString(self._get_field_def('string'))
+ checker = types.LesanaString(self._get_field_def('string'), {})
s = checker.empty()
self.assertEqual(s, "")
@@ -41,7 +41,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(s, None)
def test_text(self):
- checker = types.LesanaText(self._get_field_def('text'))
+ checker = types.LesanaText(self._get_field_def('text'), {})
s = checker.empty()
self.assertEqual(s, "")
@@ -53,7 +53,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(s, None)
def test_int(self):
- checker = types.LesanaInt(self._get_field_def('integer'))
+ checker = types.LesanaInt(self._get_field_def('integer'), {})
v = checker.empty()
self.assertEqual(v, 0)
@@ -72,7 +72,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(v, None)
def test_float(self):
- checker = types.LesanaFloat(self._get_field_def('float'))
+ checker = types.LesanaFloat(self._get_field_def('float'), {})
v = checker.empty()
self.assertEqual(v, 0.0)
@@ -94,7 +94,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(v, None)
def test_decimal(self):
- checker = types.LesanaDecimal(self._get_field_def('decimal'))
+ checker = types.LesanaDecimal(self._get_field_def('decimal'), {})
v = checker.empty()
self.assertEqual(v, decimal.Decimal(0))
@@ -116,7 +116,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(v, None)
def test_timestamp(self):
- checker = types.LesanaTimestamp(self._get_field_def('timestamp'))
+ checker = types.LesanaTimestamp(self._get_field_def('timestamp'), {})
v = checker.empty()
self.assertEqual(v, None)
@@ -142,7 +142,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(v, None)
def test_datetime(self):
- checker = types.LesanaDatetime(self._get_field_def('datetime'))
+ checker = types.LesanaDatetime(self._get_field_def('datetime'), {})
v = checker.empty()
self.assertEqual(v, None)
@@ -171,7 +171,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(v, None)
def test_date(self):
- checker = types.LesanaDate(self._get_field_def('date'))
+ checker = types.LesanaDate(self._get_field_def('date'), {})
v = checker.empty()
self.assertEqual(v, None)
@@ -200,7 +200,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(v, None)
def test_boolean(self):
- checker = types.LesanaBoolean(self._get_field_def('boolean'))
+ checker = types.LesanaBoolean(self._get_field_def('boolean'), {})
v = checker.empty()
self.assertEqual(v, None)
@@ -216,7 +216,7 @@ class testTypes(unittest.TestCase):
self.assertEqual(v, None)
def test_file(self):
- checker = types.LesanaFile(self._get_field_def('file'))
+ checker = types.LesanaFile(self._get_field_def('file'), {})
v = checker.empty()
self.assertEqual(v, "")
@@ -230,7 +230,7 @@ class testTypes(unittest.TestCase):
# TODO: check for invalid file paths
def test_url(self):
- checker = types.LesanaURL(self._get_field_def('url'))
+ checker = types.LesanaURL(self._get_field_def('url'), {})
v = checker.empty()
self.assertEqual(v, "")
@@ -244,7 +244,7 @@ class testTypes(unittest.TestCase):
# TODO: check for invalid URLs
def test_yaml(self):
- checker = types.LesanaYAML(self._get_field_def('yaml'))
+ checker = types.LesanaYAML(self._get_field_def('yaml'), {})
v = checker.empty()
self.assertEqual(v, None)
@@ -259,6 +259,50 @@ class testTypes(unittest.TestCase):
v = checker.load(None)
self.assertEqual(v, None)
+ def test_list(self):
+ field_def = self._get_field_def('yaml')
+ # we use one type that is easy to check for correct validation
+ field_def['list'] = 'int'
+ checker = types.LesanaList(field_def, {'int': types.LesanaInt})
+
+ v = checker.empty()
+ self.assertEqual(v, [])
+
+ some_data = [1, 2, 3]
+ v = checker.load(some_data)
+ self.assertEqual(v, some_data)
+
+ v = checker.load(None)
+ self.assertEqual(v, [])
+
+ for d in (['hello'], 1):
+ with self.assertRaises(types.LesanaValueError):
+ checker.load(d)
+
+ def test_list_unknown_subtype(self):
+ field_def = self._get_field_def('yaml')
+ # we use one type that is easy to check for correct validation
+ field_def['list'] = 'int'
+ checker = types.LesanaList(field_def, {'yaml': types.LesanaYAML})
+
+ v = checker.empty()
+ self.assertEqual(v, [])
+
+ some_data = [1, 2, 3]
+ v = checker.load(some_data)
+ self.assertEqual(v, some_data)
+
+ some_data = ["hello"]
+ v = checker.load(some_data)
+ self.assertEqual(v, some_data)
+
+ v = checker.load(None)
+ self.assertEqual(v, [])
+
+ for d in (1, 1.0):
+ with self.assertRaises(types.LesanaValueError):
+ checker.load(d)
+
if __name__ == '__main__':
unittest.main()