/debug_toolbar_htmltidy/tests/tests.py

https://github.com/Narsil/django-dtpanel-htmltidy · Python · 126 lines · 87 code · 34 blank · 5 comment · 7 complexity · 691c070de1e2436b9d953e072ed61e28 MD5 · raw file

  1. from debug_toolbar.toolbar.loader import DebugToolbar
  2. from debug_toolbar_htmltidy.panels import HTMLTidyDebugPanel
  3. from django.conf import settings
  4. from django.test import TestCase
  5. from dingus import Dingus
  6. import os
  7. class Settings(object):
  8. """Allows you to define settings that are required
  9. for this function to work"""
  10. NotDefined = object()
  11. def __init__(self, **overrides):
  12. self.overrides = overrides
  13. self._orig = {}
  14. def __enter__(self):
  15. for k, v in self.overrides.iteritems():
  16. self._orig[k] = getattr(settings, k, self.NotDefined)
  17. setattr(settings, k, v)
  18. def __exit__(self, exc_type, exc_value, traceback):
  19. for k, v in self._orig.iteritems():
  20. if v is self.NotDefined:
  21. delattr(settings, k)
  22. else:
  23. setattr(settings, k, v)
  24. class BaseTestCase(TestCase):
  25. def setUp(self):
  26. settings.DEBUG = True
  27. settings.DEBUG_TOOLBAR_PANELS = self.panels_list
  28. settings.TEMPLATE_DIRS = (
  29. os.path.join(
  30. os.path.dirname(os.path.abspath(__file__)),
  31. 'templates/'),
  32. )
  33. settings.MIDDLEWARE_CLASSES = (
  34. 'django.middleware.common.CommonMiddleware',
  35. 'django.contrib.sessions.middleware.SessionMiddleware',
  36. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  37. )
  38. request = Dingus('request')
  39. toolbar = DebugToolbar(request)
  40. toolbar.load_panels()
  41. self.request = request
  42. self.toolbar = toolbar
  43. def panel(self):
  44. for panel in self.toolbar.panels:
  45. if panel.__class__ == self.panel_class:
  46. return panel
  47. return None
  48. class ViewBasedTestCase(BaseTestCase):
  49. urls = 'debug_toolbar_htmltidy.tests.urls'
  50. panel_class = None
  51. view_url = None
  52. def fetch_view(self):
  53. # basic case
  54. with Settings(DEBUG=True):
  55. resp = self.client.get(self.view_url)
  56. return resp
  57. class HTMLValidationDebugPanelTestCase(ViewBasedTestCase):
  58. urls = 'debug_toolbar_htmltidy.tests.urls'
  59. panel_class = HTMLTidyDebugPanel
  60. panels_list = (
  61. 'debug_toolbar_htmltidy.panels.HTMLTidyDebugPanel',)
  62. view_url = '/'
  63. def panel(self):
  64. panel = super(self.__class__, self).panel()
  65. self.assertEquals(panel.errors_count, 0)
  66. self.assertEquals(panel.warns_count, 0)
  67. return panel
  68. def test_validator_counters(self):
  69. panel = self.panel()
  70. resp = self.fetch_view()
  71. # process response by hand
  72. panel.process_response(self.request, resp)
  73. self.assertEqual(panel.errors_count, 1)
  74. self.assertEqual(panel.warns_count, 6)
  75. def test_apperance_builder(self):
  76. panel = self.panel()
  77. resp = self.fetch_view()
  78. # process response by hand
  79. panel.process_response(self.request, resp)
  80. document, errors = panel.log_data
  81. builded_errors = panel.appearance(errors)
  82. self.assertEqual("".join(builded_errors).count('validation-error'), 2)
  83. self.assertEqual(len(builded_errors), 8)
  84. def test_media(self):
  85. resp = self.fetch_view()
  86. panel = self.panel()
  87. panel.process_response(self.request, resp)
  88. html = panel.content()
  89. self.assertTrue('/__htmltidy_debug__/m/js/htmltidypanel.min.js' \
  90. in html)
  91. self.assertTrue('/__htmltidy_debug__/m/css/htmltidypanel.min.css' \
  92. in html)