Beispiel #1
0
    def test_calendar_plugin_with_not_existing_ns(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2)
        self.create_base_pages()
        new_config = EventsConfig.objects.create(namespace='new_namespace')
        page = api.create_page('Plugin test en', self.template, 'en',
                               published=True, slug='plugin-test-en')
        api.create_title('de', 'Plugin test de', page)
        ph = page.placeholders.get(slot='content')
        api.add_plugin(ph, 'CalendarPlugin', 'en', app_config=new_config)
        api.add_plugin(ph, 'CalendarPlugin', 'de', app_config=new_config)
        page.publish('en')
        page.publish('de')

        with force_language('en'):
            event = Event.objects.create(
                title='Test event namespace',
                slug='test-event-namespace',
                start_date=tz_datetime(2014, 1, 10),
                publish_at=tz_datetime(2014, 1, 1),
                app_config=new_config
            )
        event.create_translation(
            'de',
            title='Test event namespace de',
            slug='test-event-namespace-de')
        for language in ('en', 'de'):
            page_url = page.get_absolute_url(language)
            response = self.client.get(page_url)
            self.assertEqual(response.status_code, 200)
Beispiel #2
0
    def test_calendar_plugin_with_not_existing_ns(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2)
        self.create_base_pages()
        new_config = EventsConfig.objects.create(namespace='new_namespace')
        page = api.create_page('Plugin test en',
                               self.template,
                               'en',
                               published=True,
                               slug='plugin-test-en')
        api.create_title('de', 'Plugin test de', page)
        ph = page.placeholders.get(slot='content')
        api.add_plugin(ph, 'CalendarPlugin', 'en', app_config=new_config)
        api.add_plugin(ph, 'CalendarPlugin', 'de', app_config=new_config)
        page.publish('en')
        page.publish('de')

        with force_language('en'):
            event = Event.objects.create(title='Test event namespace',
                                         slug='test-event-namespace',
                                         start_date=tz_datetime(2014, 1, 10),
                                         publish_at=tz_datetime(2014, 1, 1),
                                         app_config=new_config)
        event.create_translation('de',
                                 title='Test event namespace de',
                                 slug='test-event-namespace-de')
        for language in ('en', 'de'):
            page_url = page.get_absolute_url(language)
            response = self.client.get(page_url)
            self.assertEqual(response.status_code, 200)
Beispiel #3
0
 def create_obj_with_translation(self, **kwargs):
     data = dict(
         title='Event Foo',
         slug='event-foo',
         start_date=tz_datetime(2014, 1, 1),
         publish_at=tz_datetime(2000, 1, 1),
         de={'title': 'Event Foo DE', 'slug': 'event-foo-de'}
     )
     data.update(kwargs)
     return self.create_event(**data)
Beispiel #4
0
 def create_obj_with_translation(self, **kwargs):
     data = dict(title='Event Foo',
                 slug='event-foo',
                 start_date=tz_datetime(2014, 1, 1),
                 publish_at=tz_datetime(2000, 1, 1),
                 de={
                     'title': 'Event Foo DE',
                     'slug': 'event-foo-de'
                 })
     data.update(kwargs)
     return self.create_event(**data)
Beispiel #5
0
 def create_de_only_event(self, date_start=None, date_end=None):
     if date_start is None:
         date_start = tz_datetime(2014, 1, 1, 9)
     if date_end is None:
         date_end = tz_datetime(2014, 1, 2, 9)
     event_de = self.create_event(de={
         'title': 'German event only',
         'start_date': date_start,
         'end_date': date_end,
         'publish_at': tz_datetime(2014, 1, 1, 9),
     })
     return event_de
Beispiel #6
0
 def create_de_only_event(self, date_start=None, date_end=None):
     if date_start is None:
         date_start = tz_datetime(2014, 1, 1, 9)
     if date_end is None:
         date_end = tz_datetime(2014, 1, 2, 9)
     event_de = self.create_event(
         de={
             'title': 'German event only',
             'start_date': date_start,
             'end_date': date_end,
             'publish_at': tz_datetime(2014, 1, 1, 9),
         })
     return event_de
