Esempio n. 1
0
    def test_with_bad_arguments(self, mocked_use_case):
        invalid_request = InvalidRequestObject()
        invalid_request.add_error('filter', 'bad filter')
        error = errors.Error.build_from_invalid_request_object(invalid_request)
        mocked_use_case().execute.return_value = ro.ResponseFailure.from_error(error)

        response = self.c.get(reverse('books_list'), {})
        self.assertEqual(response.status_code, 400)

        response_error_data = {'filter': ['bad filter']}
        self.assertEqual(json.loads(response.content.decode('utf-8')), response_error_data)
Esempio n. 2
0
 def give(cls, pk, patch):
     try:
         if Book.objects.get(pk=pk).is_available:
             Book.objects.filter(pk=pk).update(is_available=False,
                                               reader=patch.get('reader'))
             book = Book.objects.get(pk=pk)
             return cls._convert_to_domain(book)
         else:
             inv_req = InvalidRequestObject()
             inv_req.add_error('primary key', 'this book is not available')
             error = errors.Error.build_from_invalid_request_object(inv_req)
             return error
     except Exception:
         error = errors.Error.build_resource_error()
         return error
Esempio n. 3
0
 def take(cls, pk, patch):
     try:
         if not Book.objects.get(pk=pk).is_available:
             Book.objects.filter(pk=pk).update(is_available=True,
                                               reader=None)
             book = Book.objects.get(pk=pk)
             return cls._convert_to_domain(book)
         else:
             inv_req = InvalidRequestObject()
             inv_req.add_error('primary key', 'this book is in the library')
             error = errors.Error.build_from_invalid_request_object(inv_req)
             return error
     except Exception:
         error = errors.Error.build_resource_error()
         return error
Esempio n. 4
0
    def from_dict(cls, adict):
        invalid_req = InvalidRequestObject()

        schema = Schema(
            {
                Required('full_name'):
                All(str, Length(min=1, max=128)),
                Required('reg_date'):
                Any(
                    All(
                        datetime.date,
                        Range(min=datetime.date(1000, 1, 1),
                              max=datetime.date.today())),
                    Datetime('%Y-%m-%d')),
            },
            extra=REMOVE_EXTRA)

        try:
            values = schema(adict)
        except MultipleInvalid as exc:
            for error in exc.errors:
                try:
                    invalid_req.add_error(parameter='.'.join(
                        [p for p in error.path]),
                                          message=error.error_message)
                except TypeError as e:
                    invalid_req.add_error(parameter='.'.join(
                        [p.schema for p in error.path]),
                                          message=error.error_message)

        if invalid_req.has_errors():
            return invalid_req

        return ReaderAddRequestObject(init_values=values)
Esempio n. 5
0
    def from_dict(cls, adict):
        invalid_req = InvalidRequestObject()

        if not bool(adict):
            invalid_req.add_error('request dictionary',
                                  'is empty, has to pass primary key')
        elif 'pk' not in adict.keys():
            invalid_req.add_error('primary key', 'has to pass primary key')
        elif not isinstance(adict.get('pk'), int) and not check_if_int(
                adict.get('pk')):
            invalid_req.add_error('primary key', 'has to be integer')

        if invalid_req.has_errors():
            return invalid_req

        return ReaderDeleteRequestObject(pk=int(adict.get('pk')))
Esempio n. 6
0
    def from_dict(cls, adict):
        invalid_req = InvalidRequestObject()

        schema = Schema(
            {
                Required('title'):
                All(str, Length(min=1, max=128)),
                Required('author'):
                All(str, Length(min=1, max=128)),
                Required('year'):
                Any(
                    Datetime('%Y'),
                    All(int, Range(min=1000,
                                   max=datetime.datetime.now().year))),
                Required('language'):
                All(str, Length(min=1, max=128)),
            },
            extra=REMOVE_EXTRA)

        try:
            values = schema(adict)
        except MultipleInvalid as exc:
            for error in exc.errors:
                try:
                    invalid_req.add_error(parameter='.'.join(
                        [p for p in error.path]),
                                          message=error.error_message)
                except TypeError as e:
                    invalid_req.add_error(parameter='.'.join(
                        [p.schema for p in error.path]),
                                          message=error.error_message)

        if invalid_req.has_errors():
            return invalid_req

        return BookAddRequestObject(init_values=values)
