コード例 #1
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pagecontenttypefilter_queryset(self):
        # Ensures that the queryset returned by filtering is correct.
        request = self._build_request()

        # Add some pages with different content types.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContent)
            content_type_2 = ContentType.objects.get_for_model(PageContentWithFields)

            self._make_page('Food', content_type)
            self._make_page('Barred', content_type)
            self._make_page('Bazooka', content_type_2)

        # Test with no filters. Should be the same as Page.objects.all().
        filterer = PageContentTypeFilter(request, {}, Page, self.page_admin)
        queryset = filterer.queryset(request, Page.objects.all())
        self.assertEqual(queryset.count(), Page.objects.all().count())

        # Test with a content type filter. It should return a subset of the
        # pages.
        content_type_id = ContentType.objects.get_for_model(PageContent).id
        parameters = {'page_type': content_type_id}
        filterer = PageContentTypeFilter(request, parameters, Page, self.page_admin)
        queryset = filterer.queryset(request, Page.objects.all())
        self.assertEqual(
            queryset.count(),
            Page.objects.filter(
                content_type_id=content_type_id
            ).count()
        )
        # The above will not be sufficient - we need to ensure that it is not
        # the same as the unfiltered queryset, not merely that the filtered
        # length is correct.
        self.assertNotEqual(queryset.count(), Page.objects.all().count())
コード例 #2
0
    def setUp(self):
        self.site = AdminSite()
        self.article_admin = ArticleAdmin(Article, self.site)

        self.factory = RequestFactory()
        self.request = self.factory.get('/')

        with search.update_index():
            self.date = now()
            self.date_str = '/{}/{}/{}'.format(
                self.date.strftime('%Y'),
                self.date.strftime('%b').lower(),
                self.date.strftime('%d').lstrip('0'),
            )

            content_type = ContentType.objects.get_for_model(NewsFeed)

            self.page = Page.objects.create(
                title='News Feed',
                slug='news',
                content_type=content_type,
            )

            self.feed = NewsFeed.objects.create(page=self.page, )

            self.category = Category.objects.create(slug='foo')

            self.article = Article.objects.create(
                news_feed=self.feed,
                title='Foo',
                slug='foo',
                date=self.date,
            )
コード例 #3
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def test_page_get_absolute_url(self):
        with search.update_index():
            Page.objects.all().delete()

            content_type = ContentType.objects.get_for_model(TestPageContent)

            new_page = Page(
                content_type=content_type,
                parent=None,
                left=None,
                right=None,
            )
            self.assertIsNone(new_page.cached_url)
            new_page.save()
            self.assertEqual(new_page.cached_url, '/')

            TestPageContent.objects.create(
                page=new_page,
            )

        self.assertEqual(new_page.get_absolute_url(), '/')
        self.assertEqual(new_page.get_absolute_url(True), '/')

        new_page = Page.objects.get(pk=new_page.pk)
        self.assertEqual(new_page.cached_url, '/')
        self.assertEqual(new_page.get_absolute_url(), '/')
コード例 #4
0
    def test_pagecontenttypefilter_queryset(self):
        # Ensures that the queryset returned by filtering is correct.
        request = self._build_request()

        # Add some pages with different content types.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)
            content_type_2 = ContentType.objects.get_for_model(
                TestPageContentWithFields)

            self._make_page('Food', content_type)
            self._make_page('Barred', content_type)
            self._make_page('Bazooka', content_type_2)

        # Test with no filters. Should be the same as Page.objects.all().
        filterer = PageContentTypeFilter(request, {}, Page, self.page_admin)
        queryset = filterer.queryset(request, Page.objects.all())
        self.assertEqual(queryset.count(), Page.objects.all().count())

        # Test with a content type filter. It should return a subset of the
        # pages.
        content_type_id = ContentType.objects.get_for_model(TestPageContent).id
        parameters = {'page_type': content_type_id}
        filterer = PageContentTypeFilter(request, parameters, Page,
                                         self.page_admin)
        queryset = filterer.queryset(request, Page.objects.all())
        self.assertEqual(
            queryset.count(),
            Page.objects.filter(content_type_id=content_type_id).count())
        # The above will not be sufficient - we need to ensure that it is not
        # the same as the unfiltered queryset, not merely that the filtered
        # length is correct.
        self.assertNotEqual(queryset.count(), Page.objects.all().count())
コード例 #5
0
    def test_publicationmiddleware_preview(self):
        with search.update_index():
            page_obj = Page.objects.create(
                title='Foo',
                content_type=ContentType.objects.get_for_model(TestContentBase),
                is_online=False,
            )

            content_obj = TestContentBase.objects.create(page=page_obj)

        middleware = [
            'django.contrib.sessions.middleware.SessionMiddleware',
            'django.contrib.auth.middleware.AuthenticationMiddleware',
            'cms.middleware.PublicationMiddleware',
            'cms.apps.pages.middleware.PageMiddleware',
        ]

        with self.settings(MIDDLEWARE=middleware):
            request = self.client.get(page_obj.get_absolute_url())
            self.assertEqual(request.status_code, 404)

            # Ensure preview mode (without a valid token) fails for
            # non-authenticated users.
            request = self.client.get(page_obj.get_absolute_url() + '?preview=1')
            self.assertEqual(request.status_code, 404)

            request = self.client.get(page_obj.get_preview_url())
            self.assertEqual(request.status_code, 200)
コード例 #6
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pageadmin_sitemap_json_view(self):
        request = self._build_request()
        response = self.page_admin.sitemap_json_view(request)

        sitemap = '{"createHomepageUrl": "/admin/pages/page/add/?from=sitemap", "addUrl": "/admin/pages/page/add/?from=sitemap&parent=__id__", "canAdd": true, "changeUrl": "/admin/pages/page/__id__/change/?from=sitemap", "entries": [{"isOnline": true, "canDelete": true, "title": "Homepage", "canChange": true, "id": ' + str(self.homepage.pk) + ', "children": []}], "deleteUrl": "/admin/pages/page/__id__/delete/?from=sitemap", "moveUrl": "/admin/pages/page/move-page/"}'

        self.assertDictEqual(json.loads(response.content.decode()), json.loads(sitemap))
        self.assertEqual(response['Content-Type'], "application/json; charset=utf-8")

        # Add a child page.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContentWithFields)

            self.content_page = Page.objects.create(
                title="Content page",
                slug='content_page',
                parent=self.homepage,
                content_type=content_type,
            )

            PageContentWithFields.objects.create(
                page=self.content_page,
            )

        request.pages.homepage = Page.objects.get(slug='homepage')
        response = self.page_admin.sitemap_json_view(request)
        sitemap = '{"createHomepageUrl": "/admin/pages/page/add/?from=sitemap", "addUrl": "/admin/pages/page/add/?from=sitemap&parent=__id__", "canAdd": true, "changeUrl": "/admin/pages/page/__id__/change/?from=sitemap", "entries": [{"isOnline": true, "canDelete": true, "title": "Homepage", "canChange": true, "id": ' + str(self.homepage.pk) + ', "children": [{"isOnline": true, "canDelete": true, "title": "Content page", "canChange": true, "id": ' + str(self.content_page.pk) + ', "children": []}]}], "deleteUrl": "/admin/pages/page/__id__/delete/?from=sitemap", "moveUrl": "/admin/pages/page/move-page/"}'
        self.assertDictEqual(json.loads(response.content.decode()), json.loads(sitemap))
        self.assertEqual(response['Content-Type'], "application/json; charset=utf-8")

        request.pages.homepage = None
        response = self.page_admin.sitemap_json_view(request)
        sitemap = '{"createHomepageUrl": "/admin/pages/page/add/?from=sitemap", "addUrl": "/admin/pages/page/add/?from=sitemap&parent=__id__", "canAdd": true, "changeUrl": "/admin/pages/page/__id__/change/?from=sitemap", "entries": [], "deleteUrl": "/admin/pages/page/__id__/delete/?from=sitemap", "moveUrl": "/admin/pages/page/move-page/"}'
        self.assertDictEqual(json.loads(response.content.decode()), json.loads(sitemap))
        self.assertEqual(response['Content-Type'], "application/json; charset=utf-8")
