예제 #1
0
    def test_given_schema_should_fail(self):
        request = {
            'name': 'url name',
            'url': 'gobbledigook'
        }
        defaults = {
            'required': True,
            'maxlength': 100
        }
        schema = {
            'name': validation.Schema(**defaults),
            'url': validation.Schema(
                custom=[(validation.is_url, "must be a valid URL")]),
        }

        valid, errors = validation.validate(request, schema)
        self.assertFalse(valid)
        self.assertEqual(errors['url'], ['must be a valid URL'])
예제 #2
0
    def test_given_schema_should_pass(self):
        request = {
            'name': 'url name',
            'url': 'http://www.example.com'
        }

        defaults = {
            'required': True,
            'maxlength': 100
        }

        schema = {
            'name': validation.Schema(**defaults),
            'url': validation.Schema(
                custom=[(validation.is_url, "must be a valid url")],
                **defaults)
        }

        valid, errors = validation.validate(request, schema)
        self.assertTrue(valid)
        self.assertFalse(errors)
예제 #3
0
    def test_custom_validator_func_fails(self):

        def nope(x):
            return False

        request = {'foo': 'test'}
        schema = {
            'foo': validation.Schema(
                custom=[(nope, "this function always fails")])
        }
        valid, errors = validation.validate(request, schema)
        self.assertFalse(valid)
        self.assertEqual(errors['foo'], ['this function always fails'])
class CreateUserUseCase(IUseCase):

    _validation_schema = {
        'username': validation.Schema(
            required=True,
            maxlength=20,
            custom=[(validation.is_valid_username, "Username is not allowed")],
        )
    }

    def execute(self, request, presenter):
        """

        :param request:
        :param presenter:
        :return:
        """
        username = request['username']
        password = request['password']
        response = {'user_created': False, 'username': username, 'errors': {}}

        is_valid, errors = validation.validate(
            {'username': username},
            self._validation_schema
        )

        if errors:
            response['errors'] = errors
        elif context.user_repo.exists(username):
            LOGGER.info("create_user: user '{}' already exists".format(username))
            response['errors'] = {'username': ['That username is taken']}
        else:
            user = User(username)
            user.password_hash = create_password_hash(password)
            context.user_repo.save(user)
            response['user_created'] = True

        presenter.present(response)
예제 #5
0
 def test_value_meets_maxlength(self):
     request = {'foo': 'test'}
     schema = {'foo': validation.Schema(maxlength=4)}
     valid, errors = validation.validate(request, schema)
     self.assertTrue(valid)
     self.assertFalse(errors)
예제 #6
0
 def test_value_exceeds_maxlength(self):
     request = {'foo': 'test'}
     schema = {'foo': validation.Schema(maxlength=2)}
     valid, errors = validation.validate(request, schema)
     self.assertFalse(valid)
     self.assertEqual(errors['foo'], ['Value exceeds maximum length 2'])
예제 #7
0
 def test_required_value_missing(self):
     request = {}
     schema = {'foo': validation.Schema(required=True)}
     is_valid, errors = validation.validate(request, schema)
     self.assertFalse(is_valid)
     self.assertEqual(errors['foo'], ['Value is required'])
예제 #8
0
 def test_required_value_present_and_none(self):
     request = {'foo': None}
     schema = {'foo': validation.Schema(required=True)}
     is_valid, errors = validation.validate(request, schema)
     self.assertFalse(is_valid)
     self.assertEqual(errors['foo'], ['Value is required'])
예제 #9
0
 def test_required_value_present(self):
     request = {'foo': 'foo is here'}
     schema = {'foo': validation.Schema(required=True)}
     valid, errors = validation.validate(request, schema)
     self.assertTrue(valid)
     self.assertFalse(errors)