Esempio n. 7
0
def test_validation_error_messages(dictionaries):
    try:
        request_object_errors = readers.ReaderAddRequestObject.from_dict(
            dictionaries[0]).errors
    except AttributeError:
        request_object_errors = True
    assert bool(request_object_errors) is True
    invalid_request_object = InvalidRequestObject()
    invalid_request_object.add_error(parameter='full_name',
                                     message=['required key not provided'])
    invalid_request_object.add_error(parameter='reg_date',
                                     message=['required key not provided'])

    assert sorted(request_object_errors) == sorted(
        invalid_request_object.errors)

    try:
        request_object_errors = readers.ReaderAddRequestObject.from_dict(
            dictionaries[1]).errors
    except AttributeError:
        request_object_errors = True
    assert bool(request_object_errors) is True
    invalid_request_object = InvalidRequestObject()
    invalid_request_object.add_error(parameter='full_name',
                                     message=['expected str'])
    invalid_request_object.add_error(
        parameter='reg_date', message=['does not match regular expression'])

    assert sorted(request_object_errors) == sorted(
        invalid_request_object.errors)

    try:
        request_object_errors = readers.ReaderAddRequestObject.from_dict(
            dictionaries[2]).errors
    except AttributeError:
        request_object_errors = False
    assert bool(request_object_errors) is False

    try:
        request_object_errors = readers.ReaderAddRequestObject.from_dict(
            dictionaries[3]).errors
    except AttributeError:
        request_object_errors = False
    assert bool(request_object_errors) is False
Esempio n. 8
0
    def from_dict(cls, adict):
        invalid_req = InvalidRequestObject()

        if 'filters' in adict:
            if not isinstance(adict['filters'], collections.Mapping):
                invalid_req.add_error('filters', 'Is not iterable')
            else:
                good_operators = ('eq', )
                for key in adict['filters'].keys():
                    try:
                        field, operator = key.split('__')
                        if field == 'reg_date':
                            if operator not in ('eq', 'gt', 'lt'):
                                invalid_req.add_error(
                                    field, 'no such comparison operator %s' %
                                    operator)
                        else:
                            if operator not in good_operators:
                                invalid_req.add_error(
                                    field, 'no such comparison operator %s' %
                                    operator)
                        if field not in Reader.__slots__:
                            invalid_req.add_error(field, 'no such field')
                    except ValueError:
                        invalid_req.add_error(key, 'invalid filter')

        if invalid_req.has_errors():
            return invalid_req

        return ReaderListRequestObject(filters=adict.get('filters', None))
Esempio n. 9
0
    def from_dict(cls, adict):
        invalid_req = InvalidRequestObject()

        if not bool(adict):
            invalid_req.add_error('request dictionary',
                                  'is empty, has to pass primary key')
        elif 'pk' not in adict.keys():
            invalid_req.add_error('primary key', 'has to pass primary key')
        elif not isinstance(adict.get('pk'), int) and not check_if_int(
                adict.get('pk')):
            invalid_req.add_error('primary key', 'has to be integer')
        elif 'patch' not in adict.keys():
            invalid_req.add_error('patch', 'has to pass patch instructions')
        elif not isinstance(adict.get('patch'), collections.Mapping):
            invalid_req.add_error('patch', 'is not iterable')
        elif not set(adict.get('patch').keys()) < set(Reader.__slots__):
            invalid_req.add_error('patch', 'parameters in patch are wrong')

        if invalid_req.has_errors():
            return invalid_req

        if invalid_req.has_errors():
            return invalid_req

        return ReaderUpdateRequestObject(pk=int(adict.get('pk')),
                                         patch=adict.get('patch', None))
