diff options
| author | Tom Christie | 2014-09-12 17:03:42 +0100 | 
|---|---|---|
| committer | Tom Christie | 2014-09-12 17:03:42 +0100 | 
| commit | b73a205cc021983d9a508b447f30e144a1ce4129 (patch) | |
| tree | 2a414943c68c31867f25b67770142f04abc01dc3 /tests/utils.py | |
| parent | f95e7fae38968f58e742b93842bda9110a61b9f7 (diff) | |
| download | django-rest-framework-b73a205cc021983d9a508b447f30e144a1ce4129.tar.bz2 | |
Tests for relational fields (not including many=True)
Diffstat (limited to 'tests/utils.py')
| -rw-r--r-- | tests/utils.py | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/tests/utils.py b/tests/utils.py index 28be81bd..5e902ba9 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,4 +1,6 @@  from contextlib import contextmanager +from django.core.exceptions import ObjectDoesNotExist +from django.core.urlresolvers import NoReverseMatch  from django.utils import six  from rest_framework.settings import api_settings @@ -23,3 +25,54 @@ def temporary_setting(setting, value, module=None):      if module is not None:          six.moves.reload_module(module) + + +class MockObject(object): +    def __init__(self, **kwargs): +        self._kwargs = kwargs +        for key, val in kwargs.items(): +            setattr(self, key, val) + +    def __str__(self): +        kwargs_str = ', '.join([ +            '%s=%s' % (key, value) +            for key, value in sorted(self._kwargs.items()) +        ]) +        return '<MockObject %s>' % kwargs_str + + +class MockQueryset(object): +    def __init__(self, iterable): +        self.items = iterable + +    def get(self, **lookup): +        for item in self.items: +            if all([ +                getattr(item, key, None) == value +                for key, value in lookup.items() +            ]): +                return item +        raise ObjectDoesNotExist() + + +class BadType(object): +    """ +    When used as a lookup with a `MockQueryset`, these objects +    will raise a `TypeError`, as occurs in Django when making +    queryset lookups with an incorrect type for the lookup value. +    """ +    def __eq__(self): +        raise TypeError() + + +def mock_reverse(view_name, args=None, kwargs=None, request=None, format=None): +    args = args or [] +    kwargs = kwargs or {} +    value = (args + list(kwargs.values()) + ['-'])[0] +    prefix = 'http://example.org' if request else '' +    suffix = ('.' + format) if (format is not None) else '' +    return '%s/%s/%s%s/' % (prefix, view_name, value, suffix) + + +def fail_reverse(view_name, args=None, kwargs=None, request=None, format=None): +    raise NoReverseMatch() | 
