示例#1
0
    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)
示例#3
0
    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)
示例#4
0
    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')
示例#5
0
    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))
示例#6
0
    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))
示例#7
0
    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)
示例#8
0
    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)
示例#9
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')
示例#10
0
    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)
示例#11
0
    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')
示例#12
0
    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
示例#13
0
    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)
示例#14
0
    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')
示例#15
0
    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)
示例#16
0
    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()
示例#17
0
    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)
示例#18
0
    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.')
示例#19
0
    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')
示例#20
0
    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')
示例#21
0
    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')