def test_NaN_values(self): with self.assertRaises(ValidationError): # <- NaN values should not be caught! with allowed_deviation(0): raise ValidationError(Deviation(float('nan'), 0))
def test_integration_examples(self): # Test allowance of +/- 2 OR +/- 6%. with self.assertRaises(ValidationError) as cm: differences = [ Deviation(+2, 1), # 200% Deviation(+4, 8), # 50% Deviation(+8, 32), # 25% ] with allowed_deviation(2) | allowed_percent(0.25): raise ValidationError(differences) remaining = cm.exception.differences self.assertEqual(remaining, [Deviation(+4, 8)]) # Test missing-type AND matching-value. with self.assertRaises(ValidationError) as cm: differences = [ Missing('A'), Missing('B'), Extra('C'), ] with allowed_missing() & allowed_args(lambda x: x == 'A'): raise ValidationError(differences) remaining = cm.exception.differences self.assertEqual(remaining, [Missing('B'), Extra('C')]) # Test missing-type OR allowed-limit. with self.assertRaises(ValidationError) as cm: differences = [ Extra('A'), Missing('B'), Extra('C'), Missing('D'), ] with allowed_limit(1) | allowed_missing(): raise ValidationError(differences) remaining = cm.exception.differences self.assertEqual(remaining, [Extra('C')]) # Test missing-type AND allowed-limit. with self.assertRaises(ValidationError) as cm: differences = [ Extra('A'), Missing('B'), Missing('C'), ] with allowed_limit(1) & allowed_missing(): # Allows only 1 missing. raise ValidationError(differences) remaining = cm.exception.differences self.assertEqual(remaining, [Extra('A'), Missing('C')]) # Test missing-type OR allowed-limit. with self.assertRaises(ValidationError) as cm: differences = [ Extra('A'), Missing('B'), Extra('C'), Missing('D'), ] with allowed_limit(1) | allowed_specific(Extra('A')): raise ValidationError(differences) remaining = cm.exception.differences self.assertEqual(remaining, [Extra('C'), Missing('D')])
def test_empty_string(self): with allowed_deviation(0): # <- Pass without failure. raise ValidationError(Deviation('', 0)) with allowed_deviation(0): # <- Pass without failure. raise ValidationError(Deviation(0, ''))
def test_invalid_tolerance(self): with self.assertRaises(AssertionError) as cm: with allowed_deviation(-5): # <- invalid pass exc = str(cm.exception) self.assertTrue(exc.startswith('tolerance should not be negative'))
def test_same_value_case(self): with self.assertRaises(ValidationError) as cm: with allowed_deviation(3, 3): # <- Allows off-by-3 only. raise ValidationError(self.differences) result_diffs = cm.exception.differences self.assertEqual({'aaa': Deviation(-1, 10), 'ccc': Deviation(+2, 10)}, result_diffs)
def test_lower_upper_syntax(self): with self.assertRaises(ValidationError) as cm: with allowed_deviation(0, 3): # <- Allows from 0 to 3. raise ValidationError(self.differences) result_diffs = cm.exception.differences self.assertEqual({'aaa': Deviation(-1, 10)}, result_diffs)
def test_tolerance_syntax(self): with self.assertRaises(ValidationError) as cm: with allowed_deviation(2): # <- Allows +/- 2. raise ValidationError(self.differences) remaining = cm.exception.differences self.assertEqual(remaining, {'bbb': Deviation(+3, 10)})