From 694b2e1d6604fc22b80302eac4e8c13fca3ba3e8 Mon Sep 17 00:00:00 2001 From: Lova ANDRIARIMALALA <43842786+Xpirix@users.noreply.github.com> Date: Mon, 20 Nov 2023 11:23:59 +0300 Subject: [PATCH] Add support for renaming plugin name (#302) * Plugin rename management * Fix lint error for rename plugin * Add test for plugin renaming * Allow uploading new version without changing name --- qgis-app/plugins/forms.py | 5 +- .../0003_plugin_allow_update_name.py | 18 +++ qgis-app/plugins/models.py | 7 ++ qgis-app/plugins/tests/test_rename_plugin.py | 111 ++++++++++++++++++ .../tests/testfiles/valid_plugin_0.0.2.zip_ | Bin 0 -> 38483 bytes .../tests/testfiles/valid_plugin_0.0.3.zip_ | Bin 0 -> 38483 bytes qgis-app/plugins/views.py | 7 +- 7 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 qgis-app/plugins/migrations/0003_plugin_allow_update_name.py create mode 100644 qgis-app/plugins/tests/test_rename_plugin.py create mode 100644 qgis-app/plugins/tests/testfiles/valid_plugin_0.0.2.zip_ create mode 100644 qgis-app/plugins/tests/testfiles/valid_plugin_0.0.3.zip_ diff --git a/qgis-app/plugins/forms.py b/qgis-app/plugins/forms.py index 99dc804a..600986de 100644 --- a/qgis-app/plugins/forms.py +++ b/qgis-app/plugins/forms.py @@ -132,7 +132,8 @@ def clean(self): self.cleaned_data.get("version") ) self.instance.server = self.cleaned_data.get("server") - # Check plugin name + + # Check plugin folder name if ( self.cleaned_data.get("package_name") and self.cleaned_data.get("package_name") @@ -140,7 +141,7 @@ def clean(self): ): raise ValidationError( _( - "Plugin name mismatch: the plugin main folder name in the compressed file (%s) is different from the original plugin package name (%s)." + "Plugin folder name mismatch: the plugin main folder name in the compressed file (%s) is different from the original plugin package name (%s)." ) % ( self.cleaned_data.get("package_name"), diff --git a/qgis-app/plugins/migrations/0003_plugin_allow_update_name.py b/qgis-app/plugins/migrations/0003_plugin_allow_update_name.py new file mode 100644 index 00000000..dac62f7f --- /dev/null +++ b/qgis-app/plugins/migrations/0003_plugin_allow_update_name.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.25 on 2023-11-07 03:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('plugins', '0002_pluginversiondownload'), + ] + + operations = [ + migrations.AddField( + model_name='plugin', + name='allow_update_name', + field=models.BooleanField(default=False, help_text='Allow name in metadata.txt to update the plugin name', verbose_name='Allow update name'), + ), + ] diff --git a/qgis-app/plugins/models.py b/qgis-app/plugins/models.py index 7deee802..eeba37d2 100644 --- a/qgis-app/plugins/models.py +++ b/qgis-app/plugins/models.py @@ -350,6 +350,13 @@ class Plugin(models.Model): name = models.CharField( _("Name"), help_text=_("Must be unique"), max_length=256, unique=True ) + + allow_update_name = models.BooleanField( + _("Allow update name"), + help_text=_("Allow name in metadata.txt to update the plugin name"), + default=False + ) + description = models.TextField(_("Description")) about = models.TextField(_("About"), blank=False, null=True) diff --git a/qgis-app/plugins/tests/test_rename_plugin.py b/qgis-app/plugins/tests/test_rename_plugin.py new file mode 100644 index 00000000..d1eb890b --- /dev/null +++ b/qgis-app/plugins/tests/test_rename_plugin.py @@ -0,0 +1,111 @@ +import os +from unittest.mock import patch + +from django.urls import reverse +from django.test import Client, TestCase, override_settings +from django.contrib.auth.models import User +from django.core.files.uploadedfile import SimpleUploadedFile +from plugins.models import Plugin, PluginVersion +from plugins.forms import PluginVersionForm + +def do_nothing(*args, **kwargs): + pass + +TESTFILE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "testfiles")) + +class PluginRenameTestCase(TestCase): + fixtures = [ + "fixtures/styles.json", + "fixtures/auth.json", + "fixtures/simplemenu.json", + ] + + @override_settings(MEDIA_ROOT="api/tests") + def setUp(self): + self.client = Client() + self.url_upload = reverse('plugin_upload') + + # Create a test user + self.user = User.objects.create_user( + username='testuser', + password='testpassword', + email='test@example.com' + ) + + # Log in the test user + self.client.login(username='testuser', password='testpassword') + + # Upload a plugin for renaming test. + # This process is already tested in test_plugin_upload + valid_plugin = os.path.join(TESTFILE_DIR, "valid_plugin.zip_") + with open(valid_plugin, "rb") as file: + uploaded_file = SimpleUploadedFile( + "valid_plugin.zip_", file.read(), + content_type="application/zip") + + self.client.post(self.url_upload, { + 'package': uploaded_file, + }) + + self.plugin = Plugin.objects.get(name='Test Plugin') + self.plugin.name = "New name Test Plugin" + self.plugin.save() + + @patch("plugins.tasks.generate_plugins_xml.delay", new=do_nothing) + @patch("plugins.validator._check_url_link", new=do_nothing) + def test_plugin_rename(self): + """ + Test rename from a new plugin version + """ + package_name = self.plugin.package_name + self.url_add_version = reverse('version_create', args=[package_name]) + # Test GET request + response = self.client.get(self.url_add_version) + self.assertEqual(response.status_code, 200) + self.assertIsInstance(response.context['form'], PluginVersionForm) + + # Test POST request with invalid form data + response = self.client.post(self.url_add_version, {}) + self.assertEqual(response.status_code, 200) + self.assertFalse(response.context['form'].is_valid()) + + # Test POST request without allowing name from metadata + valid_plugin = os.path.join(TESTFILE_DIR, "valid_plugin_0.0.2.zip_") + with open(valid_plugin, "rb") as file: + uploaded_file = SimpleUploadedFile( + "valid_plugin_0.0.2.zip_", file.read(), + content_type="application/zip_") + + response = self.client.post(self.url_add_version, { + 'package': uploaded_file, + 'experimental': False, + 'changelog': '' + }) + self.assertEqual(response.status_code, 302) + self.assertTrue(PluginVersion.objects.filter( + plugin__name='New name Test Plugin', + version='0.0.2').exists() + ) + + # Test POST request with allowing name from metadata + self.plugin.allow_update_name = True + self.plugin.save() + + valid_plugin = os.path.join(TESTFILE_DIR, "valid_plugin_0.0.3.zip_") + with open(valid_plugin, "rb") as file: + uploaded_file = SimpleUploadedFile( + "valid_plugin_0.0.3.zip_", file.read(), + content_type="application/zip_") + response = self.client.post(self.url_add_version, { + 'package': uploaded_file, + 'experimental': False, + 'changelog': '' + }) + self.assertEqual(response.status_code, 302) + self.assertTrue(PluginVersion.objects.filter( + plugin__name='Test Plugin', + version='0.0.3').exists() + ) + + def tearDown(self): + self.client.logout() diff --git a/qgis-app/plugins/tests/testfiles/valid_plugin_0.0.2.zip_ b/qgis-app/plugins/tests/testfiles/valid_plugin_0.0.2.zip_ new file mode 100644 index 0000000000000000000000000000000000000000..c694809e1cacf44578d482b84899caad2bcb6ab1 GIT binary patch literal 38483 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 VV@h2B0P4p-Dg*!k1iz>M{U44EM_B*> literal 0 HcmV?d00001 diff --git a/qgis-app/plugins/tests/testfiles/valid_plugin_0.0.3.zip_ b/qgis-app/plugins/tests/testfiles/valid_plugin_0.0.3.zip_ new file mode 100644 index 0000000000000000000000000000000000000000..f838d489169f88e460388e644d1a8f0e1c59d0bd GIT binary patch literal 38483 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 UN?iZ|nukAXL;wIpzsLXmAFm=%;{X5v literal 0 HcmV?d00001 diff --git a/qgis-app/plugins/views.py b/qgis-app/plugins/views.py index a8939822..3e753ac6 100644 --- a/qgis-app/plugins/views.py +++ b/qgis-app/plugins/views.py @@ -879,8 +879,13 @@ def _main_plugin_update(request, plugin, form): """ Updates the main plugin object from version metadata """ + # Check if update name from metadata is allowed + metadata_fields = ["author", "email", "description", "about", "homepage", "tracker"] + if plugin.allow_update_name: + metadata_fields.insert(0, "name") + # Update plugin from metadata - for f in ["name", "author", "email", "description", "about", "homepage", "tracker"]: + for f in metadata_fields: if form.cleaned_data.get(f): setattr(plugin, f, form.cleaned_data.get(f))