import pytest from django.apps import apps from django.core.cache import cache from dynamic_models.utils import ModelRegistry from dynamic_models.models import ModelSchema, FieldSchema # pylint: disable=unused-argument,invalid-name TEST_APP_LABEL = 'dynamic_models' MODEL_REGISTRY = ModelRegistry(TEST_APP_LABEL) STATIC_MODELS = (ModelSchema, FieldSchema) @pytest.fixture(autouse=True) def cleanup_cache(): yield cache.clear() @pytest.fixture def model_registry(model_schema): return ModelRegistry(model_schema.app_label) @pytest.fixture(autouse=True) def cleanup_registry(): """ The app registry bleeds between tests. This fixture removes all dynamically declared models after each test. """ try: yield finally: app_config = apps.get_app_config(TEST_APP_LABEL) registered_models = app_config.get_models() apps.all_models[TEST_APP_LABEL].clear() apps.register_model(TEST_APP_LABEL, ModelSchema) apps.register_model(TEST_APP_LABEL, FieldSchema) @pytest.fixture def model_registry(model_schema): return ModelRegistry(model_schema.app_label) @pytest.fixture def unsaved_model_schema(db): return ModelSchema(name='unsaved model') @pytest.fixture def model_schema(db): return ModelSchema.objects.create(name='simple model') @pytest.fixture def another_model_schema(db): return ModelSchema.objects.create(name='another model') @pytest.fixture def field_schema(db, model_schema): return FieldSchema.objects.create( name='field', data_type='integer', model_schema=model_schema )