Skip to content

Commit a34fed2

Browse files
authored
Merge pull request #34 from amirreza8002/pytest
replace unittest references with pytest add test for async session backend add settings for async usock connections tests
2 parents 0f7431d + e9ab421 commit a34fed2

File tree

9 files changed

+730
-215
lines changed

9 files changed

+730
-215
lines changed

tests/settings/sqlite_usock_async.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
SECRET_KEY = "django_tests_secret_key"
2+
3+
CACHES = {
4+
"default": {
5+
"BACKEND": "django_valkey.async_cache.cache.AsyncValkeyCache",
6+
"LOCATION": ["unix:///tmp/valkey.sock?db=1", "unix:///tmp/valkey.sock?db=1"],
7+
"OPTIONS": {
8+
"CLIENT_CLASS": "django_valkey.async_cache.client.AsyncDefaultClient"
9+
},
10+
},
11+
"doesnotexist": {
12+
"BACKEND": "django_valkey.async_cache.cache.AsyncValkeyCache",
13+
"LOCATION": "valkey://127.0.0.1:56379?db=1",
14+
"OPTIONS": {
15+
"CLIENT_CLASS": "django_valkey.async_cache.client.AsyncDefaultClient"
16+
},
17+
},
18+
"sample": {
19+
"BACKEND": "django_valkey.async_cache.cache.AsyncValkeyCache",
20+
"LOCATION": "valkey://127.0.0.1:6379?db=1,valkey://127.0.0.1:6379?db=1",
21+
"OPTIONS": {
22+
"CLIENT_CLASS": "django_valkey.async_cache.client.AsyncDefaultClient"
23+
},
24+
},
25+
"with_prefix": {
26+
"BACKEND": "django_valkey.async_cache.cache.AsyncValkeyCache",
27+
"LOCATION": "valkey://127.0.0.1:6379?db=1",
28+
"OPTIONS": {
29+
"CLIENT_CLASS": "django_valkey.async_cache.client.AsyncDefaultClient"
30+
},
31+
"KEY_PREFIX": "test-prefix",
32+
},
33+
}
34+
35+
INSTALLED_APPS = ["django.contrib.sessions"]
36+
37+
USE_TZ = False
38+
39+
40+
ROOT_URLCONF = "tests.settings.urls"

tests/test_backend.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from collections.abc import Iterable
55
from datetime import timedelta
66
from typing import List, cast
7-
from unittest.mock import patch
87

