def build_validator(): destination_validators = { 'user': [GetResource('user_id', user_dao.get, 'User')], 'group': [ResourceExists('group_id', group_dao.exists, 'Group')], 'queue': [ResourceExists('queue_id', queue_dao.exists, 'Queue')], 'conference': [ResourceExists('conference_id', conference_dao.exists, 'Conference')], 'custom': [CustomValidator()], 'service': [], 'forward': [ForwardValidator()], 'transfer': [], 'agent': [ResourceExists('agent_id', agent_dao.exists, 'Agent')], 'park_position': [ParkPositionValidator(feature_dao)], 'parking': [], 'onlinerec': [], 'paging': [ResourceExists('paging_id', paging_dao.exists, 'Paging')], 'bsfilter': [ ResourceExists('filter_member_id', bsfilter_dao.filter_member_exists, 'FilterMember') ], } funckey_validator = FuncKeyModelValidator(destination_validators) mapping_validator = FuncKeyMappingValidator(funckey_validator) similar_validator = SimilarFuncKeyValidator() required_validator = MissingFields() private_template_validator = PrivateTemplateValidator() return ValidationGroup( common=[required_validator, mapping_validator, similar_validator], delete=[private_template_validator])
class TestResourceExists(unittest.TestCase): def setUp(self): self.dao_exist = Mock() self.validator = ResourceExists('field', self.dao_exist) def test_given_resource_does_not_exist_then_raises_error(self): model = Mock(field=sentinel.field) self.dao_exist.return_value = False assert_that(calling(self.validator.validate).with_args(model), raises(InputError)) def test_given_resource_exists_then_validation_passes(self): model = Mock(field=sentinel.field) self.dao_exist.return_value = True self.validator.validate(model) self.dao_exist.assert_called_once_with(model.field)
def build_validator(): return ValidationGroup( common=[ RequiredFields('firstname'), Optional( 'mobile_phone_number', RegexField.compile('mobile_phone_number', MOBILE_PHONE_NUMBER_REGEX)), Optional('caller_id', RegexField.compile('caller_id', CALLER_ID_REGEX)), Optional('username', RegexField.compile('username', USERNAME_PASSWORD_REGEX)), Optional('password', RegexField.compile('password', USERNAME_PASSWORD_REGEX)), Optional( 'call_permission_password', RegexField.compile('call_permission_password', CALL_PERMISSION_PASSWORD_REGEX)), Optional( 'ring_seconds', NumberRange('ring_seconds', minimum=0, maximum=60, step=5)), Optional('simultaneous_calls', NumberRange('simultaneous_calls', minimum=1, maximum=20)), Optional('language', RegexField.compile('language', LANGUAGE_REGEX)), Optional( 'entity_id', ResourceExists('entity_id', entity_db.entity_id_exists, 'Entity')) ], delete=[ NoVoicemailAssociated(user_voicemail_dao), NoLineAssociated(user_line_dao) ], create=[ Optional( 'email', UniqueField('email', lambda email: user_dao.find_by(email=email), 'User')) ], edit=[ RequiredFields('call_transfer_enabled', 'call_record_enabled', 'online_call_record_enabled', 'supervision_enabled', 'ring_seconds', 'simultaneous_calls', 'caller_id', 'enabled'), Optional('email', UniqueFieldChanged('email', user_dao, 'User')), ])
def setUp(self): self.dao_exist = Mock() self.validator = ResourceExists('field', self.dao_exist)