def test_get_moderated_children_from_placeholder_gets_plugin_with_m2m_fields(
            self):
        """
        FIXME: Currently only checks that a M2M nested poll entry does not cause an error.
        """
        pg_version = PageVersionFactory(created_by=self.user)
        language = pg_version.content.language
        placeholder = PlaceholderFactory(source=pg_version.content)
        poll_1_version = PollVersionFactory(created_by=self.user,
                                            content__language=language)
        poll_2_version = PollVersionFactory(created_by=self.user,
                                            content__language=language)
        ManytoManyPollPluginFactory(placeholder=placeholder,
                                    polls=[
                                        poll_1_version.content.poll,
                                        poll_2_version.content.poll,
                                    ])

        moderated_children = list(
            get_moderated_children_from_placeholder(
                placeholder, {"language": pg_version.content.language}))

        # FIXME:
        #       This test is only covering that the M2M field doesn't cause an error.
        #       It should see that the nested polls are found
        #       self.assertEqual(moderated_children, [poll_1_version, poll_2_version])
        self.assertEqual(moderated_children, [])
    def test_get_moderated_children_from_placeholder_has_only_registered_model(
            self):
        """
        The moderated model is the only model registered with moderation
        """
        pg_version = PageVersionFactory(created_by=self.user)
        language = pg_version.content.language

        # Populate page
        placeholder = PlaceholderFactory(source=pg_version.content)
        # Moderated plugin
        poll_version = PollVersionFactory(created_by=self.user,
                                          content__language=language)
        PollPluginFactory(placeholder=placeholder,
                          poll=poll_version.content.poll)
        # None moderated plugin
        none_moderated_poll_version = NoneModeratedPollVersionFactory(
            created_by=self.user, content__language=language)
        NoneModeratedPollPluginFactory(
            placeholder=placeholder,
            poll=none_moderated_poll_version.content.poll)

        moderated_children = list(
            get_moderated_children_from_placeholder(
                placeholder, {"language": pg_version.content.language}))

        self.assertEqual(moderated_children, [poll_version])
    def test_get_moderated_children_from_placeholder_gets_correct_versions(
            self):
        """
        Models from a page with two different languages are filtered correctly
        """
        language_1 = "en"
        language_2 = "fr"
        # Populate page 1
        pg_1_version = PageVersionFactory(created_by=self.user,
                                          content__language=language_1)
        pg_1_placeholder = PlaceholderFactory(source=pg_1_version.content)
        pg_1_poll_version = PollVersionFactory(created_by=self.user,
                                               content__language=language_1)
        PollPluginFactory(placeholder=pg_1_placeholder,
                          poll=pg_1_poll_version.content.poll)
        # Populate page 2
        pg_2_version = PageVersionFactory(
            created_by=self.user,
            content__language=language_2,
            content__page=pg_1_version.grouper,
        )
        pg_2_placeholder = PlaceholderFactory(source=pg_2_version.content)
        pg_2_poll_version = PollVersionFactory(created_by=self.user,
                                               content__language=language_2)
        PollPluginFactory(placeholder=pg_2_placeholder,
                          poll=pg_2_poll_version.content.poll)

        page_1_moderated_children = list(
            get_moderated_children_from_placeholder(
                pg_1_placeholder, {"language": pg_1_version.content.language}))
        page_2_moderated_children = list(
            get_moderated_children_from_placeholder(
                pg_2_placeholder, {"language": pg_2_version.content.language}))

        self.assertEqual(page_1_moderated_children, [pg_1_poll_version])
        self.assertEqual(page_2_moderated_children, [pg_2_poll_version])
    def test_get_moderated_children_from_placeholder_gets_nested_models(self):
        """
        Versionable models that are nested inside a custom plugin model
        can be found when adding to a collection.
        """
        pg_version = PageVersionFactory(created_by=self.user)
        language = pg_version.content.language

        # Populate page
        placeholder = PlaceholderFactory(source=pg_version.content)
        # Moderated plugin
        poll_version = PollVersionFactory(created_by=self.user,
                                          content__language=language)
        # Nested versioned poll
        NestedPollPluginFactory(placeholder=placeholder,
                                nested_poll__poll=poll_version.content.poll)

        moderated_children = list(
            get_moderated_children_from_placeholder(
                placeholder, {"language": pg_version.content.language}))

        self.assertEqual(moderated_children, [poll_version])