|
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