def test_07(self): """ Test modifying validators. """ def name_validator(sheet, row, replaced_row=None): """ Splits name into first name and last name. """ first_name, last_name = unicode(row[u'Name']).split() row[u'First name'] = first_name.capitalize() row[u'Last name'] = last_name.capitalize() del row[u'Name'] return row sheet = Sheet(captions=[u'ID', u'First name', u'Last name']) sheet.add_validator(name_validator, 'insert', 'replace') self.assertRaises(ValueError, sheet.append, [u'1', u'Foo Bar']) self.assertRaises( ValueError, sheet.append, {u'ID': 1, u'Name': u'Foo'}) self.assertEqual(len(sheet), 0) sheet.append({u'ID': 1, u'Name': u' fOo bAR'}) self.assertEqual(len(sheet), 1) self.assertEqual(list(sheet[0]), [1, u'Foo', u'Bar']) sheet[0] = {u'ID': u'0', u'Name': u'bar foo'} self.assertEqual(len(sheet), 1) self.assertEqual(list(sheet[0]), [u'0', u'Bar', u'Foo']) validator = UniqueNameValidator() sheet.add_insert_validator(validator.insert) sheet.add_delete_validator(validator.delete) sheet.add_replace_validator(validator.replace) self.assertEqual( sheet.insert_validators, [name_validator, validator.insert]) self.assertEqual( sheet.delete_validators, [validator.delete]) self.assertEqual( sheet.replace_validators, [name_validator, validator.replace]) sheet.append({u'Name': u'Fooer Barer'}) self.assertEqual( list(u', '.join(row) for row in sheet), [u'0, Bar, Foo', u'1, Fooer, Barer']) self.assertRaises( ValidationError, sheet.append, {u'Name': u'Fooer Barer'}) del sheet[1] sheet.append({u'Name': u'Fooer Barer'}) self.assertEqual( list(u', '.join(row) for row in sheet), [u'0, Bar, Foo', u'2, Fooer, Barer']) sheet[1] = {u'Name': u'fooer barer', u'ID': u'1'} self.assertEqual( list(u', '.join(row) for row in sheet), [u'0, Bar, Foo', u'1, Fooer, Barer'])
def test_06(self): """ Test non-modifying validators. """ validator = UniqueIntegerValidator(u'ID') sheet = Sheet(captions=[u'ID']) sheet.add_insert_validator(validator.insert) sheet.add_delete_validator(validator.delete) sheet.add_replace_validator(validator.replace) self.assertEqual(sheet.insert_validators, [validator.insert]) self.assertEqual(sheet.delete_validators, [validator.delete]) self.assertEqual(sheet.replace_validators, [validator.replace]) sheet.add_validator(validate_nothing) self.assertEqual(sheet.insert_validators, [validator.insert]) self.assertEqual(sheet.delete_validators, [validator.delete]) self.assertEqual(sheet.replace_validators, [validator.replace]) sheet.add_validator(validate_nothing, 'insert', 'delete', 'replace') self.assertEqual(sheet.insert_validators, [validator.insert, validate_nothing]) self.assertEqual(sheet.delete_validators, [validator.delete, validate_nothing]) self.assertEqual(sheet.replace_validators, [validator.replace, validate_nothing]) self.assertRaises( ValueError, sheet.add_validator, validate_nothing, 'foo') self.assertRaises(ValidationError, sheet.append, [u'baba']) self.assertEqual(len(sheet), 0) sheet.append([u'2']) sheet.append([u'3']) self.assertEqual(sorted(validator.values), [2, 3]) self.assertEqual(sheet[1][u'ID'], 3) self.assertEqual(len(sheet), 2) self.assertRaises(ValidationError, sheet.append, [3]) self.assertEqual(len(sheet), 2) del sheet[1] self.assertEqual(validator.values, set([2])) sheet.append([u'3']) sheet[1] = {u'ID': 4} sheet.append([u'3'])