Beispiel #7
0
    def test_upcoming_events_plugin_languages(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2012, 1, 1)

        def populate_upcoming_events_plugin(plugin):
            self.create_obj_with_translation(
                start_date=tz_datetime(2017, 1, 1),
                publish_at=tz_datetime(2000, 1, 1),
            )
            return plugin

        self._test_plugin_languages(
            plugin_type='UpcomingPlugin',
            populate_func=populate_upcoming_events_plugin)
Beispiel #8
0
    def test_upcoming_events_plugin_languages(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2012, 1, 1)

        def populate_upcoming_events_plugin(plugin):
            self.create_obj_with_translation(
                start_date=tz_datetime(2017, 1, 1),
                publish_at=tz_datetime(2000, 1, 1),
            )
            return plugin

        self._test_plugin_languages(
            plugin_type='UpcomingPlugin',
            populate_func=populate_upcoming_events_plugin)
Beispiel #9
0
    def test_event_list_plugin(self, timezone_mock):
        """
        We add an event to the Event Plugin and look it up
        """
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2, 12)
        # default event start_date='2014-09-10' publish_at='2014-01-01 12:00'
        event1 = self.create_event(
            title='Event2014',
            slug='open-air',
            start_date=tz_datetime(2014, 9, 10),
            publish_at=tz_datetime(2014, 1, 1, 9),
            de={'title': 'Ereignis', 'slug': 'im-freien'}
        )
        event2 = self.create_event(
            title='Event2014 only english',
            start_date=tz_datetime(2014, 1, 29),
            publish_at=tz_datetime(2014, 1, 1, 12)
        )

        root_page = self.create_root_page()
        page = api.create_page(
            'Events en', self.template, 'en', published=True, parent=root_page,
            apphook='EventListAppHook',
            apphook_namespace=self.app_config.namespace,
            publication_date=tz_datetime(2014, 1, 8)
        )
        api.create_title('de', 'Events de', page)
        ph = page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(
            ph, 'EventListCMSPlugin', 'en', app_config=self.app_config,
        )
        plugin_de = api.add_plugin(
            ph, 'EventListCMSPlugin', 'de', app_config=self.app_config,
        )
        plugin_en.events = [event1, event2]
        plugin_en.save()
        plugin_de.events = [event1]
        plugin_de.save()
        page.publish('en')
        page.publish('de')

        # EN: test plugin rendering
        with force_language('en'):
            response = self.client.get(reverse('aldryn_events:events_list'))
            event1.set_current_language('en')
            self.assertContains(response, event1.title)
            self.assertContains(response, event1.get_absolute_url())
            event2.set_current_language('en')
            self.assertContains(response, event2.title)
            self.assertContains(response, event2.get_absolute_url())

        # DE: test plugin rendering
        with force_language('de'):
            response = self.client.get(reverse('aldryn_events:events_list'))
            event1.set_current_language('de')
            self.assertContains(response, event1.title)
            self.assertContains(response, event1.get_absolute_url())
            self.assertContains(response, event2.title)
            self.assertContains(response, event2.get_absolute_url())
Beispiel #10
0
    def test_b_event_list_plugin_with_en_and_de(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2, 12)
        root_page, app_page = self.setup_pages(multilang=True)
        event_de = self.create_de_only_event()

        ph = root_page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(
            ph, 'EventListCMSPlugin', 'en', app_config=self.app_config,
        )
        plugin_en.events = [event_de]
        root_page.publish('en')
        with force_language('en'):
            response = self.client.get(root_page.get_absolute_url())
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, 'German event only')
Beispiel #11
0
    def test_a_event_upcoming_past_plugin_with_en(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2014, 2, 6, 12)
        root_page, app_page = self.setup_pages(multilang=False)
        self.create_de_only_event()

        ph = root_page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(
            ph, 'UpcomingPlugin', 'en', app_config=self.app_config,
        )
        plugin_en.past_events = True
        plugin_en.save()
        root_page.publish('en')
        with force_language('en'):
            response = self.client.get(root_page.get_absolute_url())
            self.assertEqual(response.status_code, 200)
            self.assertNotContains(response, 'German event only')
