Commit 4a22801da91a742387a86bcfd34d807e363e387d

Authored by Luiz Oliveira
Committed by Macartur Sousa
1 parent da128030

Edited generate_content default behavior

Signed-off-by: Luiz Oliveira <ziuloliveira@gmail.com>
Signed-off-by: Macartur Sousa <macartur.sc@gmail.com>
colab/widgets/templatetags/widgets_tag.py
1 from django import template 1 from django import template
2 from colab.widgets.widget_manager import WidgetManager 2 from colab.widgets.widget_manager import WidgetManager
3 -from django.template import Template  
4 3
5 4
6 register = template.Library() 5 register = template.Library()
@@ -13,7 +12,4 @@ def import_widgets(context, area_id, widget_var=None): @@ -13,7 +12,4 @@ def import_widgets(context, area_id, widget_var=None):
13 12
14 context[widget_var] = WidgetManager.get_widgets(area_id, context=context) 13 context[widget_var] = WidgetManager.get_widgets(area_id, context=context)
15 14
16 - for widget in context[widget_var]:  
17 - widget.content = Template(widget.content).render(context)  
18 -  
19 return "" 15 return ""
colab/widgets/tests/test_widget_manager.py
@@ -3,34 +3,54 @@ from django.test import TestCase @@ -3,34 +3,54 @@ from django.test import TestCase
3 from colab.widgets.widget_manager import WidgetManager, Widget 3 from colab.widgets.widget_manager import WidgetManager, Widget
4 4
5 5
  6 +class WigetMock(Widget):
  7 +
  8 + def __init__(self, content=""):
  9 + self.content = content
  10 +
  11 +
6 class WidgetManagerTest(TestCase): 12 class WidgetManagerTest(TestCase):
7 13
8 html_content = "<head><meta charset='UTF-8'></head><body><p>T</p></body>" 14 html_content = "<head><meta charset='UTF-8'></head><body><p>T</p></body>"
9 widget_area = 'profile' 15 widget_area = 'profile'
10 widget_id = 'widget_id' 16 widget_id = 'widget_id'
11 17
12 - def custom_widget_instance(self, content): 18 + def ovewrited_widget_instance(self, content):
13 19
14 - class CustomWidget(Widget): 20 + class WidgetOverwrited(Widget):
15 identifier = 'widget_id' 21 identifier = 'widget_id'
16 22
17 def generate_content(self, request=None): 23 def generate_content(self, request=None):
18 self.content = content 24 self.content = content
19 - return CustomWidget() 25 + return WidgetOverwrited()
  26 +
  27 + def default_widget_instance(self):
  28 +
  29 + class WidgetDefault(Widget):
  30 + pass
  31 +
  32 + return WidgetDefault()
20 33
21 def setUp(self): 34 def setUp(self):
22 - custom_widget = self.custom_widget_instance(self.html_content) 35 + custom_widget = self.ovewrited_widget_instance(self.html_content)
23 WidgetManager.register_widget(self.widget_area, custom_widget) 36 WidgetManager.register_widget(self.widget_area, custom_widget)
24 37
25 def tearDown(self): 38 def tearDown(self):
26 WidgetManager.unregister_widget(self.widget_area, self.widget_id) 39 WidgetManager.unregister_widget(self.widget_area, self.widget_id)
27 40
  41 + def test_widget_default_values(self):
  42 + widget = self.default_widget_instance()
  43 + self.assertEqual(widget.identifier, None)
  44 + self.assertEqual(widget.name, None)
  45 + self.assertEqual(widget.content, '')
  46 + self.assertEqual(widget.template, '')
  47 +
28 def test_add_widgets_to_key_area(self): 48 def test_add_widgets_to_key_area(self):
29 self.assertEqual(len(WidgetManager.get_widgets(self.widget_area)), 1) 49 self.assertEqual(len(WidgetManager.get_widgets(self.widget_area)), 1)
30 50
31 def test_remove_widgets_in_key_area(self): 51 def test_remove_widgets_in_key_area(self):
32 area = 'admin' 52 area = 'admin'
33 - widget_instance = self.custom_widget_instance(self.html_content) 53 + widget_instance = self.ovewrited_widget_instance(self.html_content)
34 54
35 WidgetManager.register_widget(area, widget_instance) 55 WidgetManager.register_widget(area, widget_instance)
36 WidgetManager.unregister_widget(area, self.widget_id) 56 WidgetManager.unregister_widget(area, self.widget_id)
@@ -38,17 +58,41 @@ class WidgetManagerTest(TestCase): @@ -38,17 +58,41 @@ class WidgetManagerTest(TestCase):
38 self.assertEqual(len(WidgetManager.get_widgets(area)), 0) 58 self.assertEqual(len(WidgetManager.get_widgets(area)), 0)
39 59
40 def test_get_body(self): 60 def test_get_body(self):
41 - customWidget = self.custom_widget_instance(self.html_content) 61 + custom_widget = self.ovewrited_widget_instance(self.html_content)
42 62
43 - customWidget.generate_content()  
44 - self.assertEqual(customWidget.get_body(), "<p>T</p>") 63 + custom_widget.generate_content()
  64 + self.assertEqual(custom_widget.get_body(), "<p>T</p>")
