File tree 2 files changed +31
-1
lines changed
2 files changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -431,10 +431,16 @@ def finalize(self) -> None:
431
431
432
432
433
433
@pytest .fixture ()
434
- def settings ():
434
+ def settings (request ):
435
435
"""A Django settings object which restores changes after the testrun"""
436
436
skip_if_no_django ()
437
437
438
+ # Order the `settings` fixture after DB.
439
+ # We don't want overridden settings to be in effect during
440
+ # DB setup/teardown/post_migrate.
441
+ if 'transactional_db' in request .fixturenames :
442
+ request .getfixturevalue ('transactional_db' )
443
+
438
444
wrapper = SettingsWrapper ()
439
445
yield wrapper
440
446
wrapper .finalize ()
Original file line number Diff line number Diff line change @@ -408,6 +408,30 @@ def test_set_non_existent(settings):
408
408
]
409
409
)
410
410
411
+ def test_transactional_db_order (self , django_testdir ):
412
+ django_testdir .create_test_module (
413
+ """
414
+ import pytest
415
+
416
+ from django.conf import settings as django_settings
417
+ from django.db.models.signals import post_migrate
418
+
419
+ @pytest.fixture
420
+ def check_settings_in_post_migrate(settings, transactional_db):
421
+ def receiver(sender, **kwargs):
422
+ assert not hasattr(django_settings, 'TRANSIENT_SETTING')
423
+
424
+ post_migrate.connect(receiver, weak=False)
425
+
426
+ def test_set_non_existent(settings, check_settings_in_post_migrate):
427
+ settings.TRANSIENT_SETTING = 1
428
+ """
429
+ )
430
+
431
+ result = django_testdir .runpytest_subprocess ("-v" )
432
+ assert result .ret == 0
433
+ result .stdout .fnmatch_lines (["*test_set_non_existent PASSED*" ])
434
+
411
435
412
436
class TestLiveServer :
413
437
def test_settings_before (self ) -> None :
You can’t perform that action at this time.
0 commit comments