Beispiel #12
0
    def test_b_event_list_plugin_with_en_and_de(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2, 12)
        root_page, app_page = self.setup_pages(multilang=True)
        event_de = self.create_de_only_event()

        ph = root_page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(
            ph,
            'EventListCMSPlugin',
            'en',
            app_config=self.app_config,
        )
        plugin_en.events = [event_de]
        root_page.publish('en')
        with force_language('en'):
            response = self.client.get(root_page.get_absolute_url())
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, 'German event only')
Beispiel #13
0
 def test_a_calendar_plugin_with_en(self):
     root_page, app_page = self.setup_pages(multilang=False)
     now = datetime.date.today()
     today = tz_datetime(year=now.year, month=now.month, day=now.day)
     tomorrow = today + datetime.timedelta(days=1)
     event_de = self.create_de_only_event(date_start=today,
                                          date_end=tomorrow)
     ph = root_page.placeholders.get(slot='content')
     plugin_en = api.add_plugin(
         ph, 'CalendarPlugin', 'en', app_config=self.app_config,
     )
     plugin_en.save()
     root_page.publish('en')
     with force_language('en'):
         date_view_url = self.get_list_by_day_url(event_de.app_config,
                                                  event_de.start_date)
         response = self.client.get(root_page.get_absolute_url())
         self.assertEqual(response.status_code, 200)
         self.assertNotContains(response, date_view_url)
Beispiel #14
0
    def test_a_event_upcoming_past_plugin_with_en(self, timezone_mock):
        timezone_mock.now.return_value = tz_datetime(2014, 2, 6, 12)
        root_page, app_page = self.setup_pages(multilang=False)
        self.create_de_only_event()

        ph = root_page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(
            ph,
            'UpcomingPlugin',
            'en',
            app_config=self.app_config,
        )
        plugin_en.past_events = True
        plugin_en.save()
        root_page.publish('en')
        with force_language('en'):
            response = self.client.get(root_page.get_absolute_url())
            self.assertEqual(response.status_code, 200)
            self.assertNotContains(response, 'German event only')
Beispiel #15
0
 def test_a_calendar_plugin_with_en(self):
     root_page, app_page = self.setup_pages(multilang=False)
     now = datetime.date.today()
     today = tz_datetime(year=now.year, month=now.month, day=now.day)
     tomorrow = today + datetime.timedelta(days=1)
     event_de = self.create_de_only_event(date_start=today,
                                          date_end=tomorrow)
     ph = root_page.placeholders.get(slot='content')
     plugin_en = api.add_plugin(
         ph,
         'CalendarPlugin',
         'en',
         app_config=self.app_config,
     )
     plugin_en.save()
     root_page.publish('en')
     with force_language('en'):
         date_view_url = self.get_list_by_day_url(event_de.app_config,
                                                  event_de.start_date)
         response = self.client.get(root_page.get_absolute_url())
         self.assertEqual(response.status_code, 200)
         self.assertNotContains(response, date_view_url)