コード例 #7
0
    def test_get_related_objects_admin_urls_from_model_inline_with_image(self):
        with search.update_index():
            self.test_page_model = Page.objects.create(
                title='Test page',
                content_type=ContentType.objects.get_for_model(
                    TestContentBase),
            )

            self.test_content_base = TestContentBase.objects.create(
                page=self.test_page_model, )

        test_model_1a_inline = TestModelOneInline.objects.create(
            parent=self.test_model_1a, image=self.test_file)

        self.clear_image_references(
            [self.test_model_1a, self.test_model_1b, self.test_model_2a])

        expected_outcome = [
            {
                'title':
                str(test_model_1a_inline),
                'model_name':
                test_model_1a_inline._meta.verbose_name,
                'admin_url':
                reverse(
                    f'admin:{self.test_model_1a._meta.app_label}_{self.test_model_1a._meta.model_name}_change',
                    args=[self.test_model_1a.pk]),
            },
        ]

        self.assertEqual(get_related_objects_admin_urls(self.test_file),
                         expected_outcome)
コード例 #8
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def setUp(self):
        structure = {
            'title':
            'Homepage',
            'children': [{
                'title':
                'Tree 1 - Page 1',
                'children': [{
                    'title': 'Tree 1 - Page 2'
                }, {
                    'title': 'Tree 1 - Page 3'
                }]
            }, {
                'title': 'Tree 2 - Page 1'
            }, {
                'title':
                'Tree 3 - Page 1',
                'children': [{
                    'title':
                    'Tree 3 - Page 2',
                    'children': [{
                        'title': 'Tree 3 - Page 4'
                    }, {
                        'title': 'Tree 3 - Page 5'
                    }]
                }, {
                    'title': 'Tree 3 - Page 3'
                }]
            }]
        }

        content_type = ContentType.objects.get_for_model(TestPageContent)
        self.page_ids = {}
        self.pages = {}

        def _add_page(page, parent=None):
            slug = page['title'].replace(' ', '_').replace('-', '_')

            page_obj = Page.objects.create(
                title=page['title'],
                slug=slug,
                content_type=content_type,
                parent=parent,
            )

            TestPageContent.objects.create(page=page_obj, )

            self.page_ids[slug] = page_obj.pk

            if page.get('children', None):
                for child in page['children']:
                    _add_page(child, page_obj)

        with search.update_index():
            _add_page(structure)
            self._rebuild_page_dict()
コード例 #9
0
 def testNestedUpdateInSkipContext(self):
     with watson.skip_index_update():
         self.test21.title = "baar"
         self.test21.save()
         with watson.update_index():
             self.test11.title = "fooo"
             self.test11.save()
     # We should get "fooo", but not "baar"
     self.assertEqual(watson.search("fooo").count(), 1)
     self.assertEqual(watson.search("baar").count(), 0)
コード例 #10
0
ファイル: tests.py プロジェクト: dzbrozek/django-watson
 def testNestedUpdateInSkipContext(self):
     with watson.skip_index_update():
         self.test21.title = "baar"
         self.test21.save()
         with watson.update_index():
             self.test11.title = "fooo"
             self.test11.save()
     # We should get "fooo", but not "baar"
     self.assertEqual(watson.search("fooo").count(), 1)
     self.assertEqual(watson.search("baar").count(), 0)
コード例 #11
0
 def testSearchIndexUpdateAbandonedOnError(self):
     try:
         with watson.update_index():
             self.test11.title = "fooo"
             self.test11.save()
             raise Exception("Foo")
     except:
         pass
     # Test a search that should get not model.
     self.assertEqual(watson.search("fooo").count(), 0)
コード例 #12
0
    def _create(cls, model_class, *args, **kwargs):
        with search.update_index():
            email = super(FullEmailFactory, cls)._create(model_class, *args, **kwargs)
            body = BodyFactory(data="This mail body is searchable")
            part = PartListFactory(body=body)
            HeaderFactory(part=part, name="From")
            HeaderFactory(part=part, name="Subject")
            HeaderFactory(part=part, name="Content-Type", data="text/plain; charset=\"ascii\"")

        return email
コード例 #13
0
ファイル: tests.py プロジェクト: dzbrozek/django-watson
 def testSearchIndexUpdateAbandonedOnError(self):
     try:
         with watson.update_index():
             self.test11.title = "fooo"
             self.test11.save()
             raise Exception("Foo")
     except:
         pass
     # Test a search that should get not model.
     self.assertEqual(watson.search("fooo").count(), 0)
コード例 #14
0
ファイル: factories.py プロジェクト: stephenjudge/Inboxen
    def _create(cls, model_class, *args, **kwargs):
        with search.update_index():
            email = super(FullEmailFactory, cls)._create(model_class, *args, **kwargs)
            body = BodyFactory(data="This mail body is searchable")
            part = PartListFactory(email=email, body=body)
            HeaderFactory(part=part, name="From")
            HeaderFactory(part=part, name="Subject")
            HeaderFactory(part=part, name="Content-Type", data="text/plain; charset=\"ascii\"")

        return email
コード例 #15
0
    def setUp(self):
        self.factory = RequestFactory()
        self.request = self.factory.get('/')

        File.objects.all().delete()

        # A valid GIF.
        self.name_1 = '{}-{}.gif'.format(now().strftime('%Y-%m-%d_%H-%M-%S'),
                                         random.randint(0, six.MAXSIZE))

        base64_string = b'R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='
        self.obj_1 = File.objects.create(title="Foo",
                                         file=SimpleUploadedFile(
                                             self.name_1,
                                             base64.b64decode(base64_string),
                                             content_type="image/gif"))

        with search.update_index():
            content_type = ContentType.objects.get_for_model(
                TestTemplatetagPage)

            self.homepage = Page.objects.create(
                title="Homepage",
                slug='homepage',
                content_type=content_type,
            )

            TestTemplatetagPage.objects.create(page=self.homepage, )

            self.section = Page.objects.create(parent=self.homepage,
                                               title="Section",
                                               slug='section',
                                               content_type=content_type,
                                               hide_from_anonymous=True)

            TestTemplatetagPage.objects.create(page=self.section, )

            self.subsection = Page.objects.create(
                parent=self.section,
                title="Subsection",
                slug='subsection',
                content_type=content_type,
            )

            TestTemplatetagPage.objects.create(page=self.subsection, )

            self.subsubsection = Page.objects.create(
                parent=self.subsection,
                title="Subsubsection",
                slug='subsubsection',
                content_type=content_type,
            )

            TestTemplatetagPage.objects.create(page=self.subsubsection, )
コード例 #16
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def setUp(self):
        with search.update_index():
            content_type = ContentType.objects.get_for_model(
                TestPageContentWithSections)

            self.homepage = Page.objects.create(
                title='Homepage',
                slug='homepage',
                content_type=content_type,
            )

            TestPageContentWithSections.objects.create(page=self.homepage, )
コード例 #17
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def setUp(self):
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContentWithSections)

            self.homepage = Page.objects.create(
                title="Homepage",
                slug='homepage',
                content_type=content_type,
            )

            TestPageContentWithSections.objects.create(
                page=self.homepage,
            )
コード例 #18
0
    def duplicate_for_country_group(request, *args, **kwargs):
        # Get the current page
        original_page = get_object_or_404(Page, pk=kwargs.get('page', None))
        original_content = original_page.content

        if request.method == 'POST':

            with update_index():
                page = deepcopy(original_page)
                page.pk = None
                page.is_content_object = True
                page.owner = original_page
                page.country_group = CountryGroup.objects.get(
                    pk=request.POST.get('country_group'))
                page.save()

                content = deepcopy(original_content)
                content.pk = None
                content.page = page
                content.save()

                for link in dir(original_page):
                    if link.endswith('_set') and getattr(
                            original_page, link
                    ).__class__.__name__ == 'RelatedManager' and link not in [
                            'child_set', 'owner_set', 'link_to_page'
                    ]:
                        objects = getattr(original_page, link).all()
                        for page_object in objects:
                            new_object = deepcopy(page_object)
                            new_object.pk = None
                            new_object.page = page
                            new_object.save()

            return redirect('/admin/pages/page/{}'.format(page.pk))

        country_groups = CountryGroup.objects.all()

        if not country_groups:
            messages.add_message(
                request, messages.ERROR,
                'You need to add at least one country group first before you can add a copy of this page'
            )
            return redirect('/admin/pages/page/{}'.format(original_page.pk))

        context = dict(original_page=original_page,
                       country_groups=country_groups)

        return TemplateResponse(request,
                                'admin/pages/page/language_duplicate.html',
                                context)