45 65
46 def test_get_header(self): 66 def test_get_header(self):
47 - customWidget = self.custom_widget_instance(self.html_content) 67 + custom_widget = self.ovewrited_widget_instance(self.html_content)
  68 +
  69 + custom_widget.generate_content()
  70 + self.assertEqual(custom_widget.get_header(), "<meta charset='UTF-8'>")
  71 +
  72 + def test_get_header_wrong(self):
  73 + widget = self.default_widget_instance()
  74 + widget.content = "<head> Teste <head>"
  75 + self.assertEqual(widget.get_header(), '')
48 76
49 - customWidget.generate_content()  
50 - self.assertEqual(customWidget.get_header(), "<meta charset='UTF-8'>") 77 + def test_get_body_wrong(self):
  78 + widget = self.default_widget_instance()
  79 + widget.content = "<body> Teste <body>"
  80 + self.assertEqual(widget.get_body(), '')
51 81
52 def test_generate_content(self): 82 def test_generate_content(self):
53 widgets = WidgetManager.get_widgets(self.widget_area) 83 widgets = WidgetManager.get_widgets(self.widget_area)
54 self.assertEqual(widgets[0].content, self.html_content) 84 self.assertEqual(widgets[0].content, self.html_content)
  85 +
  86 + def test_widget_with_invalid_area(self):
  87 + self.assertEqual(WidgetManager.get_widgets("area"), [])
  88 +
  89 + def test_generate_content_without_template(self):
  90 + widget = self.default_widget_instance()
  91 + with self.assertRaises(Exception):
  92 + widget.generate_content()
  93 +
  94 + def test_generate_content_with_template(self):
  95 + widget = self.default_widget_instance()
  96 + widget.template = self.html_content
  97 + with self.assertRaises(Exception):
  98 + widget.generate_content()
colab/widgets/tests/test_widgets.py
@@ -7,11 +7,13 @@ from django.template import Context @@ -7,11 +7,13 @@ from django.template import Context
7 7
8 8
9 class WigetMock(Widget): 9 class WigetMock(Widget):
  10 +
10 def __init__(self, content=""): 11 def __init__(self, content=""):
11 self.content = content 12 self.content = content
12 13
13 14
14 class WidgetsTest(unittest.TestCase): 15 class WidgetsTest(unittest.TestCase):
  16 +
15 @patch.object(WidgetManager, 'get_widgets') 17 @patch.object(WidgetManager, 'get_widgets')
16 def test_import_widgets_tag(self, get_widgets): 18 def test_import_widgets_tag(self, get_widgets):
17 return_list = [WigetMock(), WigetMock(), WigetMock()] 19 return_list = [WigetMock(), WigetMock(), WigetMock()]
colab/widgets/widget_manager.py
1 from django.utils.safestring import mark_safe 1 from django.utils.safestring import mark_safe
  2 +from django.template.loader import render_to_string
2 3
3 4
4 class Widget(object): 5 class Widget(object):
5 identifier = None 6 identifier = None
6 name = None 7 name = None
7 content = '' 8 content = ''
  9 + template = ''
8 10
9 def get_body(self): 11 def get_body(self):
10 # avoiding regex in favor of performance 12 # avoiding regex in favor of performance
@@ -29,7 +31,10 @@ class Widget(object): @@ -29,7 +31,10 @@ class Widget(object):
29 return mark_safe(head) 31 return mark_safe(head)
30 32
31 def generate_content(self, **kwargs): 33 def generate_content(self, **kwargs):
32 - self.content = '' 34 + if not self.template:
  35 + class_name = self.__class__.__name__
  36 + raise Exception("Template not defined in {}.".format(class_name))
  37 + self.content = render_to_string(self.template, kwargs.get('context'))
33 38
34 39
35 class WidgetManager(object): 40 class WidgetManager(object):