Esempio n. 10
0
    def from_dict(cls, adict):
        invalid_req = InvalidRequestObject()

        adict['action'] = 'update'
        patch_list = list(Book.__slots__)
        patch_list.append('action')

        if not bool(adict):
            invalid_req.add_error('request dictionary',
                                  'is empty, has to pass primary key')
        elif 'pk' not in adict.keys():
            invalid_req.add_error('primary key', 'has to pass primary key')
        elif not isinstance(adict.get('pk'), int) and not check_if_int(
                adict.get('pk')):
            invalid_req.add_error('primary key', 'has to be integer')
        elif 'patch' not in adict.keys():
            invalid_req.add_error('patch', 'has to pass patch instructions')
        elif not isinstance(adict.get('patch'), collections.Mapping):
            invalid_req.add_error('patch', 'is not iterable')
        elif not set(adict.get('patch').keys()) < set(patch_list):
            invalid_req.add_error('patch', 'parameters in patch are wrong')

        if invalid_req.has_errors():
            return invalid_req

        if 'reader' in adict.get('patch'):
            if len(adict) > 1:
                invalid_req.add_error(
                    'patch', 'reader with other parameters is forbidden')
            elif adict.get['reader'] is None:
                adict['action'] = 'take'
            elif not isinstance(adict.get['reader'], Reader):
                invalid_req.add_error('reader', 'just super wrong')
            else:
                adict['action'] = 'give'

        if invalid_req.has_errors():
            return invalid_req

        return BookUpdateRequestObject(pk=int(adict.get('pk')),
                                       patch=adict.get('patch', None))
Esempio n. 11
0
def test_validation_error_messages(dictionaries):
    try:
        request_object_errors = books.BookAddRequestObject.from_dict(
            dictionaries[0]).errors
    except AttributeError:
        request_object_errors = False
    assert bool(request_object_errors) is False

    try:
        request_object_errors = books.BookAddRequestObject.from_dict(
            dictionaries[1]).errors
    except AttributeError:
        request_object_errors = False
    assert bool(request_object_errors) is True
    invalid_request_object = InvalidRequestObject()
    invalid_request_object.add_error(parameter='year',
                                     message=['required key not provided'])
    invalid_request_object.add_error(parameter='title',
                                     message=['required key not provided'])
    invalid_request_object.add_error(parameter='author',
                                     message=['required key not provided'])
    invalid_request_object.add_error(parameter='language',
                                     message=['required key not provided'])

    assert sorted(request_object_errors) == sorted(
        invalid_request_object.errors)

    try:
        request_object_errors = books.BookAddRequestObject.from_dict(
            dictionaries[2]).errors
    except AttributeError:
        request_object_errors = False
    assert bool(request_object_errors) is True

    invalid_request_object = InvalidRequestObject()
    invalid_request_object.add_error(
        parameter='year', message=['does not match regular expression'])
    assert sorted(request_object_errors) == sorted(
        invalid_request_object.errors)

    try:
        request_object_errors = books.BookAddRequestObject.from_dict(
            dictionaries[3]).errors
    except AttributeError:
        request_object_errors = False
    assert bool(request_object_errors) is False

    try:
        request_object_errors = books.BookAddRequestObject.from_dict(
            dictionaries[4]).errors
    except AttributeError:
        request_object_errors = False
    assert bool(request_object_errors) is True

    invalid_request_object = InvalidRequestObject()
    invalid_request_object.add_error(
        parameter='year', message=['does not match regular expression'])
    invalid_request_object.add_error(parameter='author',
                                     message=['expected str'])
    assert sorted(request_object_errors) == sorted(
        invalid_request_object.errors)