コード例 #19
0
    def setUp(self):
        self.site = AdminSite()
        self.page_admin = PageAdmin(Page, self.site)

        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)

            self.homepage = Page.objects.create(
                title="Homepage",
                slug='homepage',
                content_type=content_type,
            )

            TestPageContent.objects.create(page=self.homepage, )
コード例 #20
0
ファイル: utils.py プロジェクト: onespacemedia/cms
def duplicate_object(original_object, changes=None):
    with update_index():
        copied_object = deepcopy(original_object)
        copied_object.pk = None

        if callable(changes):
            copied_object = changes(copied_object, original_object)

        AdminClass = admin.site._registry[original_object.__class__]

        for content_cls, admin_cls in AdminClass.inlines:
            pass

        copied_object.save()
コード例 #21
0
ファイル: test_views.py プロジェクト: onespacemedia/cms-faqs
    def setUp(self):
        # Note: as this is the only page in the database, it's absolute URL
        # will simply be '/'

        with search.update_index():
            content_type = ContentType.objects.get_for_model(Faqs)
            self.page = Page.objects.create(
                content_type=content_type,
                title='Foo',
                slug='foo',
            )

            self.faq_page = Faqs.objects.create(
                page=self.page,
            )
コード例 #22
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def test_page_save__create_with_sides(self):
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)

            # Create a page with a manual left and right defined.
            page_obj = Page.objects.create(
                title='Foo',
                content_type=content_type,
                parent=self.pages['Tree_1___Page_1'],
                left=7,
                right=8,
            )

            TestPageContent.objects.create(page=page_obj, )

            self.assertEqual(page_obj.title, 'Foo')
コード例 #23
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def setUp(self):
        self.site = AdminSite()
        self.page_admin = PageAdmin(Page, self.site)

        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContent)

            self.homepage = Page.objects.create(
                title="Homepage",
                slug='homepage',
                content_type=content_type,
            )

            PageContent.objects.create(
                page=self.homepage,
            )
コード例 #24
0
ファイル: test_middleware.py プロジェクト: onespacemedia/cms
    def test_alternate_page_version(self):
        _generate_pages(self)

        # Create a country group.
        group = CountryGroup.objects.create(
            name='Foo',
        )

        group2 = CountryGroup.objects.create(
            name='Bar',
        )

        # Create a country.
        Country.objects.create(
            code='GB',
            group=group,
        )

        country2 = Country.objects.create(
            code='FR',
            group=group2,
            default=False,
        )

        # Create an alternate version of the page with the country.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestMiddlewarePage)

            alternate_page = Page.objects.create(
                is_content_object=True,
                owner=self.homepage,
                country_group=group2,
                left=self.homepage.left,
                right=self.homepage.right,
                content_type=content_type,
            )

            TestMiddlewarePage.objects.create(
                page=alternate_page,
            )

        self.request = self.factory.get('/')
        self.request.country = country2
        self.page_manager = RequestPageManager(self.request)
        alternate_check = self.page_manager.alternate_page_version(self.homepage)

        self.assertEqual(alternate_check, alternate_page)
コード例 #25
0
    def test_pageadmin_sitemap_json_view(self):
        request = self._build_request()
        response = self.page_admin.sitemap_json_view(request)

        sitemap = '{"createHomepageUrl": "/admin/pages/page/add/?from=sitemap", "addUrl": "/admin/pages/page/add/?from=sitemap&parent=__id__", "canAdd": true, "changeUrl": "/admin/pages/page/__id__/change/?from=sitemap", "entries": [{"isOnline": true, "canDelete": true, "title": "Homepage", "canChange": true, "id": ' + str(
            self.homepage.pk
        ) + ', "children": []}], "deleteUrl": "/admin/pages/page/__id__/delete/?from=sitemap", "moveUrl": "/admin/pages/page/move-page/"}'

        self.assertDictEqual(json.loads(response.content.decode()),
                             json.loads(sitemap))
        self.assertEqual(response['Content-Type'],
                         "application/json; charset=utf-8")

        # Add a child page.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(
                TestPageContentWithFields)

            self.content_page = Page.objects.create(
                title="Content page",
                slug='content_page',
                parent=self.homepage,
                content_type=content_type,
            )

            TestPageContentWithFields.objects.create(page=self.content_page, )

        request.pages.homepage = Page.objects.get(slug='homepage')
        response = self.page_admin.sitemap_json_view(request)
        sitemap = '{"createHomepageUrl": "/admin/pages/page/add/?from=sitemap", "addUrl": "/admin/pages/page/add/?from=sitemap&parent=__id__", "canAdd": true, "changeUrl": "/admin/pages/page/__id__/change/?from=sitemap", "entries": [{"isOnline": true, "canDelete": true, "title": "Homepage", "canChange": true, "id": ' + str(
            self.homepage.pk
        ) + ', "children": [{"isOnline": true, "canDelete": true, "title": "Content page", "canChange": true, "id": ' + str(
            self.content_page.pk
        ) + ', "children": []}]}], "deleteUrl": "/admin/pages/page/__id__/delete/?from=sitemap", "moveUrl": "/admin/pages/page/move-page/"}'
        self.assertDictEqual(json.loads(response.content.decode()),
                             json.loads(sitemap))
        self.assertEqual(response['Content-Type'],
                         "application/json; charset=utf-8")

        request.pages.homepage = None
        response = self.page_admin.sitemap_json_view(request)
        sitemap = '{"createHomepageUrl": "/admin/pages/page/add/?from=sitemap", "addUrl": "/admin/pages/page/add/?from=sitemap&parent=__id__", "canAdd": true, "changeUrl": "/admin/pages/page/__id__/change/?from=sitemap", "entries": [], "deleteUrl": "/admin/pages/page/__id__/delete/?from=sitemap", "moveUrl": "/admin/pages/page/move-page/"}'
        self.assertDictEqual(json.loads(response.content.decode()),
                             json.loads(sitemap))
        self.assertEqual(response['Content-Type'],
                         "application/json; charset=utf-8")
コード例 #26
0
    def test_alternate_page_version(self):
        _generate_pages(self)

        # Create a country group.
        group = CountryGroup.objects.create(
            name='Foo',
        )

        group2 = CountryGroup.objects.create(
            name='Bar',
        )

        # Create a country.
        Country.objects.create(
            code='GB',
            group=group,
        )

        country2 = Country.objects.create(
            code='FR',
            group=group2,
            default=False,
        )

        # Create an alternate version of the page with the country.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestMiddlewarePage)

            alternate_page = Page.objects.create(
                owner=self.homepage,
                country_group=group2,
                left=self.homepage.left,
                right=self.homepage.right,
                content_type=content_type,
            )

            TestMiddlewarePage.objects.create(
                page=alternate_page,
            )

        self.request = self.factory.get('/')
        self.request.country = country2
        self.page_manager = RequestPageManager(self.request)
        alternate_check = self.page_manager.alternate_page_version(self.homepage)

        self.assertEqual(alternate_check, alternate_page)
コード例 #27
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def setUp(self):
        call_command('installwatson')

        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)

            self.homepage = Page.objects.create(
                title="Homepage",
                slug='homepage',
                content_type=content_type,
            )

            TestPageContent.objects.create(
                page=self.homepage,
            )

            self.section = Page.objects.create(
                parent=self.homepage,
                title="Section",
                content_type=content_type,
            )

            TestPageContent.objects.create(
                page=self.section,
            )

            self.subsection = Page.objects.create(
                parent=self.section,
                title="Subsection",
                content_type=content_type,
            )

            TestPageContent.objects.create(
                page=self.subsection,
            )

            self.subsubsection = Page.objects.create(
                parent=self.subsection,
                title="Subsubsection",
                content_type=content_type,
            )

            TestPageContent.objects.create(
                page=self.subsubsection,
            )
コード例 #28
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def test_page_save__create_with_sides(self):
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)

            # Create a page with a manual left and right defined.
            page_obj = Page.objects.create(
                title='Foo',
                content_type=content_type,
                parent=self.pages['Tree_1___Page_1'],
                left=7,
                right=8,
            )

            TestPageContent.objects.create(
                page=page_obj,
            )

            self.assertEqual(page_obj.title, 'Foo')
