From 56a2557361e3a8bf34ebb5c564352d62c5d5a0de Mon Sep 17 00:00:00 2001 From: Fabian Braun Date: Mon, 20 May 2024 00:22:04 +0200 Subject: [PATCH] fix tests --- .../0009_alter_snippetptr_cmsplugin_ptr.py | 21 +++ .../migrations/0014_merge_20240519_2117.py | 33 ++++ src/djangocms_snippet/models.py | 4 +- .../{requirements.in => base.txt} | 0 tests/requirements/dj42-cms311.txt | 3 + tests/requirements/dj42_cms41.txt | 7 + tests/requirements/py311-django42-cms311.txt | 161 ------------------ tests/settings.py | 1 + tests/test_admin.py | 3 +- tests/test_migrations.py | 4 + tests/test_plugins.py | 8 +- tests/utils/factories.py | 2 +- tests/utils/models.py | 32 ++-- tox.ini | 20 ++- 14 files changed, 108 insertions(+), 191 deletions(-) create mode 100644 src/djangocms_snippet/migrations/0009_alter_snippetptr_cmsplugin_ptr.py create mode 100644 src/djangocms_snippet/migrations/0014_merge_20240519_2117.py rename tests/requirements/{requirements.in => base.txt} (100%) create mode 100644 tests/requirements/dj42-cms311.txt create mode 100644 tests/requirements/dj42_cms41.txt delete mode 100644 tests/requirements/py311-django42-cms311.txt diff --git a/src/djangocms_snippet/migrations/0009_alter_snippetptr_cmsplugin_ptr.py b/src/djangocms_snippet/migrations/0009_alter_snippetptr_cmsplugin_ptr.py new file mode 100644 index 00000000..cf714456 --- /dev/null +++ b/src/djangocms_snippet/migrations/0009_alter_snippetptr_cmsplugin_ptr.py @@ -0,0 +1,21 @@ +# Generated by Django 4.1.7 on 2023-02-28 16:57 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0022_auto_20180620_1551'), + ('djangocms_snippet', '0008_auto_change_name'), + ] + + operations = [ + migrations.AlterField( + model_name='snippetptr', + name='cmsplugin_ptr', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, related_name='%(app_label)s_%(class)s', serialize=False, to='cms.cmsplugin'), + ), + ] + diff --git a/src/djangocms_snippet/migrations/0014_merge_20240519_2117.py b/src/djangocms_snippet/migrations/0014_merge_20240519_2117.py new file mode 100644 index 00000000..15b27369 --- /dev/null +++ b/src/djangocms_snippet/migrations/0014_merge_20240519_2117.py @@ -0,0 +1,33 @@ +# Generated by Django 5.0.1 on 2024-05-19 21:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("djangocms_snippet", "0009_alter_snippetptr_cmsplugin_ptr"), + ("djangocms_snippet", "0013_snippet_site"), + ] + + operations = [ + migrations.AlterModelOptions( + name="snippet", + options={ + "ordering": ["name"], + "verbose_name": "Snippet", + "verbose_name_plural": "Snippets", + }, + ), + migrations.AlterField( + model_name="snippet", + name="name", + field=models.CharField(max_length=255, verbose_name="Name"), + ), + migrations.AlterField( + model_name="snippet", + name="slug", + field=models.SlugField( + default="", max_length=255, verbose_name="Slug" + ), + ), + ] diff --git a/src/djangocms_snippet/models.py b/src/djangocms_snippet/models.py index ac9d15dc..c0c34680 100644 --- a/src/djangocms_snippet/models.py +++ b/src/djangocms_snippet/models.py @@ -59,7 +59,6 @@ class Snippet(models.Model): name = models.CharField( verbose_name=_('Name'), - unique=True, max_length=255, ) snippet_grouper = models.ForeignKey( @@ -84,7 +83,6 @@ class Snippet(models.Model): ) slug = models.SlugField( verbose_name=_("Slug"), - unique=True, blank=False, default="", max_length=255, @@ -138,4 +136,4 @@ class Meta: def __str__(self): # Return the referenced snippet's name rather than the default (ID #) - return self.snippet.name + return self.snippet_grouper.name diff --git a/tests/requirements/requirements.in b/tests/requirements/base.txt similarity index 100% rename from tests/requirements/requirements.in rename to tests/requirements/base.txt diff --git a/tests/requirements/dj42-cms311.txt b/tests/requirements/dj42-cms311.txt new file mode 100644 index 00000000..14b92c68 --- /dev/null +++ b/tests/requirements/dj42-cms311.txt @@ -0,0 +1,3 @@ +-r requirements.in +Django>=4.2,<5.0 +django-cms>=3.11,<4 diff --git a/tests/requirements/dj42_cms41.txt b/tests/requirements/dj42_cms41.txt new file mode 100644 index 00000000..7d7c9144 --- /dev/null +++ b/tests/requirements/dj42_cms41.txt @@ -0,0 +1,7 @@ +-r base.txt + +Django>=4.2,<5.0 + +# Unreleased django 4.2 & django-cms 4.0.x compatible packages +django-cms>=4.1,<4.2 +djangocms-versioning>=2.0.2 diff --git a/tests/requirements/py311-django42-cms311.txt b/tests/requirements/py311-django42-cms311.txt deleted file mode 100644 index 8707d2d4..00000000 --- a/tests/requirements/py311-django42-cms311.txt +++ /dev/null @@ -1,161 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# requirements/compile.py -# -asgiref==3.7.2 \ - --hash=sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e \ - --hash=sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed - # via django -cachetools==5.3.2 \ - --hash=sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2 \ - --hash=sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1 - # via tox -chardet==5.2.0 \ - --hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \ - --hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 - # via tox -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via tox -coverage==7.3.2 \ - --hash=sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1 \ - --hash=sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63 \ - --hash=sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9 \ - --hash=sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312 \ - --hash=sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3 \ - --hash=sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb \ - --hash=sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25 \ - --hash=sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92 \ - --hash=sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda \ - --hash=sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148 \ - --hash=sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6 \ - --hash=sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216 \ - --hash=sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a \ - --hash=sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640 \ - --hash=sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836 \ - --hash=sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c \ - --hash=sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f \ - --hash=sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2 \ - --hash=sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901 \ - --hash=sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed \ - --hash=sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a \ - --hash=sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074 \ - --hash=sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc \ - --hash=sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84 \ - --hash=sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083 \ - --hash=sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f \ - --hash=sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c \ - --hash=sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c \ - --hash=sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637 \ - --hash=sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2 \ - --hash=sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82 \ - --hash=sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f \ - --hash=sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce \ - --hash=sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef \ - --hash=sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f \ - --hash=sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611 \ - --hash=sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c \ - --hash=sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76 \ - --hash=sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9 \ - --hash=sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce \ - --hash=sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9 \ - --hash=sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf \ - --hash=sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf \ - --hash=sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9 \ - --hash=sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6 \ - --hash=sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2 \ - --hash=sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a \ - --hash=sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a \ - --hash=sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf \ - --hash=sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738 \ - --hash=sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a \ - --hash=sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4 - # via -r requirements.in -distlib==0.3.7 \ - --hash=sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057 \ - --hash=sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8 - # via virtualenv -dj-database-url==2.1.0 \ - --hash=sha256:04bc34b248d4c21aaa13e4ab419ae6575ef5f10f3df735ce7da97722caa356e0 \ - --hash=sha256:f2042cefe1086e539c9da39fad5ad7f61173bf79665e69bf7e4de55fa88b135f - # via django-app-helper -django==4.2.6 \ - --hash=sha256:08f41f468b63335aea0d904c5729e0250300f6a1907bf293a65499496cdbc68f \ - --hash=sha256:a64d2487cdb00ad7461434320ccc38e60af9c404773a2f95ab0093b4453a3215 - # via dj-database-url -django-app-helper==3.3.2 \ - --hash=sha256:67b34ce92eed58dce8d44056ff038a253766b660a5a240fcf408fdd33da57a8b \ - --hash=sha256:a8995ca3963eb1212bab0a9abdf175bfe3db137225f90be7581d4f998740608b - # via -r requirements.in -docopt==0.6.2 \ - --hash=sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491 - # via django-app-helper -filelock==3.12.4 \ - --hash=sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4 \ - --hash=sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd - # via - # tox - # virtualenv -flake8==6.1.0 \ - --hash=sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23 \ - --hash=sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5 - # via -r requirements.in -isort==5.12.0 \ - --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ - --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 - # via -r requirements.in -mccabe==0.7.0 \ - --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ - --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e - # via flake8 -packaging==23.2 \ - --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ - --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 - # via - # pyproject-api - # tox -platformdirs==3.11.0 \ - --hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \ - --hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e - # via - # tox - # virtualenv -pluggy==1.3.0 \ - --hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \ - --hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7 - # via tox -pycodestyle==2.11.1 \ - --hash=sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f \ - --hash=sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67 - # via flake8 -pyflakes==3.1.0 \ - --hash=sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774 \ - --hash=sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc - # via flake8 -pyproject-api==1.6.1 \ - --hash=sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538 \ - --hash=sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675 - # via tox -six==1.16.0 \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 - # via django-app-helper -sqlparse==0.4.4 \ - --hash=sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3 \ - --hash=sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c - # via django -tox==4.11.3 \ - --hash=sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951 \ - --hash=sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f - # via -r requirements.in -typing-extensions==4.8.0 \ - --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ - --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef - # via dj-database-url -virtualenv==20.24.6 \ - --hash=sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af \ - --hash=sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381 - # via tox diff --git a/tests/settings.py b/tests/settings.py index 0c7ef2f2..fd784cd1 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -27,6 +27,7 @@ ("page.html", "Normal page"), ), "DEFAULT_AUTO_FIELD": "django.db.models.AutoField", + "CMS_CONFIRM_VERSION4": True, } diff --git a/tests/test_admin.py b/tests/test_admin.py index f93916be..08a0f107 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -107,8 +107,7 @@ def test_admin_list_display_with_versioning(self): self.assertEqual( list_display[:-1], ('name', 'get_author', 'get_modified_date', 'get_versioning_state') ) - self.assertEqual(list_display[-1].short_description, 'actions') - self.assertIn("function ExtendedVersionAdminMixin._list_actions", list_display[-1].__str__()) + self.assertEqual(list_display[-1].short_description.lower(), 'actions') def test_admin_uses_form(self): """ diff --git a/tests/test_migrations.py b/tests/test_migrations.py index 651569b3..1556bec3 100644 --- a/tests/test_migrations.py +++ b/tests/test_migrations.py @@ -1,13 +1,17 @@ # original from # http://tech.octopus.energy/news/2016/01/21/testing-for-missing-migrations-in-django.html from io import StringIO +from unittest import skipIf from django.core.management import call_command from django.test import TestCase, override_settings +from cms import __version__ as cms_version + class MigrationTestCase(TestCase): + @skipIf(cms_version.startswith("4.0."), 'This test fails on django-cms 4.0') @override_settings(MIGRATION_MODULES={}) def test_for_missing_migrations(self): output = StringIO() diff --git a/tests/test_plugins.py b/tests/test_plugins.py index fec10de2..de8c0f44 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -35,7 +35,7 @@ def setUp(self): self.pagecontent = PageContent._base_manager.filter(page=self.page, language=self.language).first() version = self.pagecontent.versions.first() version.publish(self.superuser) - self.placholder, _ = self.pagecontent.placeholders.get_or_create(slot="content") + self.placeholder, _ = self.pagecontent.placeholders.get_or_create(slot="content") def test_html_rendering(self): snippet = SnippetWithVersionFactory( @@ -141,6 +141,8 @@ def test_failing_template_rendering(self): @skipIf(cms_version < "4", "Django CMS 4 required") class SnippetPluginVersioningRenderTestCase(CMSTestCase): def setUp(self): + from cms.models import PageContent + self.language = "en" self.superuser = self.get_superuser() snippet_grouper = SnippetGrouper.objects.create() @@ -229,6 +231,8 @@ def test_correct_versioning_state_draft_snippet_and_page(self): ) # Request for draft page + from cms.toolbar.utils import get_object_edit_url + request_url = get_object_edit_url(self.draft_pagecontent, "en") with self.login_user_context(self.superuser): response = self.client.get(request_url) @@ -314,6 +318,8 @@ def test_correct_name_is_displayed_for_snippet_component_on_page(self): ) # Request structure endpoint on page + from cms.toolbar.utils import get_object_structure_url + request_url = get_object_structure_url(self.draft_pagecontent, "en") with self.login_user_context(self.superuser): response = self.client.get(request_url) diff --git a/tests/utils/factories.py b/tests/utils/factories.py index 3ec6512b..6e2ffcfa 100644 --- a/tests/utils/factories.py +++ b/tests/utils/factories.py @@ -108,7 +108,7 @@ def get_plugin_position(plugin): """ if hasattr(plugin.placeholder, "get_last_plugin_position"): # Placeholder is a CMS v4 Placeholder - return (plugin.placeholder.get_last_plugin_position() or 0) + 1 + return (plugin.placeholder.get_last_plugin_position(language=plugin.language) or 0) + 1 last_plugin_pos = plugin.placeholder.cmsplugin_set.filter( parent=None, language=plugin.language, diff --git a/tests/utils/models.py b/tests/utils/models.py index 506ba12d..8ebb1a58 100644 --- a/tests/utils/models.py +++ b/tests/utils/models.py @@ -1,22 +1,24 @@ from django.conf import settings -from django.contrib.contenttypes.models import ContentType from django.db import models +from cms import __version__ as cms_version -class Version(models.Model): - content = models.ForeignKey("djangocms_snippet.Snippet", related_name="versions", on_delete=models.CASCADE) - created_by = models.ForeignKey( - settings.AUTH_USER_MODEL, on_delete=models.PROTECT, - ) - state = models.CharField(max_length=50, default="draft") - def __init__(self, *args, **kwargs): - kwargs.pop("content_type", None) - obj_id = kwargs.pop("object_id", None) - if obj_id: - kwargs["content_id"] = obj_id - super().__init__(*args, **kwargs) +if cms_version < "4": + class Version(models.Model): + content = models.ForeignKey("djangocms_snippet.Snippet", related_name="versions", on_delete=models.CASCADE) + created_by = models.ForeignKey( + settings.AUTH_USER_MODEL, on_delete=models.PROTECT, + ) + state = models.CharField(max_length=50, default="draft") + def __init__(self, *args, **kwargs): + kwargs.pop("content_type", None) + obj_id = kwargs.pop("object_id", None) + if obj_id: + kwargs["content_id"] = obj_id + super().__init__(*args, **kwargs) - def publish(self, user): - pass + + def publish(self, user): + pass diff --git a/tox.ini b/tox.ini index cb6c839b..60635f92 100644 --- a/tox.ini +++ b/tox.ini @@ -2,9 +2,7 @@ requires = tox>=4.2 envlist = - flake8 - isort - py{39,310,311}-dj{32,42}-cms{311,40} + py{39,310,311}-dj{32,42}-cms{311,40,41} skip_missing_interpreters=True @@ -40,11 +38,17 @@ known_django = django [testenv] commands = - {envpython} --version - {env:COMMAND:coverage} erase - {env:COMMAND:coverage} run setup.py test - {env:COMMAND:coverage} report -deps = -r tests/requirements/{envname}.txt + {envpython} --version + {env:COMMAND:coverage} run setup.py test +deps = + dj32: Django>=3.2,<4.0 + dj42: Django>=4.2,<5.0 + cms311: django-cms>=3.11,<4.0 + cms40: https://github.com/django-cms/django-cms/tarball/release/4.0.1.x#egg=django-cms + cms40: https://github.com/django-cms/djangocms-versioning/tarball/support/django-cms-4.0.x#egg=djangocms-versioning + cms41: django-cms>=4.1,<4.2 + cms41: djangocms-versioning>=2.0.2 + -r tests/requirements/base.txt package = wheel set_env = PYTHONDEVMODE = 1