98
import pytest
109
from pytest_django.fixtures import SettingsWrapper
@@ -285,6 +284,7 @@ def test_set_call_empty_pipeline(
285284
value = "value"
286285

287286
mocked_set = mocker.patch.object(pipeline, "set")
287+
288288
cache.set(key, value, client=pipeline)
289289

290290
if isinstance(cache.client, herd.HerdClient):
@@ -552,8 +552,9 @@ def test_delete_pattern(self, cache: ValkeyCache):
552552
res = cache.delete_pattern("*foo-a*")
553553
assert bool(res) is False
554554

555-
@patch("django_valkey.cache.ValkeyCache.client")
556-
def test_delete_pattern_with_custom_count(self, client_mock, cache: ValkeyCache):
555+
def test_delete_pattern_with_custom_count(self, cache: ValkeyCache, mocker):
556+
client_mock = mocker.patch("django_valkey.cache.ValkeyCache.client")
557+
557558
if isinstance(cache.client, DefaultClusterClient):
558559
pytest.skip("cluster client has a specific test")
559560

@@ -564,14 +565,15 @@ def test_delete_pattern_with_custom_count(self, client_mock, cache: ValkeyCache)
564565

565566
client_mock.delete_pattern.assert_called_once_with("*foo-a*", itersize=2)
566567

567-
@patch("django_valkey.cache.ValkeyCache.client")
568568
def test_delete_pattern_with_settings_default_scan_count(
569569
self,
570-
client_mock,
571570
patch_itersize_setting,
572571
cache: ValkeyCache,
573572
settings: SettingsWrapper,
573+
mocker,
574574
):
575+
client_mock = mocker.patch("django_valkey.cache.ValkeyCache.client")
576+
575577
if isinstance(cache.client, DefaultClusterClient):
576578
pytest.skip("cluster client has a specific test")
577579

@@ -592,6 +594,7 @@ def test_close(self, cache: ValkeyCache, settings: SettingsWrapper):
592594

593595
def test_close_client(self, cache: ValkeyCache, mocker: MockerFixture):
594596
mock = mocker.patch.object(cache.client, "close")
597+
595598
cache.close()
596599
assert mock.called
597600

tests/test_client.py

Lines changed: 71 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from collections.abc import Iterable
2-
from unittest.mock import Mock, call, patch
32

43
import pytest
54
from pytest_django.fixtures import SettingsWrapper
@@ -24,6 +23,7 @@ def test_close_client_disconnect_default(
2423
self, cache_client: DefaultClient, mocker: MockerFixture
2524
):
2625
mock = mocker.patch.object(cache_client.connection_factory, "disconnect")
26+
2727
cache_client.close()
2828
assert not mock.called
2929

@@ -33,8 +33,9 @@ def test_close_disconnect_settings(
3333
settings: SettingsWrapper,
3434
mocker: MockerFixture,
3535
):
36-
settings.DJANGO_VALKEY_CLOSE_CONNECTION = True
3736
mock = mocker.patch.object(cache_client.connection_factory, "disconnect")
37+
38+
settings.DJANGO_VALKEY_CLOSE_CONNECTION = True
3839
cache_client.close()
3940
assert mock.called
4041

@@ -44,17 +45,21 @@ def test_close_disconnect_settings_cache(
4445
mocker: MockerFixture,
4546
settings: SettingsWrapper,
4647
):
48+
mock = mocker.patch.object(cache_client.connection_factory, "disconnect")
49+
4750
settings.CACHES[DEFAULT_CACHE_ALIAS]["OPTIONS"]["CLOSE_CONNECTION"] = True
4851
cache_client.set("TestClientClose", 0)
49-
mock = mocker.patch.object(cache_client.connection_factory, "disconnect")
52+
5053
cache_client.close()
5154
assert mock.called
5255

5356
def test_close_disconnect_client_options(
5457
self, cache_client: DefaultClient, mocker: MockerFixture
5558
):
56-
cache_client._options["CLOSE_CONNECTION"] = True
5759
mock = mocker.patch.object(cache_client.connection_factory, "disconnect")
60+
61+
cache_client._options["CLOSE_CONNECTION"] = True
62+
5863
cache_client.close()
5964
assert mock.called
6065

@@ -63,26 +68,29 @@ def test_close_disconnect_client_options(
6368
not isinstance(default_cache.client, DefaultClient), reason="shard only test"
6469
)
6570
class TestDefaultClient:
66-
@patch("django_valkey.base_client.ClientCommands.get_client")
67-
@patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
68-
def test_delete_pattern_calls_get_client_given_no_client(
69-
self, init_mock, get_client_mock
70-
):
71+
def test_delete_pattern_calls_get_client_given_no_client(self, mocker):
72+
get_client_mock = mocker.patch(
73+
"django_valkey.base_client.ClientCommands.get_client"
74+
)
75+
mocker.patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
7176
client = DefaultClient()
72-
client._backend = Mock()
77+
client._backend = mocker.Mock()
7378
client._backend.key_prefix = ""
7479

7580
client.delete_pattern(pattern="foo*")
7681
get_client_mock.assert_called_once_with(write=True, tried=None)
7782

78-
@patch("django_valkey.base_client.BaseClient.make_pattern")
79-
@patch("django_valkey.base_client.ClientCommands.get_client", return_value=Mock())
80-
@patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
81-
def test_delete_pattern_calls_make_pattern(
82-
self, init_mock, get_client_mock, make_pattern_mock
83-
):
83+
def test_delete_pattern_calls_make_pattern(self, mocker):
84+
make_pattern_mock = mocker.patch(
85+
"django_valkey.base_client.BaseClient.make_pattern"
86+
)
87+
get_client_mock = mocker.patch(
88+
"django_valkey.base_client.ClientCommands.get_client",
89+
return_value=mocker.Mock(),
90+
)
91+
mocker.patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
8492
client = DefaultClient()
85-
client._backend = Mock()
93+
client._backend = mocker.Mock()
8694
client._backend.key_prefix = ""
8795
get_client_mock.return_value.scan_iter.return_value = []
8896

@@ -91,14 +99,17 @@ def test_delete_pattern_calls_make_pattern(
9199
kwargs = {"version": None, "prefix": None}
92100
make_pattern_mock.assert_called_once_with("foo*", **kwargs)
93101

94-
@patch("django_valkey.base_client.BaseClient.make_pattern")
95-
@patch("django_valkey.base_client.ClientCommands.get_client", return_value=Mock())
96-
@patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
97-
def test_delete_pattern_calls_scan_iter_with_count_if_itersize_given(
98-
self, init_mock, get_client_mock, make_pattern_mock
99-
):
102+
def test_delete_pattern_calls_scan_iter_with_count_if_itersize_given(self, mocker):
103+
mocker.patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
104+
get_client_mock = mocker.patch(
105+
"django_valkey.base_client.ClientCommands.get_client",
106+
return_value=mocker.Mock(),
107+
)
108+
make_pattern_mock = mocker.patch(
109+
"django_valkey.base_client.BaseClient.make_pattern"
110+
)
100111
client = DefaultClient()
101-
client._backend = Mock()
112+
client._backend = mocker.Mock()
102113
client._backend.key_prefix = ""
103114
get_client_mock.return_value.scan_iter.return_value = []
104115

@@ -108,25 +119,26 @@ def test_delete_pattern_calls_scan_iter_with_count_if_itersize_given(
108119
count=90210, match=make_pattern_mock.return_value
109120
)
110121

111-
@patch("django_valkey.base_client.BaseClient.make_pattern")
112-
@patch("django_valkey.base_client.ClientCommands.get_client", return_value=Mock())
113-
@patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
114-
def test_delete_pattern_calls_pipeline_delete_and_execute(
115-
self, init_mock, get_client_mock, make_pattern_mock
116-
):
122+
def test_delete_pattern_calls_pipeline_delete_and_execute(self, mocker):
123+
mocker.patch("django_valkey.base_client.BaseClient.__init__", return_value=None)
124+
get_client_mock = mocker.patch(
125+
"django_valkey.base_client.ClientCommands.get_client",
126+
return_value=mocker.Mock(),
127+
)
128+
mocker.patch("django_valkey.base_client.BaseClient.make_pattern")
117129
client = DefaultClient()
118-
client._backend = Mock()
130+
client._backend = mocker.Mock()
119131
client._backend.key_prefix = ""
120132
get_client_mock.return_value.scan_iter.return_value = [":1:foo", ":1:foo-a"]
121-
get_client_mock.return_value.pipeline.return_value = Mock()
122-
get_client_mock.return_value.pipeline.return_value.delete = Mock()
123-
get_client_mock.return_value.pipeline.return_value.execute = Mock()
133+
get_client_mock.return_value.pipeline.return_value = mocker.Mock()
134+
get_client_mock.return_value.pipeline.return_value.delete = mocker.Mock()
135+
get_client_mock.return_value.pipeline.return_value.execute = mocker.Mock()
124136

125137
client.delete_pattern(pattern="foo*")
126138

127139
assert get_client_mock.return_value.pipeline.return_value.delete.call_count == 2
128140
get_client_mock.return_value.pipeline.return_value.delete.assert_has_calls(
129-
[call(":1:foo"), call(":1:foo-a")]
141+
[mocker.call(":1:foo"), mocker.call(":1:foo-a")]
130142
)
131143
get_client_mock.return_value.pipeline.return_value.execute.assert_called_once()
132144

@@ -158,6 +170,7 @@ def shard_cache(self):
158170
@pytest.fixture
159171
def connection(self, mocker):
160172
connection = mocker.Mock()
173+
161174
for m in self.CLIENT_METHODS_FOR_MOCK:
162175
setattr(connection, m, mocker.Mock(spec_set=()))
163176

@@ -173,16 +186,17 @@ def connection(self, mocker):
173186

174187
yield connection
175188

176-
@patch("django_valkey.base_client.BaseClient.make_pattern")
177-
@patch("django_valkey.client.sharded.ShardClient.__init__", return_value=None)
178189
def test_delete_pattern_calls_scan_iter_with_count_if_itersize_given(
179-
self,
180-
init_mock,
181-
make_pattern_mock,
182-
connection,
190+
self, connection, mocker
183191
):
192+
mocker.patch(
193+
"django_valkey.client.sharded.ShardClient.__init__", return_value=None
194+
)
195+
make_pattern_mock = mocker.patch(
196+
"django_valkey.base_client.BaseClient.make_pattern"
197+
)
184198
client = ShardClient()
185-
client._backend = Mock()
199+
client._backend = mocker.Mock()
186200
client._backend.key_prefix = ""
187201

188202
client._server_dict = {"test": connection}
@@ -193,13 +207,15 @@ def test_delete_pattern_calls_scan_iter_with_count_if_itersize_given(
193207
count=10, match=make_pattern_mock.return_value
194208
)
195209

196-
@patch("tests.test_client.ShardClient.make_pattern")
197-
@patch("tests.test_client.ShardClient.__init__", return_value=None)
198-
def test_delete_pattern_calls_scan_iter(
199-
self, init_mock, make_pattern_mock, connection
200-
):
210+
def test_delete_pattern_calls_scan_iter(self, connection, mocker):
211+
mocker.patch(
212+
"django_valkey.client.sharded.ShardClient.__init__", return_value=None
213+
)
214+
make_pattern_mock = mocker.patch(
215+
"django_valkey.base_client.BaseClient.make_pattern"
216+
)
201217
client = ShardClient()
202-
client._backend = Mock()
218+
client._backend = mocker.Mock()
203219
client._backend.key_prefix = ""
204220
client._server_dict = {"test": connection}
205221

@@ -209,15 +225,17 @@ def test_delete_pattern_calls_scan_iter(
209225
match=make_pattern_mock.return_value
210226
)
211227

212-
@patch("tests.test_client.ShardClient.make_pattern")
213-
@patch("tests.test_client.ShardClient.__init__", return_value=None)
214228
def test_delete_pattern_calls_delete_for_given_keys(
215-
self, init_mock, make_pattern_mock, connection, cache
229+
self, connection, cache, mocker
216230
):
231+
mocker.patch(
232+
"django_valkey.client.sharded.ShardClient.__init__", return_value=None
233+
)
234+
mocker.patch("django_valkey.base_client.BaseClient.make_pattern")
217235
client = ShardClient()
218-
client._backend = Mock()
236+
client._backend = mocker.Mock()
219237
client._backend.key_prefix = ""
220-
connection.scan_iter.return_value = [Mock(), Mock()]
238+
connection.scan_iter.return_value = [mocker.Mock(), mocker.Mock()]
221239
connection.delete.return_value = 0
222240
client._server_dict = {"test": connection}
223241

0 commit comments

Comments
 (0)