Beispiel #16
0
    def test_event_config_placeholders_are_usable(self):
        # make sure default config is apphooked to a page.
        # FIXME: until migrations are not enabled and ensured to work with
        # tests - this wont test the default adryn_events namespace =(
        # though this test is (or at least it should be) pretty useful.
        default_events_config = EventsConfig.objects.get_or_create(
            namespace='aldryn_events')[0]
        if not is_valid_namespace(default_events_config.namespace):
            page = api.create_page(
                title='default events config en', template=self.template,
                language='en',
                published=True,
                parent=self.root_page,
                apphook='EventListAppHook',
                apphook_namespace=default_events_config.namespace,
                publication_date=tz_datetime(2014, 6, 8)
            )
            api.create_title('de', 'default events config en', page)
            page.publish('en')
            page.publish('de')
            page_with_default_config = page.reload()
            # get some time for aldryn-apphook-reload to perform actions
            with force_language('en'):
                default_config_url = page_with_default_config.get_abolute_url()
            self.client.get(default_config_url)

        configs = EventsConfig.objects.all()
        # this would be used to build unique value for text plugin
        # namespace-lang-placeholder_name, which would be searched on the page.
        plugin_content_raw = '{0}-{1}-{2}'
        plugins_content = {}
        for cfg in configs:
            cfg_placehodlers = [field for field in cfg._meta.fields
                                if field.__class__ == Placeholder]
            placeholders_names = [placeholder.name for placeholder in
                                  cfg_placehodlers]
            # make sure that we have an empty list to store plugins content
            plugins_content[cfg] = []
            for placeholder_name in placeholders_names:
                placeholder_instance = getattr(cfg, placeholder_name, None)
                self.assertNotEqual(type(placeholder_instance), type(None))
                plugin_text = plugin_content_raw.format(
                    cfg.namespace, 'en', placeholder_name)
                api.add_plugin(
                    placeholder_instance, 'TextPlugin', 'en',
                    body=plugin_text)
                # track other namespaces plugin content to check
                # their uniqueness
                plugins_content[cfg].append(plugin_text)

        # test EventsConfig placeholder content if it is attached to a page
        skipped = []
        for cfg in configs:
            if not is_valid_namespace(cfg.namespace):
                skipped.append(cfg)
                continue

            with force_language('en'):
                apphook_url = reverse('{0}:events_list'.format(cfg.namespace))
            response = self.client.get(apphook_url)

            # test own content
            for text in plugins_content[cfg]:
                self.assertIn(response, text)

            # make sure other namespace plugins are not leaked
            other_configs = [config for config in plugins_content.keys()
                             if config is not cfg]
            all_other_namespace_plugins_text = [
                text for other_config in other_configs
                for text in plugins_content[other_config]]
            for other_plugins_text in all_other_namespace_plugins_text:
                self.assertNotIn(response, other_plugins_text)
        # make sure that we tested at least one config
        self.assertNotEqual(configs.count(), len(skipped))
Beispiel #17
0
 def populate_upcoming_events_plugin(plugin):
     self.create_obj_with_translation(
         start_date=tz_datetime(2017, 1, 1),
         publish_at=tz_datetime(2000, 1, 1),
     )
     return plugin
Beispiel #18
0
    def test_upcoming_plugin_for_past(self, timezone_mock):
        """
        Test the upcoming events plugin for past entries
        """
        timezone_mock.now.return_value = tz_datetime(2014, 7, 6, 12)
        evpage = api.create_page(
            title='Events en', template=self.template, language='en',
            published=True,
            apphook='EventListAppHook',
            parent=self.create_root_page(),
            apphook_namespace=self.app_config.namespace,
            publication_date=tz_datetime(2014, 1, 1)
        )
        api.create_title('de', 'Events de', evpage)
        evpage.publish('en')
        evpage.publish('de')
        page = api.create_page(
            'Home en', self.template, 'en', published=True, slug='home',
        )
        api.create_title('de', 'Home de', page)
        ph = page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(ph, 'UpcomingPlugin', 'en',
                                   app_config=self.app_config)
        plugin_de = api.add_plugin(ph, 'UpcomingPlugin', 'de',
                                   app_config=self.app_config)
        plugin_en.past_events, plugin_de.past_events = True, True
        plugin_en.save()
        plugin_de.save()
        page.publish('en')
        page.publish('de')

        for i in range(1, 7):
            self.new_event_from_num(
                i,
                start_date=tz_datetime(2014, 6, 29),
                end_date=tz_datetime(2014, 7, 5),
                publish_at=tz_datetime(2014, 6, 20, 12)
            )
        start_date = tz_datetime(2014, 6, 29)
        start_time = start_date.now().time()
        e0 = Event.objects.filter(start_date=start_date)[0]
        e0.start_time = start_time
        e0.save()
        # Test plugin rendering for both languages in a forloop. I don't
        # like it but save lot of text space since we test for 5 entries
        rendered = {}
        with force_language('en'):
            response = self.client.get(page.get_absolute_url('en'))
            rendered['en'] = response.content.decode('utf-8')
        with force_language('de'):
            response = self.client.get(page.get_absolute_url('de'))
            rendered['de'] = response.content.decode('utf-8')

        for i in range(1, 6):
            for lang in ['en', 'de']:
                text = 'event' if lang == 'en' else 'ereignis'
                name = '{0} {1} {2}'.format(text, i, lang)
                expected_slug = '{0}-{1}-{2}/'.format(text, i, lang)
                apphooh_url = self.get_apphook_url(language=lang)
                url = '{0}{1}'.format(apphooh_url, expected_slug)
                self.assertIn(
                    name, rendered[lang],
                    'Title "{0}" not found in rendered plugin for '
                    'language "{1}".'.format(name, lang)
                )
                self.assertIn(
                    url, rendered[lang],
                    'URL "{0}" not found in rendered plugin for '
                    'language "{1}".'.format(url, lang)
                )

        self.assertNotIn(
            'event 6 en', rendered,
            'Title "event 6 en" found in rendered plugin, but limit is 5 '
            'entries.'
        )
        self.assertNotIn(
            'event-6-en', rendered,
            'URL "event-6-en" found in rendered plugin, but limit is 5 '
            'entries.'
        )
        self.assertNotIn(
            'event 6 de', rendered,
            'Title "event 6 de" found in rendered plugin, but limit is 5 '
            'entries.'
        )
        self.assertNotIn(
            'event-6-de', rendered,
            'URL "event-6-de" found in rendered plugin, but limit is 5 '
            'entries.'
        )
