示例#1
0
    def test_multisite_apphooks(self):
        self.apphook_clear()
        site1, _ = Site.objects.get_or_create(pk=1)
        site2, _ = Site.objects.get_or_create(pk=2)
        superuser = get_user_model().objects.create_superuser('admin', '*****@*****.**', 'admin')
        home_site_1 = create_page(
            "home", "nav_playground.html", "en", created_by=superuser, published=True, site=site1
        )
        home_site_2 = create_page(
            "home", "nav_playground.html", "de", created_by=superuser, published=True, site=site2
        )

        page_1 = create_page(
            "apphooked-page", "nav_playground.html", "en", created_by=superuser, published=True, parent=home_site_1,
            apphook=NS_APP_NAME, apphook_namespace="instance"
        )
        page_2_1 = create_page(
            "apphooked-page", "nav_playground.html", "de", created_by=superuser, published=True, parent=home_site_2,
            site=site1
        )
        page_2_2 = create_page(
            "apphooked-page", "nav_playground.html", "de", created_by=superuser, published=True, parent=home_site_2,
            site=site2
        )
        form = AdvancedSettingsForm(instance=page_1)
        self.assertFalse(form._check_unique_namespace_instance("instance"))

        form = AdvancedSettingsForm(instance=page_2_1)
        self.assertTrue(form._check_unique_namespace_instance("instance"))

        form = AdvancedSettingsForm(instance=page_2_2)
        self.assertFalse(form._check_unique_namespace_instance("instance"))

        self.apphook_clear()
示例#2
0
 def test_existing_overwrite_url(self):
     with SettingsOverride(CMS_PERMISSION=False):
         create_page('home', 'nav_playground.html', 'en', published=True)
         create_page('boo', 'nav_playground.html', 'en', published=True)
         data = {
             'title': 'foo',
             'overwrite_url': '/boo/',
             'slug': 'foo',
             'language': 'en',
             'template': 'nav_playground.html',
             'site': 1,
         }
         form = AdvancedSettingsForm(data)
         self.assertFalse(form.is_valid())
         self.assertTrue('overwrite_url' in form.errors)
示例#3
0
 def test_existing_overwrite_url(self):
     with SettingsOverride(CMS_PERMISSION=False):
         create_page('home', 'nav_playground.html', 'en', published=True)
         create_page('boo', 'nav_playground.html', 'en', published=True)
         data = {
             'title': 'foo',
             'overwrite_url': '/boo/',
             'slug': 'foo',
             'language': 'en',
             'template': 'nav_playground.html',
             'site': 1,
         }
         form = AdvancedSettingsForm(data)
         self.assertFalse(form.is_valid())
         self.assertTrue('overwrite_url' in form.errors)
    def test_reverse_id_error_location(self):
        ''' Test moving the reverse_id validation error to a field specific one '''

        # this is the Reverse ID we'll re-use to break things.
        dupe_id = 'p1'
        site = Site.objects.get_current()
        page1 = create_page('Page 1', 'nav_playground.html', 'en', reverse_id=dupe_id)
        page2 = create_page('Page 2', 'nav_playground.html', 'en')
        # Assemble a bunch of data to test the page form
        page2_data = {
            'language': 'en',
            'site': site.pk,
            'reverse_id': dupe_id,
            'template': 'col_two.html',
        }
        form = AdvancedSettingsForm(data=page2_data, files=None)
        self.assertFalse(form.is_valid())

        # reverse_id is the only item that is in __all__ as every other field
        # has it's own clean method. Moving it to be a field error means
        # __all__ is now not available.
        self.assertNotIn('__all__', form.errors)
        # In moving it to it's own field, it should be in form.errors, and
        # the values contained therein should match these.
        self.assertIn('reverse_id', form.errors)
        self.assertEqual(1, len(form.errors['reverse_id']))
        self.assertEqual([u'A page with this reverse URL id exists already.'],
                         form.errors['reverse_id'])
        page2_data['reverse_id'] = ""

        form = AdvancedSettingsForm(data=page2_data, files=None)
        self.assertTrue(form.is_valid())
        admin = self._get_guys(admin_only=True)
        # reset some of page2_data so we can use cms.api.create_page
        page2 = page2.reload()
        page2.site = site
        page2.save()
        with self.login_user_context(admin):
            # re-reset the page2_data for the admin form instance.
            page2_data['reverse_id'] = dupe_id
            page2_data['site'] = site.pk

            # post to the admin change form for page 2, and test that the
            # reverse_id form row has an errors class. Django's admin avoids
            # collapsing these, so that the error is visible.
            resp = self.client.post(base.URL_CMS_PAGE_ADVANCED_CHANGE % page2.pk, page2_data)
            self.assertContains(resp, '<div class="form-row errors reverse_id">')