コード例 #29
0
    def _create_objects(self):
        with search.update_index():
            self.date = now()

            content_type = ContentType.objects.get_for_model(NewsFeed)

            self.page = Page.objects.create(
                title='News Feed',
                content_type=content_type,
            )

            self.feed = NewsFeed.objects.create(
                page=self.page,
            )

            self.category = Category.objects.create(
                slug='foo'
            )

            self.article = Article.objects.create(
                news_feed=self.feed,
                title='Foo',
                slug='foo',
                # The seconds subtraction is because of time-rounding
                # in the base publication manager.
                date=self.date - timedelta(seconds=61),
            )

            self.article.categories.add(self.category)

            self.article_2 = Article.objects.create(
                news_feed=self.feed,
                title='Foo 2',
                slug='foo2',
                date=self.date + timedelta(days=10)
            )

            self.article_3 = Article.objects.create(
                news_feed=self.feed,
                title='Foo 3',
                slug='foo3',
                status='approved',
                date=self.date - timedelta(seconds=61),
            )
コード例 #30
0
ファイル: utils.py プロジェクト: onespacemedia/cms
def duplicate_page(original_page, page_changes=None):
    '''
        Takes a page and duplicates it as a child of the original's parent page.
        Expects to be passed the original page and an optional function
    '''
    from .admin import page_admin
    original_content = original_page.content

    with update_index():
        page = deepcopy(original_page)
        page.pk = None

        if callable(page_changes):
            page = page_changes(page, original_page)

        page.save()

        content = deepcopy(original_content)
        content.pk = None
        content.page = page
        content.save()

        # This doesn't copy m2m relations on the copied inline
        for content_cls, admin_cls in page_admin.content_inlines:
            if not isinstance(content, content_cls):
                continue

            model_cls = admin_cls.model
            fk = _get_foreign_key(Page, model_cls, fk_name=admin_cls.fk_name)

            related_items = model_cls.objects.filter(**{
                fk.name: original_page.pk
            }).distinct().all()
            for item in related_items:
                new_object = deepcopy(item)
                new_object.pk = None
                setattr(new_object, fk.name, page)
                new_object = overlay_obj(new_object,
                                         item,
                                         exclude=[fk.name, 'pk', 'id'],
                                         commit=True)
                new_object.save()

    return page
コード例 #31
0
    def setUp(self):
        # Note: as this is the only page in the database, it's absolute URL
        # will simply be '/'

        with search.update_index():
            content_type = ContentType.objects.get_for_model(Careers)
            self.page = Page.objects.create(
                content_type=content_type,
                title='Foo',
                slug='foo',
            )

            self.job_page = Careers.objects.create(page=self.page, )

        self.job = Career.objects.create(
            page=self.job_page,
            slug='foo-bar',
            title='Tester',
        )
コード例 #32
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pagecontenttypefilter_lookups(self):
        # Add some pages with different content types.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContent)
            content_type_2 = ContentType.objects.get_for_model(PageContentWithFields)

            self._make_page('John', content_type)
            self._make_page('Paul', content_type)
            self._make_page('Ringo', content_type_2)
        request = self._build_request()
        filterer = PageContentTypeFilter(request, {}, Page, self.page_admin)
        lookups = filterer.lookups(request, Page.objects.all())
        # Make sure that something has been returned...
        self.assertTrue(len(lookups) > 0)

        # ...and that they are of the correct content type.
        self.assertTrue(len(lookups) == len(get_registered_content()))

        # Ensure that the lookup names have been ordered.
        lookup_names = [lookup[1] for lookup in lookups]
        self.assertEqual(lookup_names, sorted(lookup_names))
コード例 #33
0
ファイル: views.py プロジェクト: mhsaleem/ITECH-
def process_pun_form(request):
    did_post = False
    form = PunForm(request.POST)
    if form.is_valid():
        # this is working, redirect needs fixed. But currently users do not have profiles automatically
        tags = re.split("; |, ", form.cleaned_data["tags"])
        # converting text to tag objects
        tag_objs = []
        for tag in tags:
            tag_objs.append(Tag.objects.get_or_create(text=tag)[0])
        pun = Pun(text=form.cleaned_data["puntext"], owner=request.user, NSFW=form.cleaned_data["NSFW"], flagCount=0)
        with watson.update_index():
            try:
                pun.save()
            except IntegrityError:
                return (PunForm(), did_post)
        for tag in tag_objs:
            pun.tags.add(tag)
            # adding tag objects to the pun
        did_post = True
    return (form, did_post)
コード例 #34
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def test_page_get_absolute_url(self):
        with search.update_index():
            Page.objects.all().delete()

            content_type = ContentType.objects.get_for_model(TestPageContent)

            new_page = Page(
                content_type=content_type,
                parent=None,
                left=None,
                right=None,
            )

            new_page.save()

            TestPageContent.objects.create(page=new_page, )

        self.assertEqual(new_page.get_absolute_url(), '/')

        new_page = Page.objects.get(pk=new_page.pk)
        self.assertEqual(new_page.get_absolute_url(), '/')
コード例 #35
0
    def setUp(self):
        # Note: as this is the only page in the database, it's absolute URL
        # will simply be '/'

        with search.update_index():
            content_type = ContentType.objects.get_for_model(People)
            self.page = Page.objects.create(
                content_type=content_type,
                title='Foo',
                slug='foo',
            )

            self.person_page = People.objects.create(
                page=self.page,
            )

        self.person = Person.objects.create(
            page=self.person_page,
            slug='foo-bar',
            first_name='Foo',
            last_name='Bar',
        )
コード例 #36
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pageadmin_get_all_children(self):
        self.assertListEqual(self.page_admin.get_all_children(self.homepage), [])

        # Add a child page.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContentWithFields)

            self.content_page = Page.objects.create(
                title="Content page",
                slug='content_page',
                parent=self.homepage,
                content_type=content_type,
            )

            PageContentWithFields.objects.create(
                page=self.content_page,
            )

        # The `children` attribute is cached as long as we use the original
        # reference, so get the Page again.
        self.homepage = Page.objects.get(slug='homepage')
        self.assertListEqual(self.page_admin.get_all_children(self.homepage), [self.content_page])
コード例 #37
0
    def test_pagecontenttypefilter_lookups(self):
        # Add some pages with different content types.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)
            content_type_2 = ContentType.objects.get_for_model(
                TestPageContentWithFields)

            self._make_page('John', content_type)
            self._make_page('Paul', content_type)
            self._make_page('Ringo', content_type_2)
        request = self._build_request()
        filterer = PageContentTypeFilter(request, {}, Page, self.page_admin)
        lookups = filterer.lookups(request, Page.objects.all())
        # Make sure that something has been returned...
        self.assertTrue(len(lookups) > 0)

        # ...and that they are of the correct content type.
        self.assertTrue(len(lookups) == len(get_registered_content()))

        # Ensure that the lookup names have been ordered.
        lookup_names = [lookup[1] for lookup in lookups]
        self.assertEqual(lookup_names, sorted(lookup_names))
コード例 #38
0
ファイル: test_models.py プロジェクト: onespacemedia/cms-faqs
    def setUp(self):
        # Note: as this is the only page in the database, it's absolute URL
        # will simply be '/'

        with search.update_index():
            content_type = ContentType.objects.get_for_model(Faqs)
            self.page = Page.objects.create(
                content_type=content_type,
                title='Foo',
                slug='foo',
            )

            self.faq_page = Faqs.objects.create(
                page=self.page,
            )

        self.faq = Faq.objects.create(
            page=self.faq_page,
            question='What colour is the sky?',
            answer='Blue',
            slug='what-colour-sky'
        )
コード例 #39
0
    def test_pageadmin_get_all_children(self):
        self.assertListEqual(self.page_admin.get_all_children(self.homepage),
                             [])

        # Add a child page.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(
                TestPageContentWithFields)

            self.content_page = Page.objects.create(
                title="Content page",
                slug='content_page',
                parent=self.homepage,
                content_type=content_type,
            )

            TestPageContentWithFields.objects.create(page=self.content_page, )

        # The `children` attribute is cached as long as we use the original
        # reference, so get the Page again.
        self.homepage = Page.objects.get(slug='homepage')
        self.assertListEqual(self.page_admin.get_all_children(self.homepage),
                             [self.content_page])
