def setUp(self): disconnect_entry_signals() disconnect_discussion_signals() self.site = Site.objects.get_current() self.author = Author.objects.create_user(username='******', email='*****@*****.**', password='******') self.category = Category.objects.create(title='Tests', slug='tests') params = { 'title': 'Test 1', 'content': 'First test entry published', 'slug': 'test-1', 'tags': 'tests', 'creation_date': datetime(2010, 1, 1, 23, 00), 'status': PUBLISHED } entry = Entry.objects.create(**params) entry.sites.add(self.site) entry.categories.add(self.category) entry.authors.add(self.author) self.first_entry = entry params = { 'title': 'Test 2', 'content': 'Second test entry published', 'slug': 'test-2', 'tags': 'tests', 'creation_date': datetime(2010, 5, 31, 23, 00), 'status': PUBLISHED } entry = Entry.objects.create(**params) entry.sites.add(self.site) entry.categories.add(self.category) entry.authors.add(self.author) self.second_entry = entry
def test_previous_next_entry_in_one_query(self): site = Site.objects.get_current() self.entry.status = PUBLISHED self.entry.save() self.entry.sites.add(site) with self.assertNumQueries(1): self.assertFalse(self.entry.previous_entry) self.assertFalse(self.entry.next_entry) # Reload to check the cache self.assertFalse(self.entry.previous_entry) self.assertFalse(self.entry.next_entry) params = {'title': 'My second entry', 'content': 'My second content', 'slug': 'my-second-entry', 'creation_date': datetime(2001, 1, 1), 'status': PUBLISHED} self.second_entry = Entry.objects.create(**params) self.second_entry.sites.add(site) params = {'title': 'My third entry', 'content': 'My third content', 'slug': 'my-third-entry', 'creation_date': datetime(2050, 1, 1), 'status': PUBLISHED} self.third_entry = Entry.objects.create(**params) self.third_entry.sites.add(site) del self.entry.previous_next # Invalidate the cached property with self.assertNumQueries(1): self.assertEqual(self.entry.previous_entry, self.second_entry) self.assertEqual(self.entry.next_entry, self.third_entry) # Reload to check the cache self.assertEqual(self.entry.previous_entry, self.second_entry) self.assertEqual(self.entry.next_entry, self.third_entry)
def test_is_actual(self): self.assertTrue(self.entry.is_actual) self.entry.start_publication = datetime(2020, 3, 15) self.assertFalse(self.entry.is_actual) self.entry.start_publication = timezone.now() self.assertTrue(self.entry.is_actual) self.entry.end_publication = datetime(2000, 3, 15) self.assertFalse(self.entry.is_actual)
def test_edit_post(self): post = post_structure(self.entry_2, self.site) self.assertRaises(Fault, self.server.metaWeblog.editPost, 1, 'contributor', 'password', post, 1) new_post_id = self.server.metaWeblog.newPost( 1, 'webmaster', 'password', post, 0) entry = Entry.objects.get(pk=new_post_id) self.assertEqual(entry.title, self.entry_2.title) self.assertEqual(entry.content, self.entry_2.html_content) self.assertEqual(entry.excerpt, self.entry_2.excerpt) self.assertEqual(entry.slug, self.entry_2.slug) self.assertEqual(entry.status, DRAFT) self.assertEqual(entry.password, self.entry_2.password) self.assertEqual(entry.comment_enabled, True) self.assertEqual(entry.pingback_enabled, True) self.assertEqual(entry.categories.count(), 1) self.assertEqual(entry.authors.count(), 1) self.assertEqual(entry.authors.all()[0], self.webmaster) self.assertEqual(entry.creation_date, self.entry_2.creation_date) entry.title = 'Title edited' entry.creation_date = datetime(2000, 1, 1) post = post_structure(entry, self.site) post['categories'] = '' post['description'] = 'Content edited' post['mt_excerpt'] = 'Content edited' post['wp_slug'] = 'slug-edited' post['wp_password'] = '******' post['mt_allow_comments'] = 2 post['mt_allow_pings'] = 0 response = self.server.metaWeblog.editPost( new_post_id, 'webmaster', 'password', post, 1) self.assertEqual(response, True) entry = Entry.objects.get(pk=new_post_id) self.assertEqual(entry.title, post['title']) self.assertEqual(entry.content, post['description']) self.assertEqual(entry.excerpt, post['mt_excerpt']) self.assertEqual(entry.slug, 'slug-edited') self.assertEqual(entry.status, PUBLISHED) self.assertEqual(entry.password, 'password') self.assertEqual(entry.comment_enabled, False) self.assertEqual(entry.pingback_enabled, False) self.assertEqual(entry.categories.count(), 0) self.assertEqual(entry.creation_date, datetime(2000, 1, 1)) del post['dateCreated'] post['wp_author_id'] = self.contributor.pk response = self.server.metaWeblog.editPost( new_post_id, 'webmaster', 'password', post, 1) entry = Entry.objects.get(pk=new_post_id) self.assertEqual(entry.authors.count(), 1) self.assertEqual(entry.authors.all()[0], self.contributor) self.assertEqual(entry.creation_date, datetime(2000, 1, 1))
def setUp(self): disconnect_entry_signals() disconnect_discussion_signals() # Clean the memoization of user flagger to avoid error on MySQL try: del user_flagger_[()] except KeyError: pass # Use default URL shortener backend, to avoid networks errors self.original_shortener = shortener_settings.URL_SHORTENER_BACKEND shortener_settings.URL_SHORTENER_BACKEND = 'events.url_shortener.'\ 'backends.default' # Set up a stub around urlopen import zinnia.xmlrpc.pingback self.original_urlopen = zinnia.xmlrpc.pingback.urlopen zinnia.xmlrpc.pingback.urlopen = self.fake_urlopen # Set a short template for entry_detail to avoid rendering errors setup_test_template_loader( {'events/entry_detail.html': '<html><head><title>{{ object.title }}</title></head>' '<body>{{ object.html_content|safe }}</body></html>', '404.html': '404'}) # Preparing site self.site = Site.objects.get_current() # Creating tests entries self.author = Author.objects.create_user(username='******', email='*****@*****.**') self.category = Category.objects.create(title='test', slug='test') params = {'title': 'My first entry', 'content': 'My first content', 'slug': 'my-first-entry', 'creation_date': datetime(2010, 1, 1, 12), 'status': PUBLISHED} self.first_entry = Entry.objects.create(**params) self.first_entry.sites.add(self.site) self.first_entry.categories.add(self.category) self.first_entry.authors.add(self.author) params = {'title': 'My second entry', 'content': 'My second content with link ' 'to <a href="http://%s%s">first entry</a>' ' and other links : %s %s.' % ( self.site.domain, self.first_entry.get_absolute_url(), 'http://example.com/error-404/', 'http://external/'), 'slug': 'my-second-entry', 'creation_date': datetime(2010, 1, 1, 12), 'status': PUBLISHED} self.second_entry = Entry.objects.create(**params) self.second_entry.sites.add(self.site) self.second_entry.categories.add(self.category) self.second_entry.authors.add(self.author) # Instanciating the server proxy self.server = ServerProxy('http://example.com/xmlrpc/', transport=TestTransport())
def test_feed_discussions_with_timezone_issue_277(self): entry = self.create_published_entry() entry.creation_date = datetime(2014, 1, 1, 23) entry.save() feed = EntryDiscussions() self.assertEqual(feed.get_object('request', 2014, 1, 2, entry.slug), entry)
def test_discussion_feed_with_same_slugs(self): """ https://github.com/Fantomas42/django-blog-zinnia/issues/104 OK, Here I will reproduce the original case: getting a discussion type feed, with a same slug. The correction of this case, will need some changes in the get_object method. """ entry = self.create_published_entry() feed = EntryDiscussions() self.assertEqual(feed.get_object('request', 2010, 1, 1, entry.slug), entry) params = { 'title': 'My test entry, part II', 'content': 'My content ', 'slug': 'my-test-entry', 'tags': 'tests', 'creation_date': datetime(2010, 2, 1, 12), 'status': PUBLISHED } entry_same_slug = Entry.objects.create(**params) entry_same_slug.sites.add(self.site) entry_same_slug.authors.add(self.author) self.assertEqual( feed.get_object('request', 2010, 2, 1, entry_same_slug.slug), entry_same_slug)
def test_zinnia_entry_archive_month_with_timezone(self): self.inhibit_templates( 'events/archives/2010/month/01/entry_archive_month.html', 'events/entry_archive_month.html') response = self.check_publishing_context('/2010/01/', 1, 2, 'entry_list', 3) self.assertTemplateUsed( response, 'events/archives/2010/month/01/entry_archive_month.html') self.assertEqual(response.context['previous_month'], None) self.assertEqual(response.context['next_month'], date(2010, 6, 1)) self.assertEqual(response.context['date_list'][0].date(), datetime(2010, 1, 2).date()) response = self.client.get('/2010/06/') self.assertEqual(response.context['previous_month'], date(2010, 1, 1)) self.assertEqual(response.context['next_month'], None) self.assertEqual(response.context['date_list'][0].date(), datetime(2010, 6, 1).date())
def test_entries_published(self): self.assertEqual(entries_published(Entry.objects.all()).count(), 1) self.entry_2.status = PUBLISHED self.entry_2.save() self.assertEqual(entries_published(Entry.objects.all()).count(), 2) self.entry_1.sites.clear() self.assertEqual(entries_published(Entry.objects.all()).count(), 1) self.entry_1.sites.add(*self.sites) self.entry_1.start_publication = datetime(2020, 1, 1) self.entry_1.save() self.assertEqual(entries_published(Entry.objects.all()).count(), 1) self.entry_1.start_publication = datetime(2000, 1, 1) self.entry_1.save() self.assertEqual(entries_published(Entry.objects.all()).count(), 2) self.entry_1.end_publication = datetime(2000, 1, 1) self.entry_1.save() self.assertEqual(entries_published(Entry.objects.all()).count(), 1) self.entry_1.end_publication = datetime(2020, 1, 1) self.entry_1.save() self.assertEqual(entries_published(Entry.objects.all()).count(), 2)
def test_entry_published_manager_get_query_set(self): self.assertEqual(Entry.published.count(), 1) self.entry_2.status = PUBLISHED self.entry_2.save() self.assertEqual(Entry.published.count(), 2) self.entry_1.sites.clear() self.assertEqual(Entry.published.count(), 1) self.entry_1.sites.add(*self.sites) self.entry_1.start_publication = datetime(2020, 1, 1) self.entry_1.save() self.assertEqual(Entry.published.count(), 1) self.entry_1.start_publication = datetime(2000, 1, 1) self.entry_1.save() self.assertEqual(Entry.published.count(), 2) self.entry_1.end_publication = datetime(2000, 1, 1) self.entry_1.save() self.assertEqual(Entry.published.count(), 1) self.entry_1.end_publication = datetime(2020, 1, 1) self.entry_1.save() self.assertEqual(Entry.published.count(), 2)
def test_put_on_top(self): original_ping_directories = settings.PING_DIRECTORIES settings.PING_DIRECTORIES = [] self.request._messages = TestMessageBackend() self.entry.creation_date = datetime(2011, 1, 1, 12, 0) self.admin.put_on_top(self.request, Entry.objects.all()) self.assertEqual( Entry.objects.get(pk=self.entry.pk).creation_date.date(), timezone.now().date()) self.assertEqual(len(self.request._messages.messages), 1) settings.PING_DIRECTORIES = original_ping_directories
def create_published_entry(self): params = { 'title': 'My test entry', 'content': 'My test content', 'slug': 'my-test-entry', 'tags': 'tests', 'creation_date': datetime(2010, 1, 1, 23, 0), 'status': PUBLISHED } entry = Entry.objects.create(**params) entry.sites.add(self.site) entry.categories.add(self.category) entry.authors.add(self.author) return entry
def test_next_entry(self): site = Site.objects.get_current() with self.assertNumQueries(0): # entry.next_entry does not works until entry # is published, so no query should be performed self.assertFalse(self.entry.previous_entry) self.entry.status = PUBLISHED self.entry.save() self.entry.sites.add(site) del self.entry.previous_next # Invalidate the cached property with self.assertNumQueries(1): self.assertFalse(self.entry.next_entry) # Reload to check the cache self.assertFalse(self.entry.next_entry) params = {'title': 'My second entry', 'content': 'My second content', 'slug': 'my-second-entry', 'creation_date': datetime(2100, 1, 1), 'status': PUBLISHED} self.second_entry = Entry.objects.create(**params) self.second_entry.sites.add(site) del self.entry.previous_next # Invalidate the cached property with self.assertNumQueries(1): self.assertEqual(self.entry.next_entry, self.second_entry) # Reload to check the cache self.assertEqual(self.entry.next_entry, self.second_entry) params = {'title': 'My third entry', 'content': 'My third content', 'slug': 'my-third-entry', 'creation_date': datetime(2050, 1, 1), 'status': PUBLISHED} self.third_entry = Entry.objects.create(**params) self.third_entry.sites.add(site) del self.entry.previous_next # Invalidate the cached property self.assertEqual(self.entry.next_entry, self.third_entry) self.assertEqual(self.third_entry.next_entry, self.second_entry) self.assertFalse(self.second_entry.next_entry)
def setUp(self): disconnect_entry_signals() # Create data self.webmaster = Author.objects.create_superuser( username='******', email='*****@*****.**', password='******') self.contributor = Author.objects.create_user( username='******', email='*****@*****.**', password='******') self.site = Site.objects.get_current() self.categories = [ Category.objects.create(title='Category 1', slug='category-1'), Category.objects.create(title='Category 2', slug='category-2')] params = {'title': 'My entry 1', 'content': 'My content 1', 'tags': 'events, test', 'slug': 'my-entry-1', 'creation_date': datetime(2010, 1, 1, 12), 'status': PUBLISHED} self.entry_1 = Entry.objects.create(**params) self.entry_1.authors.add(self.webmaster) self.entry_1.categories.add(*self.categories) self.entry_1.sites.add(self.site) params = {'title': 'My entry 2', 'content': 'My content 2', 'creation_date': datetime(2010, 3, 15), 'tags': 'events, test', 'slug': 'my-entry-2'} self.entry_2 = Entry.objects.create(**params) self.entry_2.authors.add(self.webmaster) self.entry_2.categories.add(self.categories[0]) self.entry_2.sites.add(self.site) # Instanciating the server proxy self.server = ServerProxy('http://localhost:8000/xmlrpc/', transport=TestTransport())
def test_zinnia_tag_detail_paginated(self): self.inhibit_templates('events/entry_list.html') for i in range(PAGINATION): params = { 'title': 'My entry %i' % i, 'content': 'My content %i' % i, 'slug': 'my-entry-%i' % i, 'tags': 'tests', 'creation_date': datetime(2010, 1, 1), 'status': PUBLISHED } entry = Entry.objects.create(**params) entry.sites.add(self.site) response = self.client.get('/tags/tests/') self.assertEqual(len(response.context['object_list']), PAGINATION) response = self.client.get('/tags/tests/?page=2') self.assertEqual(len(response.context['object_list']), 2) response = self.client.get('/tags/tests/page/2/') self.assertEqual(len(response.context['object_list']), 2) self.assertEqual(response.context['tag'].name, 'tests')
def test_zinnia_category_detail_paginated(self): """Test case reproducing issue #42 on category detail view paginated""" self.inhibit_templates('events/entry_list.html') for i in range(PAGINATION): params = { 'title': 'My entry %i' % i, 'content': 'My content %i' % i, 'slug': 'my-entry-%i' % i, 'creation_date': datetime(2010, 1, 1), 'status': PUBLISHED } entry = Entry.objects.create(**params) entry.sites.add(self.site) entry.categories.add(self.category) response = self.client.get('/categories/tests/') self.assertEqual(len(response.context['object_list']), PAGINATION) response = self.client.get('/categories/tests/?page=2') self.assertEqual(len(response.context['object_list']), 2) response = self.client.get('/categories/tests/page/2/') self.assertEqual(len(response.context['object_list']), 2) self.assertEqual(response.context['category'].slug, 'tests')
def test_zinnia_entry_archive_week_with_timezone(self): self.inhibit_templates( 'events/archives/2010/week/00/entry_archive_week.html', 'events/entry_archive_week.html') response = self.check_publishing_context('/2010/week/00/', 1, 2, 'entry_list', 3) self.assertTemplateUsed( response, 'events/archives/2010/week/00/entry_archive_week.html') # All days in a new year preceding the first Monday # are considered to be in week 0. self.assertEqual(response.context['week'], date(2009, 12, 28)) self.assertEqual(response.context['week_end_day'], date(2010, 1, 3)) self.assertEqual(response.context['previous_week'], None) self.assertEqual(response.context['next_week'], date(2010, 5, 31)) self.assertEqual(response.context['date_list'][0].date(), datetime(2010, 1, 2).date()) response = self.client.get('/2011/week/01/') self.assertEqual(response.context['week'], date(2011, 1, 3)) self.assertEqual(response.context['week_end_day'], date(2011, 1, 9)) self.assertEqual(response.context['previous_week'], date(2010, 5, 31)) self.assertEqual(response.context['next_week'], None) self.assertEqual(list(response.context['date_list']), [])
def test_zinnia_author_detail_paginated(self): """Test case reproducing issue #207 on author detail view paginated""" self.inhibit_templates('events/entry_list.html') for i in range(PAGINATION): params = { 'title': 'My entry %i' % i, 'content': 'My content %i' % i, 'slug': 'my-entry-%i' % i, 'creation_date': datetime(2010, 1, 1), 'status': PUBLISHED } entry = Entry.objects.create(**params) entry.sites.add(self.site) entry.authors.add(self.author) response = self.client.get('/authors/admin/') self.assertEqual(len(response.context['object_list']), PAGINATION) response = self.client.get('/authors/admin/?page=2') self.assertEqual(len(response.context['object_list']), 2) response = self.client.get('/authors/admin/page/2/') self.assertEqual(len(response.context['object_list']), 2) self.assertEqual(response.context['author'].username, 'admin')
def test_get_absolute_url_with_timezone(self): self.check_get_absolute_url(datetime(2013, 1, 1, 12, 0), '/2013/01/01/my-entry/') self.check_get_absolute_url(datetime(2013, 1, 1, 23, 0), '/2013/01/02/my-entry/')
def test_is_visible(self): self.assertFalse(self.entry.is_visible) self.entry.status = PUBLISHED self.assertTrue(self.entry.is_visible) self.entry.start_publication = datetime(2020, 3, 15) self.assertFalse(self.entry.is_visible)
def test_previous_next_published_mixin(self): site = Site.objects.get_current() params = { 'title': 'Entry 1', 'content': 'Entry 1', 'slug': 'entry-1', 'status': PUBLISHED, 'creation_date': datetime(2012, 1, 1, 12) } entry_1 = Entry.objects.create(**params) entry_1.sites.add(site) params = { 'title': 'Entry 2', 'content': 'Entry 2', 'slug': 'entry-2', 'status': PUBLISHED, 'creation_date': datetime(2012, 3, 15, 12) } entry_2 = Entry.objects.create(**params) entry_2.sites.add(site) params = { 'title': 'Entry 3', 'content': 'Entry 3', 'slug': 'entry-3', 'status': PUBLISHED, 'creation_date': datetime(2013, 6, 2, 12) } entry_3 = Entry.objects.create(**params) entry_3.sites.add(site) class EntryPreviousNextPublished(PreviousNextPublishedMixin): def get_queryset(self): return Entry.published.all() test_date = datetime(2009, 12, 1) epnp = EntryPreviousNextPublished() self.assertEqual(epnp.get_previous_year(test_date), None) self.assertEqual(epnp.get_previous_week(test_date), None) self.assertEqual(epnp.get_previous_month(test_date), None) self.assertEqual(epnp.get_previous_day(test_date), None) self.assertEqual(epnp.get_next_year(test_date), date(2012, 1, 1)) self.assertEqual(epnp.get_next_week(test_date), date(2011, 12, 26)) self.assertEqual(epnp.get_next_month(test_date), date(2012, 1, 1)) self.assertEqual(epnp.get_next_day(test_date), date(2012, 1, 1)) test_date = datetime(2012, 1, 1) epnp = EntryPreviousNextPublished() self.assertEqual(epnp.get_previous_year(test_date), None) self.assertEqual(epnp.get_previous_week(test_date), None) self.assertEqual(epnp.get_previous_month(test_date), None) self.assertEqual(epnp.get_previous_day(test_date), None) self.assertEqual(epnp.get_next_year(test_date), date(2013, 1, 1)) self.assertEqual(epnp.get_next_week(test_date), date(2012, 3, 12)) self.assertEqual(epnp.get_next_month(test_date), date(2012, 3, 1)) self.assertEqual(epnp.get_next_day(test_date), date(2012, 3, 15)) test_date = datetime(2012, 3, 15) epnp = EntryPreviousNextPublished() self.assertEqual(epnp.get_previous_year(test_date), None) self.assertEqual(epnp.get_previous_week(test_date), date(2011, 12, 26)) self.assertEqual(epnp.get_previous_month(test_date), date(2012, 1, 1)) self.assertEqual(epnp.get_previous_day(test_date), date(2012, 1, 1)) self.assertEqual(epnp.get_next_year(test_date), date(2013, 1, 1)) self.assertEqual(epnp.get_next_week(test_date), date(2013, 5, 27)) self.assertEqual(epnp.get_next_month(test_date), date(2013, 6, 1)) self.assertEqual(epnp.get_next_day(test_date), date(2013, 6, 2)) test_date = datetime(2013, 6, 2) epnp = EntryPreviousNextPublished() self.assertEqual(epnp.get_previous_year(test_date), date(2012, 1, 1)) self.assertEqual(epnp.get_previous_week(test_date), date(2012, 3, 12)) self.assertEqual(epnp.get_previous_month(test_date), date(2012, 3, 1)) self.assertEqual(epnp.get_previous_day(test_date), date(2012, 3, 15)) self.assertEqual(epnp.get_next_year(test_date), None) self.assertEqual(epnp.get_next_week(test_date), None) self.assertEqual(epnp.get_next_month(test_date), None) self.assertEqual(epnp.get_next_day(test_date), None) test_date = datetime(2014, 5, 1) epnp = EntryPreviousNextPublished() self.assertEqual(epnp.get_previous_year(test_date), date(2013, 1, 1)) self.assertEqual(epnp.get_previous_week(test_date), date(2013, 5, 27)) self.assertEqual(epnp.get_previous_month(test_date), date(2013, 6, 1)) self.assertEqual(epnp.get_previous_day(test_date), date(2013, 6, 2)) self.assertEqual(epnp.get_next_year(test_date), None) self.assertEqual(epnp.get_next_week(test_date), None) self.assertEqual(epnp.get_next_month(test_date), None) self.assertEqual(epnp.get_next_day(test_date), None)