Beispiel #19
0
    def test_calendar_plugin(self, timezone_mock, plugin_timezone_mock):
        """
        This plugin should show a link to event list page on days that has
        events
        """
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2)
        plugin_timezone_mock.now.return_value = tz_datetime(2014, 1, 2)
        self.create_base_pages()
        page = api.create_page('Home en',
                               self.template,
                               'en',
                               published=True,
                               slug='home',
                               publication_date=tz_datetime(2014, 1, 2))

        api.create_title('de', 'Home de', page)
        ph = page.placeholders.get(slot='content')
        plugins = {
            'en':
            api.add_plugin(ph,
                           'CalendarPlugin',
                           'en',
                           app_config=self.app_config),
            'de':
            api.add_plugin(ph,
                           'CalendarPlugin',
                           'de',
                           app_config=self.app_config)
        }
        page.publish('en')
        page.publish('de')

        for i in range(1, 7):
            self.new_event_from_num(i,
                                    start_date=tz_datetime(2014, 1, 29, 12),
                                    end_date=tz_datetime(2014, 2, 5, 12),
                                    publish_at=tz_datetime(2014, 1, 1, 12))

        # add a event for next month to check if date is rendered
        self.new_event_from_num(7,
                                start_date=tz_datetime(2014, 2, 10, 12),
                                end_date=tz_datetime(2014, 2, 15, 1),
                                publish_at=tz_datetime(2014, 1, 1, 12))
        rendered = {}
        apphook_urls = {}
        for language in ('de', 'en'):
            with force_language(language):
                page_url = page.get_absolute_url()
                plugin = plugins[language]
                # prepare apphook urls with respect to language
                namespace = plugin.app_config.namespace
                apphook_urls[language] = self.get_apphook_url(
                    namespace=namespace)
                plugin_url = "{0}?plugin_pk={1}".format(
                    calendar_url(2014, 2, language, namespace), plugin.pk)
                rendered[language] = {
                    'p1': force_text(self.client.get(page_url).content),
                    'p2': force_text(self.client.get(plugin_url).content),
                }

        # expected html patterns
        html_p1 = ('<td class="events"><a href="{0}2014/1/29/">' '29</a></td>')
        html_p2 = ('<td class="events"><a href="{0}2014/2/10/">' '10</a></td>')

        message = ('Expected html `{0}` not found on rendered plugin for '
                   'language "{1}"')

        for language in ('de', 'en'):
            rendered_html_p1 = html_p1.format(apphook_urls[language])
            self.assertIn(rendered_html_p1, rendered[language]['p1'],
                          message.format(rendered_html_p1, language))
            rendered_html_p2 = html_p2.format(apphook_urls[language])
            self.assertIn(rendered_html_p2, rendered[language]['p2'],
                          message.format(rendered_html_p2, language))
