Skip to content

Commit df6e3cb

Browse files
committed
Improve test cases
1 parent b5ba1e1 commit df6e3cb

File tree

13 files changed

+661
-365
lines changed

13 files changed

+661
-365
lines changed

key-value/key-value-aio/src/key_value/aio/stores/memory/store.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def _memory_cache_ttu(_key: Any, value: MemoryCacheEntry, now: float) -> float:
5353
return float(expiration_epoch)
5454

5555

56-
def _memory_cache_getsizeof(value: MemoryCacheEntry) -> int: # pyright: ignore[reportUnusedParameter] # noqa: ARG001
56+
def _memory_cache_getsizeof(value: MemoryCacheEntry) -> int: # pyright: ignore[reportUnusedParameter]
5757
"""Return size of cache entry (always 1 for entry counting)."""
5858
return 1
5959

key-value/key-value-aio/tests/stores/base.py

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99
from key_value.shared.code_gen.sleep import asleep
1010
from key_value.shared.errors import InvalidTTLError, SerializationError
1111
from key_value.shared_test.cases import (
12-
LARGE_TEST_DATA_ARGNAMES,
13-
LARGE_TEST_DATA_ARGVALUES,
14-
LARGE_TEST_DATA_IDS,
15-
SIMPLE_TEST_DATA_ARGNAMES,
16-
SIMPLE_TEST_DATA_ARGVALUES,
17-
SIMPLE_TEST_DATA_IDS,
12+
LARGE_DATA_CASES,
13+
NEGATIVE_SIMPLE_CASES,
14+
SIMPLE_CASES,
15+
NegativeCases,
16+
PositiveCases,
1817
)
1918
from pydantic import AnyHttpUrl
2019

@@ -50,40 +49,27 @@ async def test_put_serialization_errors(self, store: BaseStore):
5049
with pytest.raises(SerializationError):
5150
await store.put(collection="test", key="test", value={"test": AnyHttpUrl("https://test.com")})
5251

53-
@pytest.mark.parametrize(
54-
"name,value",
55-
[
56-
("datetime", __import__("datetime").datetime.now(__import__("datetime").timezone.utc)),
57-
("date", __import__("datetime").date(2025, 1, 1)),
58-
("time", __import__("datetime").time(12, 0, 0)),
59-
("uuid", __import__("uuid").UUID("12345678-1234-5678-1234-567812345678")),
60-
("bytes", b"hello world"),
61-
("tuple", (1, 2, 3)),
62-
("set", {1, 2, 3}),
63-
("function", lambda x: x),
64-
("type", type("TestClass", (), {})),
65-
],
66-
ids=["datetime", "date", "time", "uuid", "bytes", "tuple", "set", "function", "type"],
67-
)
68-
async def test_put_nonserializable_types(self, store: BaseStore, name: str, value: Any): # pyright: ignore[reportUnusedParameter] # noqa: ARG002
69-
"""Tests that non-JSON-serializable Python types raise SerializationError."""
70-
with pytest.raises(SerializationError):
71-
await store.put(collection="test", key="test", value={"test": value})
72-
7352
async def test_get_put_get(self, store: BaseStore):
7453
assert await store.get(collection="test", key="test") is None
7554
await store.put(collection="test", key="test", value={"test": "test"})
7655
assert await store.get(collection="test", key="test") == {"test": "test"}
7756

