|
7 | 7 | from __future__ import with_statement
|
8 | 8 |
|
9 | 9 | import socket
|
| 10 | +from contextlib import contextmanager |
10 | 11 |
|
11 | 12 | import pytest
|
12 |
| - |
13 |
| -from django.db import connection, transaction |
14 | 13 | from django.conf import settings as real_settings
|
15 | 14 | from django.core import mail
|
| 15 | +from django.db import connection, transaction |
16 | 16 | from django.test.client import Client, RequestFactory
|
17 | 17 | from django.test.testcases import connections_support_transactions
|
18 | 18 | from django.utils.encoding import force_text
|
|
22 | 22 | from pytest_django_test.compat import HTTPError, urlopen
|
23 | 23 |
|
24 | 24 |
|
| 25 | +@contextmanager |
| 26 | +def nonverbose_config(config): |
| 27 | + """Ensure that pytest's config.option.verbose is <= 0.""" |
| 28 | + if config.option.verbose <= 0: |
| 29 | + yield |
| 30 | + else: |
| 31 | + saved = config.option.verbose |
| 32 | + config.option.verbose = 0 |
| 33 | + yield |
| 34 | + config.option.verbose = saved |
| 35 | + |
| 36 | + |
25 | 37 | def test_client(client):
|
26 | 38 | assert isinstance(client, Client)
|
27 | 39 |
|
@@ -53,56 +65,58 @@ def test_rf(rf):
|
53 | 65 |
|
54 | 66 |
|
55 | 67 | @pytest.mark.django_db
|
56 |
| -def test_django_assert_num_queries_db(django_assert_num_queries): |
57 |
| - with django_assert_num_queries(3): |
58 |
| - Item.objects.create(name="foo") |
59 |
| - Item.objects.create(name="bar") |
60 |
| - Item.objects.create(name="baz") |
61 |
| - |
62 |
| - with pytest.raises(pytest.fail.Exception) as excinfo: |
63 |
| - with django_assert_num_queries(2) as captured: |
64 |
| - Item.objects.create(name="quux") |
65 |
| - assert excinfo.value.args == ( |
66 |
| - "Expected to perform 2 queries but 1 was done " |
67 |
| - "(add -v option to show queries)", |
68 |
| - ) |
69 |
| - assert len(captured.captured_queries) == 1 |
| 68 | +def test_django_assert_num_queries_db(request, django_assert_num_queries): |
| 69 | + with nonverbose_config(request.config): |
| 70 | + with django_assert_num_queries(3): |
| 71 | + Item.objects.create(name="foo") |
| 72 | + Item.objects.create(name="bar") |
| 73 | + Item.objects.create(name="baz") |
70 | 74 |
|
| 75 | + with pytest.raises(pytest.fail.Exception) as excinfo: |
| 76 | + with django_assert_num_queries(2) as captured: |
| 77 | + Item.objects.create(name="quux") |
| 78 | + assert excinfo.value.args == ( |
| 79 | + "Expected to perform 2 queries but 1 was done " |
| 80 | + "(add -v option to show queries)", |
| 81 | + ) |
| 82 | + assert len(captured.captured_queries) == 1 |
71 | 83 |
|
72 |
| -@pytest.mark.django_db |
73 |
| -def test_django_assert_max_num_queries_db(django_assert_max_num_queries): |
74 |
| - with django_assert_max_num_queries(2): |
75 |
| - Item.objects.create(name="1-foo") |
76 |
| - Item.objects.create(name="2-bar") |
77 | 84 |
|
78 |
| - with pytest.raises(pytest.fail.Exception) as excinfo: |
79 |
| - with django_assert_max_num_queries(2) as captured: |
| 85 | +@pytest.mark.django_db |
| 86 | +def test_django_assert_max_num_queries_db(request, django_assert_max_num_queries): |
| 87 | + with nonverbose_config(request.config): |
| 88 | + with django_assert_max_num_queries(2): |
80 | 89 | Item.objects.create(name="1-foo")
|
81 | 90 | Item.objects.create(name="2-bar")
|
82 |
| - Item.objects.create(name="3-quux") |
83 | 91 |
|
84 |
| - assert excinfo.value.args == ( |
85 |
| - "Expected to perform 2 queries or less but 3 were done " |
86 |
| - "(add -v option to show queries)", |
87 |
| - ) |
88 |
| - assert len(captured.captured_queries) == 3 |
89 |
| - assert "1-foo" in captured.captured_queries[0]["sql"] |
| 92 | + with pytest.raises(pytest.fail.Exception) as excinfo: |
| 93 | + with django_assert_max_num_queries(2) as captured: |
| 94 | + Item.objects.create(name="1-foo") |
| 95 | + Item.objects.create(name="2-bar") |
| 96 | + Item.objects.create(name="3-quux") |
| 97 | + |
| 98 | + assert excinfo.value.args == ( |
| 99 | + "Expected to perform 2 queries or less but 3 were done " |
| 100 | + "(add -v option to show queries)", |
| 101 | + ) |
| 102 | + assert len(captured.captured_queries) == 3 |
| 103 | + assert "1-foo" in captured.captured_queries[0]["sql"] |
90 | 104 |
|
91 | 105 |
|
92 | 106 | @pytest.mark.django_db(transaction=True)
|
93 | 107 | def test_django_assert_num_queries_transactional_db(
|
94 |
| - transactional_db, django_assert_num_queries |
| 108 | + request, transactional_db, django_assert_num_queries |
95 | 109 | ):
|
96 |
| - with transaction.atomic(): |
97 |
| - |
98 |
| - with django_assert_num_queries(3): |
99 |
| - Item.objects.create(name="foo") |
100 |
| - Item.objects.create(name="bar") |
101 |
| - Item.objects.create(name="baz") |
| 110 | + with nonverbose_config(request.config): |
| 111 | + with transaction.atomic(): |
| 112 | + with django_assert_num_queries(3): |
| 113 | + Item.objects.create(name="foo") |
| 114 | + Item.objects.create(name="bar") |
| 115 | + Item.objects.create(name="baz") |
102 | 116 |
|
103 |
| - with pytest.raises(pytest.fail.Exception): |
104 |
| - with django_assert_num_queries(2): |
105 |
| - Item.objects.create(name="quux") |
| 117 | + with pytest.raises(pytest.fail.Exception): |
| 118 | + with django_assert_num_queries(2): |
| 119 | + Item.objects.create(name="quux") |
106 | 120 |
|
107 | 121 |
|
108 | 122 | def test_django_assert_num_queries_output(django_testdir):
|
|
0 commit comments