Beispiel #20
0
    def test_upcoming_plugin_for_past(self, timezone_mock):
        """
        Test the upcoming events plugin for past entries
        """
        timezone_mock.now.return_value = tz_datetime(2014, 7, 6, 12)
        evpage = api.create_page(title='Events en',
                                 template=self.template,
                                 language='en',
                                 published=True,
                                 apphook='EventListAppHook',
                                 parent=self.create_root_page(),
                                 apphook_namespace=self.app_config.namespace,
                                 publication_date=tz_datetime(2014, 1, 1))
        api.create_title('de', 'Events de', evpage)
        evpage.publish('en')
        evpage.publish('de')
        page = api.create_page(
            'Home en',
            self.template,
            'en',
            published=True,
            slug='home',
        )
        api.create_title('de', 'Home de', page)
        ph = page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(ph,
                                   'UpcomingPlugin',
                                   'en',
                                   app_config=self.app_config)
        plugin_de = api.add_plugin(ph,
                                   'UpcomingPlugin',
                                   'de',
                                   app_config=self.app_config)
        plugin_en.past_events, plugin_de.past_events = True, True
        plugin_en.save()
        plugin_de.save()
        page.publish('en')
        page.publish('de')

        for i in range(1, 7):
            self.new_event_from_num(i,
                                    start_date=tz_datetime(2014, 6, 29),
                                    end_date=tz_datetime(2014, 7, 5),
                                    publish_at=tz_datetime(2014, 6, 20, 12))
        start_date = tz_datetime(2014, 6, 29)
        start_time = start_date.now().time()
        e0 = Event.objects.filter(start_date=start_date)[0]
        e0.start_time = start_time
        e0.save()
        # Test plugin rendering for both languages in a forloop. I don't
        # like it but save lot of text space since we test for 5 entries
        rendered = {}
        with force_language('en'):
            response = self.client.get(page.get_absolute_url('en'))
            rendered['en'] = response.content.decode('utf-8')
        with force_language('de'):
            response = self.client.get(page.get_absolute_url('de'))
            rendered['de'] = response.content.decode('utf-8')

        for i in range(1, 6):
            for lang in ['en', 'de']:
                text = 'event' if lang == 'en' else 'ereignis'
                name = '{0} {1} {2}'.format(text, i, lang)
                expected_slug = '{0}-{1}-{2}/'.format(text, i, lang)
                apphooh_url = self.get_apphook_url(language=lang)
                url = '{0}{1}'.format(apphooh_url, expected_slug)
                self.assertIn(
                    name, rendered[lang],
                    'Title "{0}" not found in rendered plugin for '
                    'language "{1}".'.format(name, lang))
                self.assertIn(
                    url, rendered[lang],
                    'URL "{0}" not found in rendered plugin for '
                    'language "{1}".'.format(url, lang))

        self.assertNotIn(
            'event 6 en', rendered,
            'Title "event 6 en" found in rendered plugin, but limit is 5 '
            'entries.')
        self.assertNotIn(
            'event-6-en', rendered,
            'URL "event-6-en" found in rendered plugin, but limit is 5 '
            'entries.')
        self.assertNotIn(
            'event 6 de', rendered,
            'Title "event 6 de" found in rendered plugin, but limit is 5 '
            'entries.')
        self.assertNotIn(
            'event-6-de', rendered,
            'URL "event-6-de" found in rendered plugin, but limit is 5 '
            'entries.')
