From 5ff94aa1f062b024e0ba8e6719f0541cbf8d11e2 Mon Sep 17 00:00:00 2001 From: Olivier Dalang Date: Sun, 13 Aug 2023 15:02:40 +0200 Subject: [PATCH] split in apps per test --- tests/contribute_to_meta/.gitignore | 1 + .../{migrations => apps}/__init__.py | 0 .../apps/modelsimple/__init__.py | 0 .../apps/modelsimple/migrations/__init__.py | 0 .../apps/modelsimple/models.py | 7 ++ .../apps/modelwithmeta/__init__.py | 0 .../apps/modelwithmeta/migrations/__init__.py | 0 .../apps/modelwithmeta/models.py | 10 +++ .../contribute_to_meta/migrations/.gitignore | 1 - tests/contribute_to_meta/models.py | 14 ---- tests/contribute_to_meta/tests.py | 69 ++++++++++--------- 11 files changed, 53 insertions(+), 49 deletions(-) create mode 100644 tests/contribute_to_meta/.gitignore rename tests/contribute_to_meta/{migrations => apps}/__init__.py (100%) create mode 100644 tests/contribute_to_meta/apps/modelsimple/__init__.py create mode 100644 tests/contribute_to_meta/apps/modelsimple/migrations/__init__.py create mode 100644 tests/contribute_to_meta/apps/modelsimple/models.py create mode 100644 tests/contribute_to_meta/apps/modelwithmeta/__init__.py create mode 100644 tests/contribute_to_meta/apps/modelwithmeta/migrations/__init__.py create mode 100644 tests/contribute_to_meta/apps/modelwithmeta/models.py delete mode 100644 tests/contribute_to_meta/migrations/.gitignore delete mode 100644 tests/contribute_to_meta/models.py diff --git a/tests/contribute_to_meta/.gitignore b/tests/contribute_to_meta/.gitignore new file mode 100644 index 0000000000..7977c5f930 --- /dev/null +++ b/tests/contribute_to_meta/.gitignore @@ -0,0 +1 @@ +apps/*/migrations/0001_initial.py diff --git a/tests/contribute_to_meta/migrations/__init__.py b/tests/contribute_to_meta/apps/__init__.py similarity index 100% rename from tests/contribute_to_meta/migrations/__init__.py rename to tests/contribute_to_meta/apps/__init__.py diff --git a/tests/contribute_to_meta/apps/modelsimple/__init__.py b/tests/contribute_to_meta/apps/modelsimple/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/contribute_to_meta/apps/modelsimple/migrations/__init__.py b/tests/contribute_to_meta/apps/modelsimple/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/contribute_to_meta/apps/modelsimple/models.py b/tests/contribute_to_meta/apps/modelsimple/models.py new file mode 100644 index 0000000000..15360e64d2 --- /dev/null +++ b/tests/contribute_to_meta/apps/modelsimple/models.py @@ -0,0 +1,7 @@ +from django.db import models + +from ...fields import ConstraintField + + +class Model(models.Model): + field = ConstraintField(max_length=10) diff --git a/tests/contribute_to_meta/apps/modelwithmeta/__init__.py b/tests/contribute_to_meta/apps/modelwithmeta/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/contribute_to_meta/apps/modelwithmeta/migrations/__init__.py b/tests/contribute_to_meta/apps/modelwithmeta/migrations/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/contribute_to_meta/apps/modelwithmeta/models.py b/tests/contribute_to_meta/apps/modelwithmeta/models.py new file mode 100644 index 0000000000..60c8d733d3 --- /dev/null +++ b/tests/contribute_to_meta/apps/modelwithmeta/models.py @@ -0,0 +1,10 @@ +from django.db import models + +from ...fields import ConstraintField + + +class Model(models.Model): + class Meta: + constraints = [] + + field = ConstraintField(max_length=10) diff --git a/tests/contribute_to_meta/migrations/.gitignore b/tests/contribute_to_meta/migrations/.gitignore deleted file mode 100644 index 26a35de2cd..0000000000 --- a/tests/contribute_to_meta/migrations/.gitignore +++ /dev/null @@ -1 +0,0 @@ -0001_initial.py diff --git a/tests/contribute_to_meta/models.py b/tests/contribute_to_meta/models.py deleted file mode 100644 index d680fa3574..0000000000 --- a/tests/contribute_to_meta/models.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.db import models - -from .fields import ConstraintField - - -class ModelA(models.Model): - field = ConstraintField(max_length=10) - - -class ModelC(models.Model): - class Meta: - constraints = [] - - field = ConstraintField(max_length=10) diff --git a/tests/contribute_to_meta/tests.py b/tests/contribute_to_meta/tests.py index 6613588a4b..68a36fadff 100644 --- a/tests/contribute_to_meta/tests.py +++ b/tests/contribute_to_meta/tests.py @@ -1,49 +1,50 @@ +from importlib import import_module from pathlib import Path from django.core.management import call_command from django.db import IntegrityError -from django.test import TestCase, skipUnlessDBFeature +from django.test import TransactionTestCase, override_settings, skipUnlessDBFeature -from .models import ModelA, ModelC +apps = [ + "contribute_to_meta.apps.modelsimple", + "contribute_to_meta.apps.modelwithmeta", +] +@override_settings(INSTALLED_APPS=apps) @skipUnlessDBFeature("supports_table_check_constraints") -class ConstraintsTests(TestCase): +class ConstraintsTests(TransactionTestCase): """Check that the constraints allow valid values and reject invalid ones""" - def test_ModelA_constraint(self): - ModelA.objects.create(field="valid") + available_apps = apps + + def _do_test(self, app_qualified_name): + app_name = app_qualified_name.split(".")[-1] + + # Reset the migrations + folder = Path(__file__).parent / "apps" / app_name / "migrations" + migration_path = folder / "0001_initial.py" + migration_path.unlink(missing_ok=True) + + # Run the migrations + call_command("makemigrations", app_name, "--verbosity", "0") + call_command("migrate", app_name, "--verbosity", "0") + + # Check that the constraint behaves as expected + Model = import_module(app_qualified_name).models.Model + Model.objects.create(field="valid") with self.assertRaises(IntegrityError): - ModelA.objects.create(field="invalid") + Model.objects.create(field="invalid") - def test_ModelC_constraint(self): - ModelC.objects.create(field="valid") - with self.assertRaises(IntegrityError): - ModelC.objects.create(field="invalid") - - -class ConstraintsMigrationsTests(TestCase): - """Check that migrations correctly generate the constraints""" - - @classmethod - def setUpClass(cls): - super().setUpClass() - # Clean and recreate migration files for further inspection - init_file = Path(__file__).parent / "migrations" / "0001_initial.py" - init_file.unlink(missing_ok=True) - call_command("makemigrations", verbosity=0) - cls.migration_content = init_file.read_text() - - def test_ModelA(self): - # check migration contents + # Check that the constraint is present in the migration file + migration_path = folder / "0001_initial.py" + content = migration_path.read_text() self.assertTrue( - "test_constraint_modela" in self.migration_content, - "Could not find constraint `test_constraint_modela` in migration", + "models.CheckConstraint" in content, f"No constraint in `{migration_path}`" ) - def test_ModelC(self): - # check migration contents - self.assertTrue( - "test_constraint_modelc" in self.migration_content, - "Could not find constraint `test_constraint_modelc` in migration", - ) + def test_modelsimple(self): + self._do_test("contribute_to_meta.apps.modelsimple") + + def test_modelwithmeta(self): + self._do_test("contribute_to_meta.apps.modelwithmeta")