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_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_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_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_zones_list_widgets_empty(self): """Zone widget list should return empty when no widgets registered""" register.zone(TestZoneA) 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'], 0) self.assertEqual(len(response.data['results']), 0)
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_zones_detail(self): """Zone detail should return information for specific zone""" register.zone(TestZoneA) register.zone(TestZoneB) url = reverse('api-zones-detail', 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['id'], TEST_ZONE_A_ID) self.assertEqual(response.data['name'], TEST_ZONE_A_NAME)
def test_zones_detail_not_found(self): """Zone detail should return 404 with invalid zone id""" register.zone(TestZoneA) url = reverse('api-zones-detail', args=[TEST_ZONE_B_ID]) response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual( response.data['detail'], "The zone with id '%s' does not exist" % TEST_ZONE_B_ID)
def test_zones_detail_unauthenticated(self): """Zone detail should return 401 with unauthenticated request""" register.zone(TestZoneA) url = reverse('api-zones-detail', args=[TEST_ZONE_A_ID]) self.client.credentials() response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertEqual(response.data['detail'], 'Authentication credentials were not provided.')
def test_zones_search(self): """Zone search should return list of zones matching search criteria""" register.zone(TestZoneA) register.zone(TestZoneB) url = '%s?q=%s' % (reverse('api-zones-list'), 'Test+Zone+B') response = self.client.get(url, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 1) self.assertEqual(response.data['results'][0]['id'], TEST_ZONE_B_ID)
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_zone_attributes(self): """Validating zone with various missing attributes should result in errors""" try: register.zone(TestZoneNoID) self.fail("%s must contain a valid 'id' attribute" % zone.__name__) except: pass try: register.zone(TestZoneNoName) self.fail("%s must contain a valid 'name' attribute" % zone.__name__) except: pass
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_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_list(self): """Zone list should return list of registered zones""" register.zone(TestZoneA) register.zone(TestZoneB) url = reverse('api-zones-list') 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_ZONE_A_ID) self.assertEqual(response.data['results'][1]['id'], TEST_ZONE_B_ID)
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_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_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_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_empty_zone_render(self): """Zone without widget attached should render empty""" register.zone(TestZone) zone = TestZone() validated_data = {'widget': None, 'data': {}} zone.save(validated_data) template = loader.get_template('widgets/zones.html') result = template.render() html = u'\n\n<div class="zone">\n\n</div>\n' self.assertEqual(result, html)