Beispiel #21
0
    def test_calendar_plugin(self, timezone_mock, plugin_timezone_mock):
        """
        This plugin should show a link to event list page on days that has
        events
        """
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2)
        plugin_timezone_mock.now.return_value = tz_datetime(2014, 1, 2)
        self.create_base_pages()
        page = api.create_page(
            'Home en', self.template, 'en', published=True, slug='home',
            publication_date=tz_datetime(2014, 1, 2)
        )

        api.create_title('de', 'Home de', page)
        ph = page.placeholders.get(slot='content')
        plugins = {
            'en': api.add_plugin(
                ph, 'CalendarPlugin', 'en', app_config=self.app_config
            ),
            'de': api.add_plugin(
                ph, 'CalendarPlugin', 'de', app_config=self.app_config
            )
        }
        page.publish('en')
        page.publish('de')

        for i in range(1, 7):
            self.new_event_from_num(
                i,
                start_date=tz_datetime(2014, 1, 29, 12),
                end_date=tz_datetime(2014, 2, 5, 12),
                publish_at=tz_datetime(2014, 1, 1, 12)
            )

        # add a event for next month to check if date is rendered
        self.new_event_from_num(
            7,
            start_date=tz_datetime(2014, 2, 10, 12),
            end_date=tz_datetime(2014, 2, 15, 1),
            publish_at=tz_datetime(2014, 1, 1, 12)
        )
        rendered = {}
        apphook_urls = {}
        for language in ('de', 'en'):
            with force_language(language):
                page_url = page.get_absolute_url()
                plugin = plugins[language]
                # prepare apphook urls with respect to language
                namespace = plugin.app_config.namespace
                apphook_urls[language] = self.get_apphook_url(
                    namespace=namespace)
                plugin_url = "{0}?plugin_pk={1}".format(
                    calendar_url(2014, 2, language, namespace), plugin.pk)
                rendered[language] = {
                    'p1': force_text(self.client.get(page_url).content),
                    'p2': force_text(self.client.get(plugin_url).content),
                }

        # expected html patterns
        html_p1 = ('<td class="events"><a href="{0}2014/1/29/">'
                   '29</a></td>')
        html_p2 = ('<td class="events"><a href="{0}2014/2/10/">'
                   '10</a></td>')

        message = ('Expected html `{0}` not found on rendered plugin for '
                   'language "{1}"')

        for language in ('de', 'en'):
            rendered_html_p1 = html_p1.format(apphook_urls[language])
            self.assertIn(
                rendered_html_p1, rendered[language]['p1'],
                message.format(rendered_html_p1, language)
            )
            rendered_html_p2 = html_p2.format(apphook_urls[language])
            self.assertIn(
                rendered_html_p2, rendered[language]['p2'],
                message.format(rendered_html_p2, language)
            )
Beispiel #22
0
 def populate_upcoming_events_plugin(plugin):
     self.create_obj_with_translation(
         start_date=tz_datetime(2017, 1, 1),
         publish_at=tz_datetime(2000, 1, 1),
     )
     return plugin