コード例 #40
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def setUp(self):
        call_command('installwatson')

        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)

            self.homepage = Page.objects.create(
                title='Homepage',
                slug='homepage',
                content_type=content_type,
            )

            TestPageContent.objects.create(page=self.homepage, )

            self.section = Page.objects.create(
                parent=self.homepage,
                title='Section',
                content_type=content_type,
            )

            TestPageContent.objects.create(page=self.section, )

            self.subsection = Page.objects.create(
                parent=self.section,
                title='Subsection',
                content_type=content_type,
            )

            TestPageContent.objects.create(page=self.subsection, )

            self.subsubsection = Page.objects.create(
                parent=self.subsection,
                title='Subsubsection',
                content_type=content_type,
            )

            TestPageContent.objects.create(page=self.subsubsection, )
コード例 #41
0
    def test_index_redirect(self):
        with update_index():
            page = Page.objects.create(
                title='Homepage',
                content_type=ContentType.objects.get_for_model(Link),
            )

            Link.objects.create(
                page=page,
                link_url='http://www.example.com/',
            )

        factory = RequestFactory()
        request = factory.get('/')

        class Object:
            pass

        setattr(request, 'pages', Object)
        request.pages.current = page
        view = index(request)

        self.assertEqual(view.status_code, 302)
        self.assertEqual(view['Location'], 'http://www.example.com/')
コード例 #42
0
ファイル: test_views.py プロジェクト: onespacemedia/cms
    def test_index_redirect(self):
        with update_index():
            page = Page.objects.create(
                title="Homepage",
                content_type=ContentType.objects.get_for_model(Link),
            )

            Link.objects.create(
                page=page,
                link_url="http://www.example.com/",
            )

        factory = RequestFactory()
        request = factory.get('/')

        class Object(object):
            pass

        setattr(request, 'pages', Object)
        request.pages.current = page
        view = index(request)

        self.assertEquals(view.status_code, 302)
        self.assertEquals(view["Location"], "http://www.example.com/")
コード例 #43
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pageadmin_get_form(self):
        request = self._build_request(
            page_type=ContentType.objects.get_for_model(PageContent).pk
        )

        form = self.page_admin.get_form(request)

        keys = ['title', 'slug', 'parent', 'requires_authentication',
                'publication_date', 'expiry_date', 'is_online', 'short_title',
                'in_navigation', 'hide_from_anonymous', 'browser_title',
                'meta_description', 'sitemap_priority', 'sitemap_changefreq',
                'robots_index', 'robots_follow', 'robots_archive', 'og_title',
                'og_description', 'og_image', 'twitter_card', 'twitter_title',
                'twitter_description', 'twitter_image']

        self.assertListEqual(list(form.base_fields.keys()), keys)

        request = self._build_request()

        # Test a page with a content model with fields.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContentWithFields)

            self.content_page = Page.objects.create(
                title="Content page",
                slug='content_page',
                parent=self.homepage,
                content_type=content_type,
            )

            PageContentWithFields.objects.create(
                page=self.content_page,
            )

        form = self.page_admin.get_form(request, obj=self.content_page)

        keys = ['title', 'slug', 'parent', 'description', 'inline_model',
                'requires_authentication', 'publication_date', 'expiry_date',
                'is_online', 'short_title', 'in_navigation',
                'hide_from_anonymous',  'browser_title', 'meta_description',
                'sitemap_priority', 'sitemap_changefreq', 'robots_index',
                'robots_follow', 'robots_archive', 'og_title', 'og_description',
                'og_image', 'twitter_card', 'twitter_title',
                'twitter_description', 'twitter_image']
        self.assertListEqual(list(form.base_fields.keys()), keys)

        self.assertIsInstance(form.base_fields['inline_model'].widget, RelatedFieldWidgetWrapper)

        setattr(PageContentWithFields, 'filter_horizontal', ['inline_model'])
        form = self.page_admin.get_form(request, obj=self.content_page)
        self.assertIsInstance(form.base_fields['inline_model'].widget, FilteredSelectMultiple)

        # No homepage.
        self.assertEqual(form.base_fields['parent'].choices, [(self.homepage.pk, 'Homepage')])

        request.pages.homepage = None
        form = self.page_admin.get_form(request, obj=self.content_page)

        self.assertListEqual(form.base_fields['parent'].choices, [('', '---------')])

        self.content_page.is_content_object = True
        form = self.page_admin.get_form(request, obj=self.content_page)

        keys = ['title', 'description', 'inline_model',
                'requires_authentication', 'publication_date', 'expiry_date',
                'is_online', 'short_title', 'in_navigation',
                'hide_from_anonymous', 'browser_title', 'meta_description',
                'sitemap_priority', 'sitemap_changefreq', 'robots_index',
                'robots_follow', 'robots_archive', 'og_title', 'og_description',
                'og_image', 'twitter_card', 'twitter_title',
                'twitter_description', 'twitter_image']

        self.assertListEqual(list(form.base_fields.keys()), keys)

        self.content_page.is_content_object = False

        # Trigger the `content_cls.DoesNotExist` exception.
        content_cls = self.page_admin.get_page_content_cls(request, self.content_page)

        class Obj(object):

            def __getattr__(self, name):
                return getattr(self.page, name)

            @property
            def content(self):
                raise content_cls.DoesNotExist

            def __init__(self, page, *args, **kwargs):
                self.page = page

        obj = Obj(self.content_page)
        self.page_admin.get_form(request, obj=obj)
コード例 #44
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pageadmin_move_page_view(self):
        request = self._build_request()
        request.POST['page'] = self.homepage.pk
        request.POST['direction'] = 'up'
        response = self.page_admin.move_page_view(request)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(response.content, b"Page could not be moved, as nothing to swap with.")

        request.POST['direction'] = 'down'
        response = self.page_admin.move_page_view(request)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(response.content, b"Page could not be moved, as nothing to swap with.")

        request.POST['direction'] = 'foo'

        self.orig_stderr = sys.stderr
        sys.stderr = open(os.devnull, 'w')

        with self.assertRaises(ValueError):
            self.page_admin.move_page_view(request)

        sys.stderr = self.orig_stderr

        # Add some child pages.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContent)

            content_page_1 = Page.objects.create(
                title="Foo",
                slug='foo',
                parent=self.homepage,
                content_type=content_type,
            )

            PageContent.objects.create(
                page=content_page_1,
            )

            # Create an alternative page.
            alternative_page = Page.objects.create(
                is_content_object=True,
                owner=content_page_1,
                left=content_page_1.left,
                right=content_page_1.right,
                content_type=content_type,
            )

            PageContent.objects.create(
                page=alternative_page,
            )

            content_page_2 = Page.objects.create(
                title="Bar",
                slug='bar',
                parent=self.homepage,
                content_type=content_type,
            )

            PageContent.objects.create(
                page=content_page_2,
            )

        self.homepage = Page.objects.get(pk=self.homepage.pk)
        content_page_1 = Page.objects.get(pk=content_page_1.pk)
        alternative_page = Page.objects.get(pk=alternative_page.pk)
        content_page_2 = Page.objects.get(pk=content_page_2.pk)

        self.assertEqual(self.homepage.left, 1)
        self.assertEqual(self.homepage.right, 6)
        self.assertEqual(content_page_1.left, 2)
        self.assertEqual(content_page_1.right, 3)
        self.assertEqual(alternative_page.left, 2)
        self.assertEqual(alternative_page.right, 3)
        self.assertEqual(content_page_2.left, 4)
        self.assertEqual(content_page_2.right, 5)

        # Move the page
        request.POST['page'] = content_page_1.pk
        request.POST['direction'] = 'down'
        response = self.page_admin.move_page_view(request)

        self.homepage = Page.objects.get(pk=self.homepage.pk)
        content_page_1 = Page.objects.get(pk=content_page_1.pk)
        alternative_page = Page.objects.get(pk=alternative_page.pk)
        content_page_2 = Page.objects.get(pk=content_page_2.pk)

        self.assertEqual(self.homepage.left, 1)
        self.assertEqual(self.homepage.right, 6)
        self.assertEqual(content_page_1.left, 4)
        self.assertEqual(content_page_1.right, 5)
        self.assertEqual(alternative_page.left, 4)
        self.assertEqual(alternative_page.right, 5)
        self.assertEqual(content_page_2.left, 2)
        self.assertEqual(content_page_2.right, 3)

        if six.PY2:
            self.assertEqual(response.content, "Page #" + six.text_type(content_page_1.pk) + " was moved down.")
        else:
            self.assertEqual(response.content, bytes("Page #" + six.text_type(content_page_1.pk) + " was moved down.", 'utf-8'))
        self.assertEqual(response.status_code, 200)

        request.user.has_perm = lambda x: False
        response = self.page_admin.move_page_view(request)
        self.assertEqual(response.status_code, 403)