78-
@pytest.mark.parametrize(argnames=SIMPLE_TEST_DATA_ARGNAMES, argvalues=SIMPLE_TEST_DATA_ARGVALUES, ids=SIMPLE_TEST_DATA_IDS)
79-
async def test_get_complex_put_get(self, store: BaseStore, data: dict[str, Any], json: str): # pyright: ignore[reportUnusedParameter, reportUnusedParameter] # noqa: ARG002
57+
@PositiveCases.parametrize(cases=SIMPLE_CASES)
58+
async def test_models_put_get(self, store: BaseStore, data: dict[str, Any], json: str, round_trip: dict[str, Any]): # pyright: ignore[reportUnusedParameter, reportUnusedParameter] # noqa: ARG002
8059
await store.put(collection="test", key="test", value=data)
81-
assert await store.get(collection="test", key="test") == data
60+
retrieved_data = await store.get(collection="test", key="test")
61+
assert retrieved_data is not None
62+
assert retrieved_data == round_trip
63+
64+
@NegativeCases.parametrize(cases=NEGATIVE_SIMPLE_CASES)
65+
async def test_negative_models_put_get(self, store: BaseStore, data: dict[str, Any], error: type[Exception]): # pyright: ignore[reportUnusedParameter, reportUnusedParameter]
66+
with pytest.raises(error):
67+
await store.put(collection="test", key="test", value=data)
8268

83-
@pytest.mark.parametrize(argnames=LARGE_TEST_DATA_ARGNAMES, argvalues=LARGE_TEST_DATA_ARGVALUES, ids=LARGE_TEST_DATA_IDS)
84-
async def test_get_large_put_get(self, store: BaseStore, data: dict[str, Any], json: str): # pyright: ignore[reportUnusedParameter, reportUnusedParameter] # noqa: ARG002
69+
@PositiveCases.parametrize(cases=[LARGE_DATA_CASES])
70+
async def test_get_large_put_get(self, store: BaseStore, data: dict[str, Any], json: str, round_trip: dict[str, Any]): # pyright: ignore[reportUnusedParameter, reportUnusedParameter] # noqa: ARG002
8571
await store.put(collection="test", key="test", value=data)
86-
assert await store.get(collection="test", key="test") == data
72+
assert await store.get(collection="test", key="test") == round_trip
8773

8874
async def test_put_many_get(self, store: BaseStore):
8975
await store.put_many(collection="test", keys=["test", "test_2"], values=[{"test": "test"}, {"test": "test_2"}])

key-value/key-value-aio/tests/stores/keyring/test_keyring.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from typing import Any
22

33
import pytest
4-
from key_value.shared_test.cases import LARGE_TEST_DATA_ARGNAMES, LARGE_TEST_DATA_ARGVALUES, LARGE_TEST_DATA_IDS
54
from typing_extensions import override
65

76
from key_value.aio.stores.base import BaseStore
@@ -28,7 +27,6 @@ async def test_not_unbounded(self, store: BaseStore): ...
2827

2928
@override
3029
@pytest.mark.skipif(condition=detect_on_windows(), reason="Keyrings do not support large values on Windows")
31-
@pytest.mark.parametrize(argnames=LARGE_TEST_DATA_ARGNAMES, argvalues=LARGE_TEST_DATA_ARGVALUES, ids=LARGE_TEST_DATA_IDS)
3230
async def test_get_large_put_get(self, store: BaseStore, data: dict[str, Any], json: str):
3331
await store.put(collection="test", key="test", value=data)
3432
assert await store.get(collection="test", key="test") == data

key-value/key-value-aio/tests/stores/windows_registry/test_windows_registry.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from typing import TYPE_CHECKING, Any
22

33
import pytest
4-
from key_value.shared_test.cases import LARGE_TEST_DATA_ARGNAMES, LARGE_TEST_DATA_ARGVALUES, LARGE_TEST_DATA_IDS
54
from typing_extensions import override
65

76
from key_value.aio.stores.base import BaseStore
@@ -31,7 +30,6 @@ async def store(self) -> "WindowsRegistryStore":
3130
async def test_not_unbounded(self, store: BaseStore): ...
3231

3332
@override
34-
@pytest.mark.parametrize(argnames=LARGE_TEST_DATA_ARGNAMES, argvalues=LARGE_TEST_DATA_ARGVALUES, ids=LARGE_TEST_DATA_IDS)
3533
async def test_get_large_put_get(self, store: BaseStore, data: dict[str, Any], json: str):
3634
await store.put(collection="test", key="test", value=data)
3735
assert await store.get(collection="test", key="test") == data

0 commit comments

Comments
 (0)