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()
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">')