コード例 #45
0
 def testSearchIndexUpdateDeferredByContext(self):
     with watson.update_index():
         self.test11.title = "fooo"
         self.test11.save()
         self.assertEqual(watson.search("fooo").count(), 0)
     self.assertEqual(watson.search("fooo").count(), 1)
コード例 #46
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pageadmin_duplicate_for_country_group(self):
        # Test without country groups first.
        factory = RequestFactory()
        request = factory.get('/?preview=a')

        # Allow the messages framework to work.
        setattr(request, 'session', 'session')
        messages = FallbackStorage(request)
        setattr(request, '_messages', messages)

        response = self.page_admin.duplicate_for_country_group(request, page=self.homepage.pk)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'], '/admin/pages/page/' + str(self.homepage.pk))
        self.assertEqual(len(request._messages._queued_messages), 1)
        self.assertEqual(
            request._messages._queued_messages[0].message,
            "You need to add at least one country group first before you can add a copy of this page"
        )

        # Create country groups.
        self.country_group = CountryGroup.objects.create(
            name="United Kingdom"
        )

        self.country = Country.objects.create(
            name="United Kingdom",
            code="GB",
            group=self.country_group
        )

        request = self._build_request()
        response = self.page_admin.duplicate_for_country_group(request, page=self.homepage.pk)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.context_data['original_page'], self.homepage)

        request = self._build_request(method='POST')
        request.POST = dict(
            country_group=self.country_group.pk
        )
        response = self.page_admin.duplicate_for_country_group(request, page=self.homepage.pk)
        self.assertEquals(Page.objects.filter(owner=self.homepage, is_content_object=True).count(), 1)

        with search.update_index():

            content_type_2 = ContentType.objects.get_for_model(
                PageContentWithFields)

            inline_page = Page.objects.create(
                parent=self.homepage,
                title="Inline page",
                content_type=content_type_2,
            )

            PageContentWithFields.objects.create(
                page=inline_page,
            )

            inline_model = InlineModel.objects.create(
                page=inline_page,
            )

            request = self._build_request(method='POST')
            request.POST = dict(
                country_group=self.country_group.pk
            )
            response = self.page_admin.duplicate_for_country_group(request, page=inline_page.pk)
            self.assertEquals(Page.objects.filter(owner=inline_page, is_content_object=True).count(), 1)

            inline_page_clone = Page.objects.get(owner=inline_page, is_content_object=True)

            self.assertEquals(inline_page_clone.inlinemodel_set.count(), 1)
コード例 #47
0
ファイル: test_admin.py プロジェクト: onespacemedia/cms
    def test_pageadmin_get_fieldsets(self):
        request = self._build_request(
            page_type=ContentType.objects.get_for_model(PageContent).pk
        )
        request2 = self._build_request(
            page_type=ContentType.objects.get_for_model(PageContentWithFields).pk
        )

        with search.update_index():
            content_type = ContentType.objects.get_for_model(PageContentWithFields)

            self.content_page = Page.objects.create(
                title="Content page",
                slug='content_page',
                parent=self.homepage,
                content_type=content_type,
            )

            PageContentWithFields.objects.create(
                page=self.content_page,
            )

        pagecontent_fields = [
            (None, {
                'fields': ('title', 'slug', 'parent')
            }),
            ("Security", {
                "fields": ("requires_authentication",),
            }),
            ('Publication', {
                'fields': ('publication_date', 'expiry_date', 'is_online'),
                'classes': ('collapse',)
            }),
            ('Navigation', {
                'fields': ('short_title', 'in_navigation', "hide_from_anonymous",),
                'classes': ('collapse',)
            }),
            ('Search engine optimization', {
                'fields': ('browser_title', 'meta_description', 'sitemap_priority', 'sitemap_changefreq', 'robots_index', 'robots_follow', 'robots_archive'),
                'classes': ('collapse',)
            }),
            ("Open Graph", {
                "fields": ("og_title", "og_description", "og_image"),
                "classes": ("collapse",)
            }),
            ("Twitter card", {
                "fields": ("twitter_card", "twitter_title", "twitter_description", "twitter_image"),
                "classes": ("collapse",)
            })
        ]

        pagecontentwithfields_fields = [
            (None, {
                'fields': ('title', 'slug', 'parent')
            }),
            ('Page content', {
                'fields': ['description', 'inline_model']
            }),
            ("Security", {
                "fields": ("requires_authentication",),
            }),
            ('Publication', {
                'fields': ('publication_date', 'expiry_date', 'is_online'),
                'classes': ('collapse',)
            }),
            ('Navigation', {
                'fields': ('short_title', 'in_navigation', "hide_from_anonymous",),
                'classes': ('collapse',)
            }),
            ('Search engine optimization', {
                'fields': ('browser_title', 'meta_description', 'sitemap_priority', 'sitemap_changefreq', 'robots_index', 'robots_follow', 'robots_archive'),
                'classes': ('collapse',)
            }),
            ("Open Graph", {
                "fields": ("og_title", "og_description", "og_image"),
                "classes": ("collapse",)
            }),
            ("Twitter card", {
                "fields": ("twitter_card", "twitter_title", "twitter_description", "twitter_image"),
                "classes": ("collapse",)
            })
        ]

        self.assertEqual(self.page_admin.get_fieldsets(request), pagecontent_fields)
        self.assertEqual(self.page_admin.get_fieldsets(request2), pagecontentwithfields_fields)
コード例 #48
0
ファイル: test_models.py プロジェクト: onespacemedia/cms
    def setUp(self):
        structure = {
            'title': 'Homepage',
            'children': [
                {
                    'title': 'Tree 1 - Page 1',
                    'children': [
                        {
                            'title': 'Tree 1 - Page 2'
                        },
                        {
                            'title': 'Tree 1 - Page 3'
                        }
                    ]
                },
                {
                    'title': 'Tree 2 - Page 1'
                },
                {
                    'title': 'Tree 3 - Page 1',
                    'children': [
                        {
                            'title': 'Tree 3 - Page 2',
                            'children': [
                                {
                                    'title': 'Tree 3 - Page 4'
                                },
                                {
                                    'title': 'Tree 3 - Page 5'
                                }
                            ]
                        },
                        {
                            'title': 'Tree 3 - Page 3'
                        }
                    ]
                }
            ]
        }

        content_type = ContentType.objects.get_for_model(TestPageContent)
        self.page_ids = {}
        self.pages = {}

        def _add_page(page, parent=None):
            slug = page['title'].replace(' ', '_').replace('-', '_')

            page_obj = Page.objects.create(
                title=page['title'],
                slug=slug,
                content_type=content_type,
                parent=parent,
            )

            TestPageContent.objects.create(
                page=page_obj,
            )

            self.page_ids[slug] = page_obj.pk

            if page.get('children', None):
                for child in page['children']:
                    _add_page(child, page_obj)

        with search.update_index():
            _add_page(structure)
            self._rebuild_page_dict()
