From 4a22801da91a742387a86bcfd34d807e363e387d Mon Sep 17 00:00:00 2001 From: Luiz Oliveira Date: Tue, 17 Nov 2015 17:26:16 -0200 Subject: [PATCH] Edited generate_content default behavior Signed-off-by: Luiz Oliveira Signed-off-by: Macartur Sousa --- colab/widgets/templatetags/widgets_tag.py | 4 -- colab/widgets/tests/test_widget_manager.py | 66 ++++++++++++++++++---- colab/widgets/tests/test_widgets.py | 2 + colab/widgets/widget_manager.py | 7 ++- 4 files changed, 63 insertions(+), 16 deletions(-) diff --git a/colab/widgets/templatetags/widgets_tag.py b/colab/widgets/templatetags/widgets_tag.py index a2576bda..9429c154 100644 --- a/colab/widgets/templatetags/widgets_tag.py +++ b/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() @@ -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 "" diff --git a/colab/widgets/tests/test_widget_manager.py b/colab/widgets/tests/test_widget_manager.py index 34a75352..860ebe07 100644 --- a/colab/widgets/tests/test_widget_manager.py +++ b/colab/widgets/tests/test_widget_manager.py @@ -3,34 +3,54 @@ from colab.widgets.widget_manager import WidgetManager, Widget +class WigetMock(Widget): + + def __init__(self, content=""): + self.content = content + + class WidgetManagerTest(TestCase): html_content = "

T

" 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) @@ -38,17 +58,41 @@ def test_remove_widgets_in_key_area(self): 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(), "

T

") + custom_widget.generate_content() + self.assertEqual(custom_widget.get_body(), "

T

") 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(), "") + + def test_get_header_wrong(self): + widget = self.default_widget_instance() + widget.content = " Teste " + self.assertEqual(widget.get_header(), '') - customWidget.generate_content() - self.assertEqual(customWidget.get_header(), "") + def test_get_body_wrong(self): + widget = self.default_widget_instance() + widget.content = " Teste " + 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() diff --git a/colab/widgets/tests/test_widgets.py b/colab/widgets/tests/test_widgets.py index 9f913aa5..01476cb0 100644 --- a/colab/widgets/tests/test_widgets.py +++ b/colab/widgets/tests/test_widgets.py @@ -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()] diff --git a/colab/widgets/widget_manager.py b/colab/widgets/widget_manager.py index 6ccfb38f..c37d1a1d 100644 --- a/colab/widgets/widget_manager.py +++ b/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 @@ -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):