'This is a very liberal test, we are mostly just concerned with making sure
that no pages throw errors (500).
Adapted from:
http://stackoverflow.com/questions/14454001/list-all-suburls-and-check-if-broken-in-python#answer-19162337
Test all pattern in root urlconf and included ones.
Do GET requests only.
A pattern is skipped if any of the conditions applies:
- pattern has no name in urlconf
- pattern expects any positinal parameters
- pattern expects keyword parameters that are not specified in @default_kwargs
If response code is not in @allowed_http_codes, fail the test.
if @credentials dict is specified (e.g. username and password),
login before run tests.
If @logout_url is specified, then check if we accidentally logged out
the client while testing, and login again
Specify @default_kwargs to be used for patterns that expect keyword parameters,
e.g. if you specify default_kwargs={\'username\': \'testuser\'}, then
for pattern url(r\'^accounts/(?P<username>[\.\w-]+)/$\'
the url /accounts/testuser/ will be tested.
If @quiet=False, print all the urls checked. If status code of the response is not 200,
print the status code.'

def test_responses(self, allowed_http_codes=None, credentials=None, logout_url='', default_kwargs=None, quiet=False):

    if (not allowed_http_codes):
        allowed_http_codes = [200, 302, 400, 401, 404, 405]
    if (not credentials):
        credentials = {}
    if (not default_kwargs):
        default_kwargs = {}
    url_blacklist = []
    module = importlib.import_module(settings.ROOT_URLCONF)
    if (credentials or self.admin_data):
        credentials = (credentials or self.admin_data)
        self.client.login(**credentials)
    def check_urls(urlpatterns, prefix=''):
        for pattern in urlpatterns:
            if hasattr(pattern, 'url_patterns'):
                new_prefix = prefix
                if pattern.namespace:
                    new_prefix = ((prefix + (':' if prefix else '')) + pattern.namespace)
                check_urls(pattern.url_patterns, prefix=new_prefix)
            params = {}
            skip = False
            regex = pattern.regex
            for url in url_blacklist:
                if regex.match(url):
                    skip = True
            if (regex.groups > 0):
                if ((regex.groups > len(regex.groupindex.keys())) or (set(regex.groupindex.keys()) - set(default_kwargs.keys()))):
                    skip = True
                else:
                    for key in (set(default_kwargs.keys()) & set(regex.groupindex.keys())):
                        params[key] = default_kwargs[key]
            if (hasattr(pattern, 'name') and pattern.name):
                name = pattern.name
            else:
                skip = True
                name = ''
            fullname = (((prefix + ':') + name) if prefix else name)
            if (not skip):
                url = reverse(fullname, kwargs=params)
                print 'testing    url:    {0}'.format(url)
                response = self.client.get(url)
                self.assertIn(response.status_code, allowed_http_codes, '{url}    gave    status    code    {status_code}'.format(url=url, status_code=response.status_code))
                status = ('' if (response.status_code == 200) else (str(response.status_code) + '    '))
                if (not quiet):
                    print (status + url)
                if ((url == logout_url) and credentials):
                    self.client.login(**credentials)
            elif (not quiet):
                print ((('SKIP    ' + regex.pattern) + '    ') + fullname)
    check_urls(module.urlpatterns)