コード例 #49
0
    def test_process_response(self):
        request = self.factory.get('/')
        response = HttpResponse()

        middleware = PageMiddleware()
        self.assertEqual(middleware.process_response(request, response), response)

        response = HttpResponseNotFound()
        page_request = self.factory.get('')
        request.pages = RequestPageManager(page_request)
        self.assertEqual(middleware.process_response(request, response), response)

        _generate_pages(self)

        request = self.factory.get('/foo/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)

        self.assertEqual(processed_response.status_code, 200)
        self.assertEqual(processed_response.template_name, (
            'pages/testmiddlewarepage.html',
            'pages/base.html',
            'base.html'
        ))

        request = self.factory.get('/')
        request_foo = self.factory.get('/foo/')
        request.pages = RequestPageManager(request_foo)
        processed_response = middleware.process_response(request, response)

        self.assertEqual(processed_response['Location'], '/foo/')
        self.assertEqual(processed_response.status_code, 301)
        self.assertEqual(processed_response.content, b'')

        request = self.factory.get('/foobar/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response.status_code, 404)

        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestMiddlewarePageURLs)

            self.content_url = Page.objects.create(
                title="Foo",
                slug='urls',
                parent=self.homepage,
                content_type=content_type,
            )

            TestMiddlewarePageURLs.objects.create(
                page=self.content_url,
            )

        request = self.factory.get('/urls/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, HttpResponseNotFound())
        self.assertEqual(processed_response.status_code, 200)
        self.assertEqual(processed_response.content, b'Hello!')
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestMiddlewarePageURLs)

            self.content_url = Page.objects.create(
                title="Foo",
                slug='raise404',
                parent=self.homepage,
                content_type=content_type,
            )

            TestMiddlewarePageURLs.objects.create(
                page=self.content_url,
            )

        request = self.factory.get('/raise404/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, HttpResponseNotFound())
        self.assertEqual(processed_response.status_code, 404)

        with self.settings(DEBUG=True):
            request = self.factory.get('/raise404/')
            request.pages = RequestPageManager(request)
            processed_response = middleware.process_response(request, HttpResponseNotFound())
            self.assertEqual(processed_response.status_code, 404)

        request = self.factory.get('/auth/')
        request.user = MockUser(authenticated=False)
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response['Location'], '/accounts/login/?next=/auth/')
        self.assertEqual(processed_response.status_code, 302)

        request = self.factory.get('/auth/')
        request.user = MockUser(authenticated=True)
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response.status_code, 200)

        request = self.factory.get('/media/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response, response)

        request = self.factory.get('/foo/')
        request.country = Country.objects.create(
            code='GB',
        )
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response.status_code, 200)
コード例 #50
0
def _generate_pages(self):
    with search.update_index():
        content_type = ContentType.objects.get_for_model(TestMiddlewarePage)

        self.homepage = Page.objects.create(
            title="Homepage",
            slug='homepage',
            content_type=content_type,
        )

        TestMiddlewarePage.objects.create(
            page=self.homepage,
        )

        self.page_1 = Page.objects.create(
            title='Foo',
            slug='foo',
            parent=self.homepage,
            content_type=content_type,
        )

        TestMiddlewarePage.objects.create(
            page=self.page_1,
        )

        self.page_2 = Page.objects.create(
            title='Bar',
            slug='bar',
            parent=self.page_1,
            content_type=content_type,
        )

        TestMiddlewarePage.objects.create(
            page=self.page_2,
        )

        self.country_group = CountryGroup.objects.create(
            name="United States of America"
        )

        self.country = Country.objects.create(
            name="United States of America",
            code="US",
            group=self.country_group
        )

        self.country_gb = Country.objects.create(
            name="United Kingdom",
            code="GB"
        )

        self.homepage_alt = Page.objects.create(
            title="Homepage",
            slug='homepage',
            owner=self.homepage,
            country_group=self.country_group,
            content_type=content_type,
            left=0,
            right=0,
        )

        TestMiddlewarePage.objects.create(
            page=self.homepage_alt,
        )

        self.auth_page = Page.objects.create(
            title='Auth Page',
            slug='auth',
            parent=self.homepage,
            content_type=content_type,
            requires_authentication=True,
        )

        TestMiddlewarePage.objects.create(
            page=self.auth_page,
        )
コード例 #51
0
    def test_pageadmin_get_form(self):
        request = self._build_request(
            page_type=ContentType.objects.get_for_model(TestPageContent).pk)

        form = self.page_admin.get_form(request)

        keys = [
            'title', 'slug', 'parent', 'requires_authentication',
            'publication_date', 'expiry_date', 'is_online', 'short_title',
            'in_navigation', 'hide_from_anonymous', 'browser_title',
            'meta_description', 'sitemap_priority', 'sitemap_changefreq',
            'robots_index', 'robots_follow', 'robots_archive', 'og_title',
            'og_description', 'og_image', 'twitter_card', 'twitter_title',
            'twitter_description', 'twitter_image'
        ]

        self.assertListEqual(list(form.base_fields.keys()), keys)

        request = self._build_request()

        # Test a page with a content model with fields.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(
                TestPageContentWithFields)

            self.content_page = Page.objects.create(
                title="Content page",
                slug='content_page',
                parent=self.homepage,
                content_type=content_type,
            )

            TestPageContentWithFields.objects.create(page=self.content_page, )

        form = self.page_admin.get_form(request, obj=self.content_page)

        keys = [
            'title', 'slug', 'parent', 'description', 'inline_model',
            'requires_authentication', 'publication_date', 'expiry_date',
            'is_online', 'short_title', 'in_navigation', 'hide_from_anonymous',
            'browser_title', 'meta_description', 'sitemap_priority',
            'sitemap_changefreq', 'robots_index', 'robots_follow',
            'robots_archive', 'og_title', 'og_description', 'og_image',
            'twitter_card', 'twitter_title', 'twitter_description',
            'twitter_image'
        ]
        self.assertListEqual(list(form.base_fields.keys()), keys)

        self.assertIsInstance(form.base_fields['inline_model'].widget,
                              RelatedFieldWidgetWrapper)

        setattr(TestPageContentWithFields, 'filter_horizontal',
                ['inline_model'])
        form = self.page_admin.get_form(request, obj=self.content_page)
        self.assertIsInstance(form.base_fields['inline_model'].widget,
                              FilteredSelectMultiple)

        # No homepage.
        self.assertEqual(form.base_fields['parent'].choices,
                         [(self.homepage.pk, 'Homepage')])

        request.pages.homepage = None
        form = self.page_admin.get_form(request, obj=self.content_page)

        self.assertListEqual(form.base_fields['parent'].choices,
                             [('', '---------')])

        self.content_page.version_for = self.homepage
        form = self.page_admin.get_form(request, obj=self.content_page)

        keys = [
            'title', 'description', 'inline_model', 'requires_authentication',
            'publication_date', 'expiry_date', 'is_online', 'short_title',
            'in_navigation', 'hide_from_anonymous', 'browser_title',
            'meta_description', 'sitemap_priority', 'sitemap_changefreq',
            'robots_index', 'robots_follow', 'robots_archive', 'og_title',
            'og_description', 'og_image', 'twitter_card', 'twitter_title',
            'twitter_description', 'twitter_image'
        ]

        self.assertListEqual(list(form.base_fields.keys()), keys)

        self.content_page.version_for = None

        # Trigger the `content_cls.DoesNotExist` exception.
        content_cls = self.page_admin.get_page_content_cls(
            request, self.content_page)

        class Obj:
            def __getattr__(self, name):
                return getattr(self.page, name)

            @property
            def content(self):
                raise content_cls.DoesNotExist

            def __init__(self, page, *args, **kwargs):
                self.page = page

        obj = Obj(self.content_page)
        self.page_admin.get_form(request, obj=obj)
コード例 #52
0
ファイル: tests.py プロジェクト: dzbrozek/django-watson
 def testSearchIndexUpdateDeferredByContext(self):
     with watson.update_index():
         self.test11.title = "fooo"
         self.test11.save()
         self.assertEqual(watson.search("fooo").count(), 0)
     self.assertEqual(watson.search("fooo").count(), 1)
コード例 #53
0
ファイル: test_middleware.py プロジェクト: onespacemedia/cms
def _generate_pages(self):
    with search.update_index():
        content_type = ContentType.objects.get_for_model(TestMiddlewarePage)

        self.homepage = Page.objects.create(
            title="Homepage",
            slug='homepage',
            content_type=content_type,
        )

        TestMiddlewarePage.objects.create(
            page=self.homepage,
        )

        self.page_1 = Page.objects.create(
            title='Foo',
            slug='foo',
            parent=self.homepage,
            content_type=content_type,
        )

        TestMiddlewarePage.objects.create(
            page=self.page_1,
        )

        self.page_2 = Page.objects.create(
            title='Bar',
            slug='bar',
            parent=self.page_1,
            content_type=content_type,
        )

        TestMiddlewarePage.objects.create(
            page=self.page_2,
        )

        self.country_group = CountryGroup.objects.create(
            name="United States of America"
        )

        self.country = Country.objects.create(
            name="United States of America",
            code="US",
            group=self.country_group
        )

        self.country_gb = Country.objects.create(
            name="United Kingdom",
            code="GB"
        )

        self.homepage_alt = Page.objects.create(
            title="Homepage",
            slug='homepage',
            owner=self.homepage,
            is_content_object=True,
            country_group=self.country_group,
            content_type=content_type,
            left=0,
            right=0,
        )

        TestMiddlewarePage.objects.create(
            page=self.homepage_alt,
        )

        self.auth_page = Page.objects.create(
            title='Auth Page',
            slug='auth',
            parent=self.homepage,
            content_type=content_type,
            requires_authentication=True,
        )

        TestMiddlewarePage.objects.create(
            page=self.auth_page,
        )
