Skip to content

Commit

Permalink
plugin: unconfigure should restore not unblock
Browse files Browse the repository at this point in the history
`restore` pops the `block` in `_setup_django`, while `unblock` pushes an
unblock. We want to leave things clean, so should `restore`.
  • Loading branch information
bluetech committed Sep 29, 2024
1 parent 3fff7fc commit 1ffc323
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions pytest_django/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -477,10 +477,13 @@ def get_order_number(test: pytest.Item) -> int:


def pytest_unconfigure(config: pytest.Config) -> None:
if blocking_manager_key not in config.stash:
return
blocking_manager = config.stash[blocking_manager_key]
blocking_manager.unblock()
# Undo the block() in _setup_django(), if it happenned.
# It's also possible the user forgot to call restore().
# We can warn about it, but let's just clean it up.
if blocking_manager_key in config.stash:
blocking_manager = config.stash[blocking_manager_key]
while blocking_manager.is_active:
blocking_manager.restore()


@pytest.fixture(autouse=True, scope="session")
Expand Down Expand Up @@ -852,6 +855,11 @@ def restore(self) -> None:
"""
self._dj_db_wrapper.ensure_connection = self._history.pop()

@property
def is_active(self) -> bool:
"""Whether a block() or unblock() is currently active."""
return bool(self._history)


# On Config.stash.
blocking_manager_key = pytest.StashKey[DjangoDbBlocker]()
Expand Down

0 comments on commit 1ffc323

Please sign in to comment.