Skip to content

Commit

Permalink
Edited generate_content default behavior
Browse files Browse the repository at this point in the history
Signed-off-by: Luiz Oliveira <ziuloliveira@gmail.com>
Signed-off-by: Macartur Sousa <macartur.sc@gmail.com>
  • Loading branch information
Ziul authored and macartur committed Dec 3, 2015
1 parent da12803 commit 4a22801
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 16 deletions.
4 changes: 0 additions & 4 deletions colab/widgets/templatetags/widgets_tag.py
@@ -1,6 +1,5 @@
from django import template
from colab.widgets.widget_manager import WidgetManager
from django.template import Template


register = template.Library()
Expand All @@ -13,7 +12,4 @@ def import_widgets(context, area_id, widget_var=None):

context[widget_var] = WidgetManager.get_widgets(area_id, context=context)

for widget in context[widget_var]:
widget.content = Template(widget.content).render(context)

return ""
66 changes: 55 additions & 11 deletions colab/widgets/tests/test_widget_manager.py
Expand Up @@ -3,52 +3,96 @@
from colab.widgets.widget_manager import WidgetManager, Widget


class WigetMock(Widget):

def __init__(self, content=""):
self.content = content


class WidgetManagerTest(TestCase):

html_content = "<head><meta charset='UTF-8'></head><body><p>T</p></body>"
widget_area = 'profile'
widget_id = 'widget_id'

def custom_widget_instance(self, content):
def ovewrited_widget_instance(self, content):

class CustomWidget(Widget):
class WidgetOverwrited(Widget):
identifier = 'widget_id'

def generate_content(self, request=None):
self.content = content
return CustomWidget()
return WidgetOverwrited()

def default_widget_instance(self):

class WidgetDefault(Widget):
pass

return WidgetDefault()

def setUp(self):
custom_widget = self.custom_widget_instance(self.html_content)
custom_widget = self.ovewrited_widget_instance(self.html_content)
WidgetManager.register_widget(self.widget_area, custom_widget)

def tearDown(self):
WidgetManager.unregister_widget(self.widget_area, self.widget_id)

def test_widget_default_values(self):
widget = self.default_widget_instance()
self.assertEqual(widget.identifier, None)
self.assertEqual(widget.name, None)
self.assertEqual(widget.content, '')
self.assertEqual(widget.template, '')

def test_add_widgets_to_key_area(self):
self.assertEqual(len(WidgetManager.get_widgets(self.widget_area)), 1)

def test_remove_widgets_in_key_area(self):
area = 'admin'
widget_instance = self.custom_widget_instance(self.html_content)
widget_instance = self.ovewrited_widget_instance(self.html_content)

WidgetManager.register_widget(area, widget_instance)
WidgetManager.unregister_widget(area, self.widget_id)

self.assertEqual(len(WidgetManager.get_widgets(area)), 0)

def test_get_body(self):
customWidget = self.custom_widget_instance(self.html_content)
custom_widget = self.ovewrited_widget_instance(self.html_content)

customWidget.generate_content()
self.assertEqual(customWidget.get_body(), "<p>T</p>")
custom_widget.generate_content()
self.assertEqual(custom_widget.get_body(), "<p>T</p>")

def test_get_header(self):
customWidget = self.custom_widget_instance(self.html_content)
custom_widget = self.ovewrited_widget_instance(self.html_content)

custom_widget.generate_content()
self.assertEqual(custom_widget.get_header(), "<meta charset='UTF-8'>")

def test_get_header_wrong(self):
widget = self.default_widget_instance()
widget.content = "<head> Teste <head>"
self.assertEqual(widget.get_header(), '')

customWidget.generate_content()
self.assertEqual(customWidget.get_header(), "<meta charset='UTF-8'>")
def test_get_body_wrong(self):
widget = self.default_widget_instance()
widget.content = "<body> Teste <body>"
self.assertEqual(widget.get_body(), '')

def test_generate_content(self):
widgets = WidgetManager.get_widgets(self.widget_area)
self.assertEqual(widgets[0].content, self.html_content)

def test_widget_with_invalid_area(self):
self.assertEqual(WidgetManager.get_widgets("area"), [])

def test_generate_content_without_template(self):
widget = self.default_widget_instance()
with self.assertRaises(Exception):
widget.generate_content()

def test_generate_content_with_template(self):
widget = self.default_widget_instance()
widget.template = self.html_content
with self.assertRaises(Exception):
widget.generate_content()
2 changes: 2 additions & 0 deletions colab/widgets/tests/test_widgets.py
Expand Up @@ -7,11 +7,13 @@


class WigetMock(Widget):

def __init__(self, content=""):
self.content = content


class WidgetsTest(unittest.TestCase):

@patch.object(WidgetManager, 'get_widgets')
def test_import_widgets_tag(self, get_widgets):
return_list = [WigetMock(), WigetMock(), WigetMock()]
Expand Down
7 changes: 6 additions & 1 deletion colab/widgets/widget_manager.py
@@ -1,10 +1,12 @@
from django.utils.safestring import mark_safe
from django.template.loader import render_to_string


class Widget(object):
identifier = None
name = None
content = ''
template = ''

def get_body(self):
# avoiding regex in favor of performance
Expand All @@ -29,7 +31,10 @@ def get_header(self):
return mark_safe(head)

def generate_content(self, **kwargs):
self.content = ''
if not self.template:
class_name = self.__class__.__name__
raise Exception("Template not defined in {}.".format(class_name))
self.content = render_to_string(self.template, kwargs.get('context'))


class WidgetManager(object):
Expand Down

0 comments on commit 4a22801

Please sign in to comment.