Beispiel #23
0
    def test_event_config_placeholders_are_usable(self):
        # make sure default config is apphooked to a page.
        # FIXME: until migrations are not enabled and ensured to work with
        # tests - this wont test the default adryn_events namespace =(
        # though this test is (or at least it should be) pretty useful.
        default_events_config = EventsConfig.objects.get_or_create(
            namespace='aldryn_events')[0]
        if not is_valid_namespace(default_events_config.namespace):
            page = api.create_page(
                title='default events config en',
                template=self.template,
                language='en',
                published=True,
                parent=self.root_page,
                apphook='EventListAppHook',
                apphook_namespace=default_events_config.namespace,
                publication_date=tz_datetime(2014, 6, 8))
            api.create_title('de', 'default events config en', page)
            page.publish('en')
            page.publish('de')
            page_with_default_config = page.reload()
            # get some time for aldryn-apphook-reload to perform actions
            with force_language('en'):
                default_config_url = page_with_default_config.get_abolute_url()
            self.client.get(default_config_url)

        configs = EventsConfig.objects.all()
        # this would be used to build unique value for text plugin
        # namespace-lang-placeholder_name, which would be searched on the page.
        plugin_content_raw = '{0}-{1}-{2}'
        plugins_content = {}
        for cfg in configs:
            cfg_placehodlers = [
                field for field in cfg._meta.fields
                if field.__class__ == Placeholder
            ]
            placeholders_names = [
                placeholder.name for placeholder in cfg_placehodlers
            ]
            # make sure that we have an empty list to store plugins content
            plugins_content[cfg] = []
            for placeholder_name in placeholders_names:
                placeholder_instance = getattr(cfg, placeholder_name, None)
                self.assertNotEqual(type(placeholder_instance), type(None))
                plugin_text = plugin_content_raw.format(
                    cfg.namespace, 'en', placeholder_name)
                api.add_plugin(placeholder_instance,
                               'TextPlugin',
                               'en',
                               body=plugin_text)
                # track other namespaces plugin content to check
                # their uniqueness
                plugins_content[cfg].append(plugin_text)

        # test EventsConfig placeholder content if it is attached to a page
        skipped = []
        for cfg in configs:
            if not is_valid_namespace(cfg.namespace):
                skipped.append(cfg)
                continue

            with force_language('en'):
                apphook_url = reverse('{0}:events_list'.format(cfg.namespace))
            response = self.client.get(apphook_url)

            # test own content
            for text in plugins_content[cfg]:
                self.assertIn(response, text)

            # make sure other namespace plugins are not leaked
            other_configs = [
                config for config in plugins_content.keys()
                if config is not cfg
            ]
            all_other_namespace_plugins_text = [
                text for other_config in other_configs
                for text in plugins_content[other_config]
            ]
            for other_plugins_text in all_other_namespace_plugins_text:
                self.assertNotIn(response, other_plugins_text)
        # make sure that we tested at least one config
        self.assertNotEqual(configs.count(), len(skipped))
Beispiel #24
0
    def test_event_list_plugin(self, timezone_mock):
        """
        We add an event to the Event Plugin and look it up
        """
        timezone_mock.now.return_value = tz_datetime(2014, 1, 2, 12)
        # default event start_date='2014-09-10' publish_at='2014-01-01 12:00'
        event1 = self.create_event(title='Event2014',
                                   slug='open-air',
                                   start_date=tz_datetime(2014, 9, 10),
                                   publish_at=tz_datetime(2014, 1, 1, 9),
                                   de={
                                       'title': 'Ereignis',
                                       'slug': 'im-freien'
                                   })
        event2 = self.create_event(title='Event2014 only english',
                                   start_date=tz_datetime(2014, 1, 29),
                                   publish_at=tz_datetime(2014, 1, 1, 12))

        root_page = self.create_root_page()
        page = api.create_page('Events en',
                               self.template,
                               'en',
                               published=True,
                               parent=root_page,
                               apphook='EventListAppHook',
                               apphook_namespace=self.app_config.namespace,
                               publication_date=tz_datetime(2014, 1, 8))
        api.create_title('de', 'Events de', page)
        ph = page.placeholders.get(slot='content')
        plugin_en = api.add_plugin(
            ph,
            'EventListCMSPlugin',
            'en',
            app_config=self.app_config,
        )
        plugin_de = api.add_plugin(
            ph,
            'EventListCMSPlugin',
            'de',
            app_config=self.app_config,
        )
        plugin_en.events = [event1, event2]
        plugin_en.save()
        plugin_de.events = [event1]
        plugin_de.save()
        page.publish('en')
        page.publish('de')

        # EN: test plugin rendering
        with force_language('en'):
            response = self.client.get(reverse('aldryn_events:events_list'))
            event1.set_current_language('en')
            self.assertContains(response, event1.title)
            self.assertContains(response, event1.get_absolute_url())
            event2.set_current_language('en')
            self.assertContains(response, event2.title)
            self.assertContains(response, event2.get_absolute_url())

        # DE: test plugin rendering
        with force_language('de'):
            response = self.client.get(reverse('aldryn_events:events_list'))
            event1.set_current_language('de')
            self.assertContains(response, event1.title)
            self.assertContains(response, event1.get_absolute_url())
            self.assertContains(response, event2.title)
            self.assertContains(response, event2.get_absolute_url())