import logging
from django.core.urlresolvers import reverse, NoReverseMatch
from django.test import TestCase, Client
from boards import urls


logger = logging.getLogger(__name__)

HTTP_CODE_OK = 200

EXCLUDED_VIEWS = {
        'banned',
}


class ViewTest(TestCase):

    def test_all_views(self):
        """
        Try opening all views defined in ulrs.py that don't need additional
        parameters
        """

        client = Client()
        for url in urls.urlpatterns:
            try:
                view_name = url.name
                if view_name in EXCLUDED_VIEWS:
                    logger.debug('View {} is excluded.'.format(view_name))
                    continue

                logger.debug('Testing view %s' % view_name)

                try:
                    response = client.get(reverse(view_name))

                    self.assertEqual(HTTP_CODE_OK, response.status_code,
                            'View not opened: {}'.format(view_name))
                except NoReverseMatch:
                    # This view just needs additional arguments
                    pass
                except Exception as e:
                    self.fail('Got exception %s at %s view' % (e, view_name))
            except AttributeError:
                # This is normal, some views do not have names
                pass