File: test_signals.py

package info (click to toggle)
python-django-zeal 2.0.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 284 kB
  • sloc: python: 1,387; makefile: 25; sh: 9
file content (36 lines) | stat: -rw-r--r-- 1,217 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import warnings

import pytest
import pytest_django
import pytest_mock
from djangoproject.social import models
from zeal import errors
from zeal.listeners import n_plus_one_listener

from . import factories

pytestmark = pytest.mark.django_db


def test_signal_send_message(
    monkeypatch: pytest.MonkeyPatch,
    mocker: pytest_mock.MockerFixture,
    settings: pytest_django.fixtures.SettingsWrapper,
):
    """Test signal send message after detecting N+1 query."""
    settings.ZEAL_RAISE = False
    patched_signal = mocker.patch(
        "zeal.listeners.nplusone_detected.send",
    )
    user_1, user_2 = factories.UserFactory.create_batch(2)
    factories.PostFactory.create(author=user_1)
    factories.PostFactory.create(author=user_2)
    with warnings.catch_warnings(record=True):
        warnings.simplefilter("always")
        _ = [post.author.username for post in models.Post.objects.all()]
    patched_signal.assert_called_once()
    sender = patched_signal.call_args[1]["sender"]
    assert sender == n_plus_one_listener
    exception = patched_signal.call_args[1]["exception"]
    assert isinstance(exception, errors.NPlusOneError)
    assert "N+1 detected on social.Post.author" in str(exception)