def test_add_plugins_from_placeholder(self):
        version = factories.PageVersionFactory()
        source_placeholder = factories.PlaceholderFactory(source=version.content)
        target_placeholder = factories.PlaceholderFactory(source=version.content)
        poll = factories.PollFactory()

        plugin = add_plugin(
            source_placeholder, "PollPlugin", version.content.language, poll=poll
        )

        dt = datetime(2016, 6, 6, tzinfo=timezone.utc)
        with freeze_time(dt):
            endpoint = self.get_copy_plugin_uri(plugin)
            data = {
                "source_language": version.content.language,
                "source_placeholder_id": source_placeholder.pk,
                "target_language": version.content.language,
                "target_placeholder_id": target_placeholder.pk,
            }

            with self.login_user_context(self.get_superuser()):
                response = self.client.post(endpoint, data)
                self.assertEqual(response.status_code, 200)

        version = Version.objects.get(pk=version.pk)
        self.assertEqual(version.modified, dt)
    def test_cut_plugin(self):
        version = factories.PageVersionFactory()
        placeholder = factories.PlaceholderFactory(source=version.content)
        poll = factories.PollFactory()
        user_settings = UserSettings.objects.create(
            language=version.content.language,
            user=self.get_superuser(),
            clipboard=Placeholder.objects.create(slot="clipboard"),
        )

        plugin = add_plugin(
            placeholder, "PollPlugin", version.content.language, poll=poll
        )

        dt = datetime(2016, 6, 6, tzinfo=timezone.utc)
        with freeze_time(dt):
            endpoint = self.get_move_plugin_uri(plugin)
            data = {
                "plugin_id": plugin.pk,
                "target_language": version.content.language,
                "placeholder_id": user_settings.clipboard_id,
            }

            with self.login_user_context(self.get_superuser()):
                response = self.client.post(endpoint, data)
                self.assertEqual(response.status_code, 200)

        version = Version.objects.get(pk=version.pk)
        self.assertEqual(version.modified, dt)
    def test_copy_plugins_method_used(self):
        original_version = factories.PageVersionFactory()
        placeholder = factories.PlaceholderFactory(
            source=original_version.content)
        original_version.content.placeholders.add(placeholder)
        user = factories.UserFactory()

        with patch("djangocms_versioning.cms_config.Placeholder.copy_plugins"
                   ) as mocked_copy:
            new_version = original_version.copy(user)

        new_placeholder = new_version.content.placeholders.get()
        mocked_copy.assert_called_once_with(new_placeholder)
    def test_clear_placeholder(self):
        version = factories.PageVersionFactory()
        placeholder = factories.PlaceholderFactory(source=version.content)

        dt = datetime(2016, 6, 6, tzinfo=timezone.utc)
        with freeze_time(dt):
            endpoint = self.get_clear_placeholder_url(placeholder)

            with self.login_user_context(self.get_superuser()):
                response = self.client.post(endpoint, {"test": 0})
                self.assertEqual(response.status_code, 302)

        version = Version.objects.get(pk=version.pk)
        self.assertEqual(version.modified, dt)
    def test_text_plugins_are_copied(self):
        """The implementation of versioning for PageContent correctly
        copies text plugins
        """
        original_version = factories.PageVersionFactory()
        placeholder = factories.PlaceholderFactory(
            source=original_version.content)
        original_version.content.placeholders.add(placeholder)
        with freeze_time("2017-07-07"):
            # Make sure created in the past
            original_plugins = factories.TextPluginFactory.create_batch(
                2, placeholder=placeholder)
        user = factories.UserFactory()

        new_version = original_version.copy(user)

        new_plugins = new_version.content.placeholders.get().cmsplugin_set.all(
        )
        self.assertEqual(new_plugins.count(), 2)
        self.assertNotEqual(new_plugins[0].pk, original_plugins[0].pk)
        self.assertEqual(new_plugins[0].language, original_plugins[0].language)
        self.assertIsNone(new_plugins[0].parent)
        self.assertEqual(new_plugins[0].position, original_plugins[0].position)
        self.assertEqual(new_plugins[0].plugin_type,
                         original_plugins[0].plugin_type)
        self.assertEqual(
            new_plugins[0].djangocms_text_ckeditor_text.body,
            original_plugins[0].djangocms_text_ckeditor_text.body,
        )
        self.assertEqual(new_plugins[0].creation_date,
                         original_plugins[0].creation_date)
        self.assertEqual(new_plugins[0].changed_date, now())
        self.assertNotEqual(new_plugins[1].pk, original_plugins[1].pk)
        self.assertEqual(new_plugins[1].language, original_plugins[1].language)
        self.assertIsNone(new_plugins[1].parent)
        self.assertEqual(new_plugins[1].position, original_plugins[1].position)
        self.assertEqual(new_plugins[1].plugin_type,
                         original_plugins[1].plugin_type)
        self.assertEqual(
            new_plugins[1].djangocms_text_ckeditor_text.body,
            original_plugins[1].djangocms_text_ckeditor_text.body,
        )
        self.assertEqual(new_plugins[1].creation_date,
                         original_plugins[1].creation_date)
        self.assertEqual(new_plugins[1].changed_date, now())
    def test_add_plugin(self):
        version = factories.PageVersionFactory()
        placeholder = factories.PlaceholderFactory(source=version.content)
        poll = factories.PollFactory()
        dt = datetime(2016, 6, 6, tzinfo=timezone.utc)
        with freeze_time(dt):
            endpoint = self.get_add_plugin_uri(
                placeholder=placeholder,
                plugin_type="PollPlugin",
                language=version.content.language,
            )
            data = {"poll": poll.pk}

            with self.login_user_context(self.get_superuser()):
                response = self.client.post(endpoint, data)
                self.assertEqual(response.status_code, 200)
        version = Version.objects.get(pk=version.pk)
        self.assertEqual(version.modified, dt)