예제 #1
0
    def test_models_person_get_blogposts_public_person_page(self):
        """
        When a person is added on a draft blog post, the blog post should not be visible on
        the public person page until the blog post is published.
        """
        person = PersonFactory(should_publish=True)
        person_page = person.extended_object
        blog_post = BlogPostFactory(page_title="my title", should_publish=True)
        blog_post_page = blog_post.extended_object

        # Add a person to the blog post but don't publish the modification
        placeholder = blog_post_page.placeholders.get(slot="author")
        add_plugin(placeholder, PersonPlugin, "en", page=person_page)

        self.assertEqual(list(person.get_blogposts()), [blog_post])
        self.assertEqual(list(person.public_extension.get_blogposts()), [])

        # Now publish the modification and check that the blog post is displayed
        # on the public person page
        blog_post.extended_object.publish("en")
        self.assertEqual(list(person.public_extension.get_blogposts()),
                         [blog_post.public_extension])

        # If the blog post is unpublished, it should not be displayed on the public
        # page anymore
        blog_post_page.unpublish("en")
        self.assertEqual(list(person.get_blogposts()), [blog_post])
        self.assertEqual(list(person.public_extension.get_blogposts()), [])
예제 #2
0
 def test_models_person_get_blogposts_several_languages(self):
     """
     The blogposts should not be duplicated if they exist in several languages.
     """
     person = PersonFactory(should_publish=True)
     BlogPostFactory(
         page_title={
             "en": "my title",
             "fr": "mon titre"
         },
         fill_author=[person],
         should_publish=True,
     )
     self.assertEqual(BlogPost.objects.count(), 2)
     self.assertEqual(person.get_blogposts().count(), 1)
예제 #3
0
    def test_models_person_get_blogposts(self):
        """
        It should be possible to retrieve the list of related blogposts on the person
        instance. The number of queries should be minimal.
        """
        person = PersonFactory(should_publish=True)
        blogposts = BlogPostFactory.create_batch(2,
                                                 page_title="my title",
                                                 fill_author=[person],
                                                 should_publish=True)
        retrieved_blogposts = person.get_blogposts()

        with self.assertNumQueries(2):
            self.assertEqual(set(retrieved_blogposts), set(blogposts))

        with self.assertNumQueries(0):
            for blogpost in retrieved_blogposts:
                self.assertEqual(
                    blogpost.extended_object.prefetched_titles[0].title,
                    "my title")