diff options
| author | James Rutherford | 2015-03-11 10:38:03 +0000 | 
|---|---|---|
| committer | James Rutherford | 2015-03-11 10:38:03 +0000 | 
| commit | 4a2d27975ab5249269aebafd803be87a2107092b (patch) | |
| tree | 55b524c93b02eef404304f734be98871bbb1324f /tests/utils.py | |
| parent | 856dc855c952746f566a6a8de263afe951362dfb (diff) | |
| parent | dc56e5a0f41fdd6350e91a5749023d086bd1640f (diff) | |
| download | django-rest-framework-4a2d27975ab5249269aebafd803be87a2107092b.tar.bz2 | |
Merge pull request #1 from tomchristie/master
Merge in from upstream
Diffstat (limited to 'tests/utils.py')
| -rw-r--r-- | tests/utils.py | 77 | 
1 files changed, 77 insertions, 0 deletions
| diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 00000000..b9034996 --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,77 @@ +from django.core.exceptions import ObjectDoesNotExist +from django.core.urlresolvers import NoReverseMatch + + +class UsingURLPatterns(object): +    """ +    Isolates URL patterns used during testing on the test class itself. +    For example: + +    class MyTestCase(UsingURLPatterns, TestCase): +        urlpatterns = [ +            ... +        ] + +        def test_something(self): +            ... +    """ +    urls = __name__ + +    def setUp(self): +        global urlpatterns +        urlpatterns = self.urlpatterns + +    def tearDown(self): +        global urlpatterns +        urlpatterns = [] + + +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() | 