コード例 #54
0
    def test_pageadmin_move_page_view(self):
        request = self._build_request()
        request.POST['page'] = self.homepage.pk
        request.POST['direction'] = 'up'
        response = self.page_admin.move_page_view(request)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(response.content,
                         b"Page could not be moved, as nothing to swap with.")

        request.POST['direction'] = 'down'
        response = self.page_admin.move_page_view(request)
        self.assertEqual(response.status_code, 200)

        self.assertEqual(response.content,
                         b"Page could not be moved, as nothing to swap with.")

        request.POST['direction'] = 'foo'

        self.orig_stderr = sys.stderr
        sys.stderr = open(os.devnull, 'w')

        with self.assertRaises(ValueError):
            self.page_admin.move_page_view(request)

        sys.stderr = self.orig_stderr

        # Add some child pages.
        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestPageContent)

            content_page_1 = Page.objects.create(
                title="Foo",
                slug='foo',
                parent=self.homepage,
                content_type=content_type,
            )

            TestPageContent.objects.create(page=content_page_1, )

            # Create an alternative page.
            alternative_page = Page.objects.create(
                owner=content_page_1,
                left=content_page_1.left,
                right=content_page_1.right,
                content_type=content_type,
            )

            TestPageContent.objects.create(page=alternative_page, )

            content_page_2 = Page.objects.create(
                title="Bar",
                slug='bar',
                parent=self.homepage,
                content_type=content_type,
            )

            TestPageContent.objects.create(page=content_page_2, )

        self.homepage = Page.objects.get(pk=self.homepage.pk)
        content_page_1 = Page.objects.get(pk=content_page_1.pk)
        alternative_page = Page.objects.get(pk=alternative_page.pk)
        content_page_2 = Page.objects.get(pk=content_page_2.pk)

        self.assertEqual(self.homepage.left, 1)
        self.assertEqual(self.homepage.right, 6)
        self.assertEqual(content_page_1.left, 2)
        self.assertEqual(content_page_1.right, 3)
        self.assertEqual(alternative_page.left, 2)
        self.assertEqual(alternative_page.right, 3)
        self.assertEqual(content_page_2.left, 4)
        self.assertEqual(content_page_2.right, 5)

        # Move the page
        request.POST['page'] = content_page_1.pk
        request.POST['direction'] = 'down'
        response = self.page_admin.move_page_view(request)

        self.homepage = Page.objects.get(pk=self.homepage.pk)
        content_page_1 = Page.objects.get(pk=content_page_1.pk)
        alternative_page = Page.objects.get(pk=alternative_page.pk)
        content_page_2 = Page.objects.get(pk=content_page_2.pk)

        self.assertEqual(self.homepage.left, 1)
        self.assertEqual(self.homepage.right, 6)
        self.assertEqual(content_page_1.left, 4)
        self.assertEqual(content_page_1.right, 5)
        self.assertEqual(alternative_page.left, 4)
        self.assertEqual(alternative_page.right, 5)
        self.assertEqual(content_page_2.left, 2)
        self.assertEqual(content_page_2.right, 3)

        self.assertEqual(
            response.content,
            bytes("Page #" + str(content_page_1.pk) + " was moved down.",
                  'utf-8'))
        self.assertEqual(response.status_code, 200)

        request.user.has_perm = lambda x: False
        response = self.page_admin.move_page_view(request)
        self.assertEqual(response.status_code, 403)
コード例 #55
0
ファイル: test_middleware.py プロジェクト: onespacemedia/cms
    def test_process_response(self):
        request = self.factory.get('/')
        response = HttpResponse()

        middleware = PageMiddleware()
        self.assertEqual(middleware.process_response(request, response), response)

        response = HttpResponseNotFound()
        page_request = self.factory.get('')
        request.pages = RequestPageManager(page_request)
        self.assertEqual(middleware.process_response(request, response), response)

        _generate_pages(self)

        request = self.factory.get('/foo/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)

        self.assertEqual(processed_response.status_code, 200)
        self.assertEqual(processed_response.template_name, (
            'pages/testmiddlewarepage.html',
            'pages/base.html',
            'base.html'
        ))

        request = self.factory.get('/')
        request_foo = self.factory.get('/foo/')
        request.pages = RequestPageManager(request_foo)
        processed_response = middleware.process_response(request, response)

        self.assertEqual(processed_response['Location'], '/foo/')
        self.assertEqual(processed_response.status_code, 301)
        self.assertEqual(processed_response.content, b'')

        request = self.factory.get('/foobar/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response.status_code, 404)

        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestMiddlewarePageURLs)

            self.content_url = Page.objects.create(
                title="Foo",
                slug='urls',
                parent=self.homepage,
                content_type=content_type,
            )

            TestMiddlewarePageURLs.objects.create(
                page=self.content_url,
            )

        request = self.factory.get('/urls/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, HttpResponseNotFound())
        self.assertEqual(processed_response.status_code, 500)

        with search.update_index():
            content_type = ContentType.objects.get_for_model(TestMiddlewarePageURLs)

            self.content_url = Page.objects.create(
                title="Foo",
                slug='raise404',
                parent=self.homepage,
                content_type=content_type,
            )

            TestMiddlewarePageURLs.objects.create(
                page=self.content_url,
            )

        request = self.factory.get('/raise404/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, HttpResponseNotFound())
        self.assertEqual(processed_response.status_code, 404)

        with self.settings(DEBUG=True):
            request = self.factory.get('/raise404/')
            request.pages = RequestPageManager(request)
            processed_response = middleware.process_response(request, HttpResponseNotFound())
            self.assertEqual(processed_response.status_code, 404)

        request = self.factory.get('/auth/')
        request.user = MockUser(authenticated=False)
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response['Location'], '/accounts/login/?next=/auth/')
        self.assertEqual(processed_response.status_code, 302)

        request = self.factory.get('/auth/')
        request.user = MockUser(authenticated=True)
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response.status_code, 200)

        request = self.factory.get('/media/')
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response, response)

        request = self.factory.get('/foo/')
        request.country = Country.objects.create(
            code='GB',
        )
        request.pages = RequestPageManager(request)
        processed_response = middleware.process_response(request, response)
        self.assertEqual(processed_response.status_code, 200)
コード例 #56
0
    def test_pageadmin_duplicate_for_country_group(self):
        # Test without country groups first.
        factory = RequestFactory()
        request = factory.get('/?preview=a')

        # Allow the messages framework to work.
        setattr(request, 'session', 'session')
        messages = FallbackStorage(request)
        setattr(request, '_messages', messages)

        response = self.page_admin.duplicate_for_country_group(
            request, page=self.homepage.pk)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(response['Location'],
                         '/admin/pages/page/' + str(self.homepage.pk))
        self.assertEqual(len(request._messages._queued_messages), 1)
        self.assertEqual(
            request._messages._queued_messages[0].message,
            "You need to add at least one country group first before you can add a copy of this page"
        )

        # Create country groups.
        self.country_group = CountryGroup.objects.create(name="United Kingdom")

        self.country = Country.objects.create(name="United Kingdom",
                                              code="GB",
                                              group=self.country_group)

        request = self._build_request()
        response = self.page_admin.duplicate_for_country_group(
            request, page=self.homepage.pk)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.context_data['original_page'], self.homepage)

        request = self._build_request(method='POST')
        request.POST = dict(country_group=self.country_group.pk)
        response = self.page_admin.duplicate_for_country_group(
            request, page=self.homepage.pk)
        self.assertEqual(
            Page.objects.filter(owner=self.homepage,
                                is_canonical_page=False).count(), 1)

        with search.update_index():

            content_type_2 = ContentType.objects.get_for_model(
                TestPageContentWithFields)

            inline_page = Page.objects.create(
                parent=self.homepage,
                title="Inline page",
                content_type=content_type_2,
            )

            TestPageContentWithFields.objects.create(page=inline_page, )

            inline_model = TestInlineModel.objects.create(page=inline_page, )

            request = self._build_request(method='POST')
            request.POST = dict(country_group=self.country_group.pk)
            response = self.page_admin.duplicate_for_country_group(
                request, page=inline_page.pk)
            self.assertEqual(
                Page.objects.filter(owner=inline_page,
                                    is_canonical_page=False).count(), 1)

            inline_page_clone = Page.objects.get(owner=inline_page,
                                                 is_canonical_page=False)

            self.assertEqual(inline_page_clone.testinlinemodel_set.count(), 1)