def test_original_before_save_method(self): """When not redefining before_save, it should just return the data unaffected""" register.zone(TestZone) register.widget(TestWidget) zone = TestZone() widget = TestWidget() validated_data = { 'widget': 'test-widget', 'data': { 'title': 'test title 1', 'description': 'test description' } } zone.save(validated_data) widget.set_data(validated_data['data']) html = u'<div class="widget">\n <img class="title">test title 1</div>\n <div class="description">test description</div>\n \n \n \n</div>\n' data = widget.before_save(widget.prepare_data()) result = widget.render(data) self.assertEqual(data, widget.prepare_data()) self.assertEqual(result, html)
def test_context_method(self): """Context method should add the two events""" register.zone(TestZone) register.widget(TestEventWidget) zone = TestZone() widget = TestEventWidget() DispatchTestHelpers.create_event(self.client, title='event 1', start_time='2017-05-24T12:00', is_published=True) DispatchTestHelpers.create_event(self.client, title='event 2', start_time='2017-05-25T12:00', is_published=True) validated_data = { 'widget': 'test-widget', 'data': { 'title': 'test title 1', 'description': 'test description' } } zone.save(validated_data) widget.set_data(validated_data['data']) html = u'<div class="widget">\n <img class="title">test title 1</div>\n <div class="description">test description</div>\n \n \n \n <div class="events">event 2</div>\n \n <div class="events">event 1</div>\n \n</div>\n' result = widget.render(widget.context(widget.prepare_data())) self.assertEqual(result, html)
def test_zone_render(self): """The test zone should be properly rendered""" register.zone(TestZone) register.widget(TestWidget) zone = TestZone() widget = TestWidget() validated_data = { 'widget': 'test-widget', 'data': { 'title': 'test title 1', 'description': 'test description' } } zone.save(validated_data) template = loader.get_template('widgets/zones.html') result = template.render() html = u'\n\n<div class="zone">\n<div class="widget">\n <img class="title">test title 1</div>\n <div class="description">test description</div>\n \n \n \n</div>\n\n</div>\n' self.assertEqual(result, html)
def test_widget_field_initialization(self): """Should be able to initialize a new WidgetField""" register.widget(TestWidget) # Create article and image for testing article = DispatchTestHelpers.create_article(self.client) image = DispatchTestHelpers.create_image(self.client) testwidget = TestWidget() field_data = { 'id': 'test-widget', 'data': { 'title': 'test title', 'description': 'test description', 'article': article.data['id'], 'image': image.data['id'] } } # a test Widget is now initialized, initilize a widget field to put the test Widget in testfield = WidgetField('Title', [TestWidgetSub]) try: testfield.validate(field_data) except InvalidField: self.fail('Widget should be valid')
def test_widget_field_prepare_data(self): """Prepare_data should return widget""" register.widget(TestWidget) # Create article and image for testing article = DispatchTestHelpers.create_article(self.client) image = DispatchTestHelpers.create_image(self.client) widget = TestWidget() testfield = WidgetField('Title', [TestWidgetSub]) field_data = { 'id': 'test-widget', 'data': { 'title': 'test title', 'description': 'test description', 'article': article.data['id'], 'image': image.data['id'] } } prepared_data = testfield.prepare_data(field_data) self.assertEqual(type(prepared_data), type(widget))
def test_get_widget_from_widget_field(self): """Should be able to validate and get widget from widgetfield""" register.widget(TestWidget) testwidget = TestWidget() testfield = WidgetField('Title', [TestWidgetSub]) # Create article and image for testing article = DispatchTestHelpers.create_article(self.client) image = DispatchTestHelpers.create_image(self.client) field_data = { 'id': testwidget.id, 'data': { 'title': 'test title', 'description': 'test description', 'article': article.data['id'], 'image': image.data['id'] } } widget = testfield.get_widget(field_data['id']) self.assertEqual(type(widget), type(testwidget))
def test_zone_render_invalid_kwargs(self): """The test zone/widget should ignore kwargs that aren't in the accepted list""" register.zone(TestZone) register.widget(TestWidget) zone = TestZone() widget = TestWidget() validated_data = { 'widget': 'test-widget', 'data': { 'title': 'test title 1', 'description': 'test description' } } zone.save(validated_data) template = loader.get_template('widgets/test-widget-kwargs.html') # in this case, data isn't in the list of accepted keywords, # if it was, or the verification failed, then it would be overriden # by the value provided in this context result = template.render({'data': {'title': 'some invalid data'}}) html = u'\n\n<div class="zone">\n<div class="widget">\n <img class="title">test title 1</div>\n <div class="description">test description</div>\n \n \n \n</div>\n\n</div>\n' self.assertEqual(result, html)
def test_zone_render_kwargs(self): """The test zone should be properly rendered when provided valid kwargs""" register.zone(TestZone) register.widget(TestWidget) zone = TestZone() widget = TestWidget() validated_data = { 'widget': 'test-widget', 'data': { 'title': 'test title 1', 'description': 'test description' } } zone.save(validated_data) template = loader.get_template('widgets/test-widget-kwargs.html') result = template.render( {'extra': mark_safe('<div class="testing">testing</div>')}) html = u'\n\n<div class="zone">\n<div class="widget">\n <img class="title">test title 1</div>\n <div class="description">test description</div>\n \n \n <div class="testing">testing</div>\n</div>\n\n</div>\n' self.assertEqual(result, html)
def test_widgets_validate_data(self): """Should be able to valiate your data""" register.zone(TestZoneA) register.widget(TestWidgetA) url = reverse('api-zones-detail', args=[TEST_ZONE_A_ID]) data = {'widget': TEST_WIDGET_A_ID, 'data': {'title': 'Test A'}} response = self.client.patch(url, data, format='json') self.assertEqual(response.data['data']['title'], 'Test A')
def test_get_widget_json_no_widget(self): """Test the case where None widget is passed to 'get_widget_json' """ register.widget(TestWidget) testwidget = TestWidget() testfield = WidgetField('Title', [TestWidgetSub]) field_data = {'id': None} widget = testfield.get_widget_json(field_data) self.assertEqual(widget, None)
def test_zones_update_widget_before_save(self): """Test before_save method on widget""" register.zone(TestZoneA) register.widget(TestWidgetC) url = reverse('api-zones-detail', args=[TEST_ZONE_A_ID]) data = {'widget': TEST_WIDGET_C_ID, 'data': {'title': 'Test C'}} response = self.client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['data']['title'], 'Test C TEST')
def test_validate_missing_widget_attributes(self): """Validating widgets with various missing attributes should result in errors""" try: register.widget(TestWidgetNoID) self.fail("%s must contain a valid 'id' attribute" % widget.__name__) except InvalidWidget: pass try: register.widget(TestWidgetNoName) self.fail("%s must contain a valid 'name' attribute" % widget.__name__) except InvalidWidget: pass try: register.widget(TestWidgetNoTemplate) self.fail("%s must contain a valid 'template' attribute" % widget.__name__) except InvalidWidget: pass try: register.widget(TestWidgetNoZone) self.fail("%s must contain a valid 'Zone' attribute" % widget.__name__) except InvalidWidget: pass
def test_get_widget_from_widget_field_no_id(self): """Test the case where None id is passed to 'get_widget' """ register.widget(TestWidget) testwidget = TestWidget() testfield = WidgetField('Title', [TestWidgetSub]) field_data = {'id': None} widget = testfield.get_widget(field_data['id']) self.assertEqual(widget, None)
def test_widgets_invalid_data(self): """Invalid data should raise an error""" register.zone(TestZoneA) register.widget(TestWidgetA) url = reverse('api-zones-detail', args=[TEST_ZONE_A_ID]) data = {'widget': TEST_WIDGET_A_ID, 'data': {'title': 0}} response = self.client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(response.data['title'][0], 'Title data must be a string')
def test_zones_list_widgets(self): """Should be able to return list of widgets registered with zone""" register.zone(TestZoneA) register.widget(TestWidgetA) register.widget(TestWidgetB) url = reverse('api-zones-widgets', args=[TEST_ZONE_A_ID]) response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 2) self.assertEqual(response.data['results'][0]['id'], TEST_WIDGET_A_ID) self.assertEqual(response.data['results'][1]['id'], TEST_WIDGET_B_ID)
def test_zones_update_not_found(self): """Zone update should return 404 with invalid zone id""" register.zone(TestZoneA) register.widget(TestWidgetA) url = reverse('api-zones-detail', args=[TEST_ZONE_B_ID]) data = {'id': TEST_WIDGET_A_ID, 'widget': {'title': 'Test title'}} response = self.client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) register.clear()
def test_zones_update_set_invalid_widget(self): """Should not be able to set non-existent widget""" register.zone(TestZoneA) register.widget(TestWidgetA) url = reverse('api-zones-detail', args=[TEST_ZONE_A_ID]) data = {'widget': TEST_WIDGET_B_ID, 'data': {}} response = self.client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual( response.data['widget'][0], "Widget with id '%s' does not exist" % TEST_WIDGET_B_ID)
def test_zones_update_unauthenticated(self): """Zone update should fail with unauthenticated request""" register.zone(TestZoneA) register.widget(TestWidgetA) url = reverse('api-zones-detail', args=[TEST_ZONE_A_ID]) data = {'widget': TEST_WIDGET_A_ID, 'data': {'title': 'Test title'}} self.client.credentials() response = self.client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertEqual(response.data['detail'], 'Authentication credentials were not provided.')
def test_zones_update_set_widget(self): """Should be able to set widget on empty zone""" register.zone(TestZoneA) register.widget(TestWidgetA) url = reverse('api-zones-detail', args=[TEST_ZONE_A_ID]) data = {'widget': TEST_WIDGET_A_ID, 'data': {'title': 'Test title'}} response = self.client.patch(url, data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['id'], TEST_ZONE_A_ID) self.assertEqual(response.data['widget']['id'], TEST_WIDGET_A_ID) self.assertEqual(response.data['data']['title'], 'Test title')
def test_widget_field_to_json(self): """Should be able to get to_json from field""" register.widget(TestWidget) # Create article and image for testing article = DispatchTestHelpers.create_article(self.client) image = DispatchTestHelpers.create_image(self.client) testfield = WidgetField('Title', [TestWidgetSub]) field_data = { 'id': 'test-widget', 'data': { 'title': 'test title', 'description': 'test description', 'article': article.data['id'], 'image': image.data['id'] } } json = testfield.to_json(field_data) self.assertEqual(json['id'], 'test-widget')
def test_get_all_widgets(self): """Get all the widgets associated with a field""" register.widget(TestWidget) register.widget(TestWidget2) register.widget(TestWidget3) # Create article and image for testing article = DispatchTestHelpers.create_article(self.client) image = DispatchTestHelpers.create_image(self.client) widget1 = TestWidget() widget2 = TestWidget2() widget3 = TestWidget3() testfield = WidgetField('Title', [TestWidgetSub]) field_data = { 'id': 'test-widget', 'data': { 'title': 'test title', 'description': 'test description', 'article': article.data['id'], 'image': image.data['id'], 'widget': { 'id': 'test-widget-2', 'data': { 'title': 'test title', 'description': 'test description', 'article': article.data['id'], 'image': image.data['id'], 'widget': { 'id': 'test-widget-3', 'data': { 'title': 'Test widget 3' } } } } } } json = testfield.to_json(field_data) prepared_data = testfield.prepare_data(field_data).data self.assertEqual(json['id'], 'test-widget') self.assertEqual(json['data']['widget']['id'], 'test-widget-2') self.assertEqual(json['data']['widget']['data']['widget']['id'], 'test-widget-3') self.assertEqual(prepared_data['widget']['id'], 'test-widget-2') self.assertEqual(prepared_data['widget']['data']['widget']['id'], 'test-widget-3')