From a9e90b7368ce956c09867e790e18f5fa370fe75c Mon Sep 17 00:00:00 2001 From: Quentin Bonaventure Date: Thu, 29 Dec 2016 13:49:19 +0100 Subject: [PATCH] Proposed rewrite of test_regex Here is a rewritten test suite for Regex DataHandler. This rewrite aims at being lighter, more readable, accurate. --- tests/datahandlers/test_regex.py | 112 +++++++++++++++++-------------- 1 file changed, 63 insertions(+), 49 deletions(-) diff --git a/tests/datahandlers/test_regex.py b/tests/datahandlers/test_regex.py index 4a8c23e..2f88b66 100644 --- a/tests/datahandlers/test_regex.py +++ b/tests/datahandlers/test_regex.py @@ -1,56 +1,70 @@ import unittest from lodel.exceptions import * -from lodel.leapi.datahandlers.datas import Regex, Varchar, Integer - +from lodel.leapi.datahandlers.datas import Regex, Varchar, Integer, UniqID +from lodel.leapi.datahandlers.base_classes import DataHandler +from unittest.mock import Mock +import re class RegexTestCase(unittest.TestCase): - - def test_check_correct_data_value(self): - test_value = '126.205.255.12' - test_regex = Regex('^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$', - max_length=100) - value = test_regex._check_data_value(test_value) - self.assertEqual(value, test_value) - - def test_check_bad_data_value(self): - test_regex = Regex('^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$', - max_length=15) - for test_value in ['800.9.10.5', 'test_string_value', '999.999.999.999']: - with self.assertRaises(FieldValidationError): - test_regex._check_data_value(test_value) - - def test_check_bad_compile_regex(self): - test_max_length = 15 - test_regex = Regex('^\d[a-z]+8?', max_length=15) - for test_value in ['cccc8']: - with self.assertRaises(FieldValidationError): - test_regex._check_data_value(test_value) - - def test_check_bad_max_length(self): - test_max_length = 15 - test_regex = Regex('[a-z]+8?', max_length=15) - for test_value in ['ccccccccccccccccccccccccccccccccc8']: - with self.assertRaises(FieldValidationError): - test_regex._check_data_value(test_value) + + + def test_invalid_regex_throws_TypeError(self): + self.assertRaises(TypeError, Regex().__init__, object) + + + def test_compiled_re_property_is_set(self): + self.assertIs(self.testee.compiled_re, re.compile(self.testee.regex)) + + + def test_exceeding_value_length_throws_FieldValidationError(self): + self.assertRaises( + FieldValidationError, + self.testee._check_data_value, + self.valid_value*self.max_length + ) + - def test_check_good_max_length(self): - test_max_length = 15 - test_regex = Regex('^\d[a-z]+8?', max_length=15) - for test_value in ['3ccccccccc8']: - value = test_regex._check_data_value(test_value) - self.assertEqual(value, test_value) + def test_invalid_field_value_throws_FieldValidationError(self): + self.assertRaises( + FieldValidationError, + self.testee._check_data_value, + '' + ) + + + def test_valid_field_value_is_returned(self): + self.assertEqual(self.valid_value, self.testee._check_data_value(self.valid_value)) + + + def test_can_override_returns_false_if_different_datahandler_base_type(self): + mock = self._get_datahandler_mock() + mock.__class__.base_type = self.testee.base_type*2 + + self.assertFalse(self.testee.can_override(mock)) + + + def test_can_override_returns_false_if_different_datahandler_maxlen(self): + mock = self._get_datahandler_mock() + mock.__class__.max_length = self.max_length*2 - def test_can_override(self): - test_regex = Regex('^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$', - max_length=15) - for test_varchar in [Varchar(), Varchar(max_length=15), Varchar(max_length=9)]: - if test_regex.max_length == test_varchar.max_length: - self.assertTrue(test_regex.can_override(test_varchar)) - else: - self.assertFalse(test_regex.can_override(test_varchar)) + self.assertFalse(self.testee.can_override(mock)) - def test_cant_override(self): - test_regex = Regex('^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$', - max_length=15) - test_int = Integer() - self.assertFalse(test_regex.can_override(test_int)) + + def test_can_override_returns_true_if_overridable(self): + self.assertTrue(self.testee.can_override(self._get_datahandler_mock())) + + + def _get_datahandler_mock(self): + dataHandlerMock = Mock() + dataHandlerMock.__class__.base_type = self.testee.base_type + dataHandlerMock.__class__.max_length = self.testee.max_length + + return dataHandlerMock + + + def setUp(self): + self.max_length = 15 + self.regex = '^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' + self.valid_value = '126.205.255.12' + self.testee = Regex(self.regex, self.max_length) + \ No newline at end of file