Skip to content

Commit da21db1

Browse files
committed
Added more test
1 parent 9a7782d commit da21db1

14 files changed

+137
-72
lines changed

tests/test_application/test_application_factory.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import pytest
12
from starlette.routing import Host, Mount
23

34
from ellar.common import Module
@@ -105,3 +106,10 @@ class CModule:
105106
template = app.jinja_environment.get_template("example.html")
106107
result = template.render()
107108
assert result == "<html>Hello World<html/>"
109+
110+
111+
def test_invalid_config_module_raise_exception():
112+
with pytest.raises(Exception) as ex:
113+
AppFactory.create_app(config_module=set())
114+
115+
assert str(ex.value) == "config_module should be a importable str or a dict object"

tests/test_cache/redis_mock.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ def __init__(self, *args, time_lookup="ex", **kwargs):
1212
def _cache(self):
1313
return self._cache_default
1414

15-
def get_backend_timeout(self, timeout):
16-
return timeout
15+
def get_backend_ttl(self, ttl):
16+
return ttl
1717

1818
async def set(self, *args, **kwargs):
1919
key, value = args
2020
self._cache[key] = (
2121
value,
22-
self.get_backend_timeout(kwargs.get(self._time_lookup)),
22+
self.get_backend_ttl(kwargs.get(self._time_lookup)),
2323
)
2424
return True
2525

@@ -41,7 +41,7 @@ async def touch(self, *args, **kwargs):
4141
{
4242
key: (
4343
_res[0],
44-
self.get_backend_timeout(kwargs.get(self._time_lookup)),
44+
self.get_backend_ttl(kwargs.get(self._time_lookup)),
4545
)
4646
}
4747
)
@@ -84,8 +84,8 @@ class MockRedisClient(MockAsyncMemCacheClient):
8484
def _cache(self):
8585
return self._cache_static
8686

87-
def get_backend_timeout(self, timeout):
88-
return time.time() + int(timeout)
87+
def get_backend_ttl(self, ttl):
88+
return time.time() + int(ttl)
8989

9090
async def persist(self, key):
9191
return self._cache.get(key) is not None

tests/test_cache/test_cache_many_config.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
1-
from ellar.cache import ICacheService
1+
from ellar.cache import CacheModule, ICacheService, cache
22
from ellar.cache.backends.local_cache import LocalMemCacheBackend
3-
from ellar.common import Controller, cache, get
3+
from ellar.common import Controller, get
44
from ellar.core import TestClientFactory
55
from ellar.core.response import PlainTextResponse
6-
from ellar.helper.importer import get_class_import
7-
8-
9-
class ManyCacheBackendConfig:
10-
CACHES = {
11-
"default": LocalMemCacheBackend(),
12-
"another": LocalMemCacheBackend(key_prefix="another", version=2),
13-
}
146

157

168
@Controller("")
179
class ExampleController:
1810
@get("/index-1")
19-
@cache(timeout=1, backend="another")
11+
@cache(ttl=1, backend="another")
2012
def index_1(self):
2113
return PlainTextResponse("ExampleController cache 1")
2214

2315
@get("/index-2")
24-
@cache(timeout=1, backend="default")
16+
@cache(ttl=1, backend="default")
2517
def index_2(self):
2618
return dict(message="ExampleController cache 2")
2719

2820

2921
tm = TestClientFactory.create_test_module(
3022
controllers=[ExampleController],
31-
config_module=get_class_import(ManyCacheBackendConfig),
23+
modules=(CacheModule.register_setup(),),
24+
config_module=dict(
25+
CACHES={
26+
"default": LocalMemCacheBackend(),
27+
"another": LocalMemCacheBackend(key_prefix="another", version=2),
28+
}
29+
),
3230
)
3331

3432

tests/test_cache/test_cache_service.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ def test_touch(self):
3333
assert self.cache_service.get("test-touch") == "1"
3434

3535
def test_incr(self):
36-
self.cache_service.set("test-incr", 0, version="1", timeout=0.1)
36+
self.cache_service.set("test-incr", 0, version="1", ttl=0.1)
3737
self.cache_service.incr("test-incr", version="1")
3838
assert self.cache_service.get("test-incr", version="1") == 1
3939
self.cache_service.incr("test-incr", 2, version="1")
4040
self.cache_service.incr("test-incr", 3, version="1")
4141
assert self.cache_service.get("test-incr") == 6
4242

4343
def test_decr(self):
44-
self.cache_service.set("test-decr", 2, version="1", timeout=0.1)
44+
self.cache_service.set("test-decr", 2, version="1", ttl=0.1)
4545
self.cache_service.decr("test-decr", version="1")
4646
assert self.cache_service.get("test-decr", version="1") == 1
4747

@@ -87,19 +87,15 @@ async def test_touch_async(self, anyio_backend):
8787
assert await self.cache_service.get_async("test-touch") == "1"
8888

8989
async def test_incr_async(self, anyio_backend):
90-
await self.cache_service.set_async(
91-
"test-incr-async", 0, version="1", timeout=0.1
92-
)
90+
await self.cache_service.set_async("test-incr-async", 0, version="1", ttl=0.1)
9391
await self.cache_service.incr_async("test-incr-async", version="1")
9492
assert await self.cache_service.get_async("test-incr-async", version="1") == 1
9593
await self.cache_service.incr_async("test-incr-async", 2, version="1")
9694
await self.cache_service.incr_async("test-incr-async", 3, version="1")
9795
assert await self.cache_service.get_async("test-incr-async") == 6
9896

9997
async def test_decr_async(self, anyio_backend):
100-
await self.cache_service.set_async(
101-
"test-decr-async", 2, version="1", timeout=0.2
102-
)
98+
await self.cache_service.set_async("test-decr-async", 2, version="1", ttl=0.2)
10399
await self.cache_service.decr_async("test-decr-async", version="1")
104100
assert await self.cache_service.get_async("test-decr-async", version="1") == 1
105101

tests/test_cache/test_local_cache.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ def test_cache_zero_timeout_expires_immediately(self):
3636
assert self.backend.get("test-touch") is None
3737

3838
def test_incr(self):
39-
self.backend.set("test-incr-backend", 0, version="1", timeout=0.1)
39+
self.backend.set("test-incr-backend", 0, version="1", ttl=0.1)
4040
self.backend.incr("test-incr-backend", version="1")
4141
assert self.backend.get("test-incr-backend", version="1") == 1
4242
self.backend.incr("test-incr-backend", 2, version="1")
4343
self.backend.incr("test-incr-backend", 3, version="1")
4444
assert self.backend.get("test-incr-backend") == 6
4545

4646
def test_decr(self):
47-
self.backend.set("test-decr-backend", 2, version="1", timeout=0.1)
47+
self.backend.set("test-decr-backend", 2, version="1", ttl=0.1)
4848
self.backend.decr("test-decr-backend", version="1")
4949
assert self.backend.get("test-decr-backend", version="1") == 1
5050

@@ -82,30 +82,26 @@ async def test_touch_async(self, anyio_backend):
8282
async def test_simple_cache_backend_with_init_params(
8383
self, anyio_backend: str
8484
) -> None:
85-
backend = LocalMemCacheBackend(key_prefix="ellar", timeout=300, version=2)
85+
backend = LocalMemCacheBackend(key_prefix="ellar", ttl=300, version=2)
8686
await backend.set_async("test", "2", 20) # type: ignore
8787
key = backend.make_key("test")
8888
assert backend._cache[key]
8989
assert isinstance(backend._cache[key], bytes)
9090

9191
async def test_incr_async(self, anyio_backend):
92-
await self.backend.set_async(
93-
"test-incr-async-backend", 0, version="1", timeout=0.1
94-
)
92+
await self.backend.set_async("test-incr-async-backend", 0, version="1", ttl=0.1)
9593
await self.backend.incr_async("test-incr-async-backend", version="1")
9694
assert await self.backend.get_async("test-incr-async-backend", version="1") == 1
9795
await self.backend.incr_async("test-incr-async-backend", 2, version="1")
9896
await self.backend.incr_async("test-incr-async-backend", 3, version="1")
9997
assert await self.backend.get_async("test-incr-async-backend") == 6
10098

10199
with pytest.raises(ValueError):
102-
await self.backend.set_async("test-incr-async-backend", 0, timeout=0)
100+
await self.backend.set_async("test-incr-async-backend", 0, ttl=0)
103101
await self.backend.incr_async("test-incr-async-backend")
104102

105103
async def test_decr_async(self, anyio_backend):
106-
await self.backend.set_async(
107-
"test-decr-async-backend", 2, version="1", timeout=0.2
108-
)
104+
await self.backend.set_async("test-decr-async-backend", 2, version="1", ttl=0.2)
109105
await self.backend.decr_async("test-decr-async-backend", version="1")
110106
assert await self.backend.get_async("test-decr-async-backend", version="1") == 1
111107

@@ -114,5 +110,5 @@ async def test_decr_async(self, anyio_backend):
114110
assert await self.backend.get_async("test-decr-async-backend") == 0
115111

116112
with pytest.raises(ValueError):
117-
await self.backend.set_async("test-decr-async-backend", 2, timeout=0)
113+
await self.backend.set_async("test-decr-async-backend", 2, ttl=0)
118114
await self.backend.decr_async("test-decr-async-backend")

tests/test_cache/test_module_setup.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from ellar.cache import CacheModule, ICacheService
2+
from ellar.cache.backends.local_cache import LocalMemCacheBackend
3+
from ellar.core import TestClientFactory
4+
5+
6+
def test_cache_module_setup_works():
7+
tm = TestClientFactory.create_test_module(
8+
modules=[
9+
CacheModule.setup(
10+
default=LocalMemCacheBackend(),
11+
local=LocalMemCacheBackend(version=2, ttl=400),
12+
)
13+
]
14+
)
15+
16+
cache_service = tm.app.injector.get(ICacheService)
17+
assert cache_service
18+
local = cache_service.get_backend("local")
19+
20+
assert local._version == 2
21+
assert local._default_ttl == 400

tests/test_cache/test_pylibmc_cache.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def test_touch(self):
5959
assert self.backend.close() is None
6060

6161
def test_incr(self):
62-
self.backend.set("test-incr-sync", 0, version="1", timeout=1)
62+
self.backend.set("test-incr-sync", 0, version="1", ttl=1)
6363
self.backend.incr("test-incr-sync", version="1")
6464
assert self.backend.get("test-incr-sync", version="1") == 1
6565

@@ -68,7 +68,7 @@ def test_incr(self):
6868
assert self.backend.get("test-incr-sync") == 6
6969

7070
def test_decr(self):
71-
self.backend.set("test-decr-sync", 2, version="1", timeout=1)
71+
self.backend.set("test-decr-sync", 2, version="1", ttl=1)
7272
self.backend.decr("test-decr-sync", version="1")
7373
assert self.backend.get("test-decr-sync", version="1") == 1
7474

@@ -146,7 +146,7 @@ async def test_clear(self, anyio_backend):
146146

147147
async def test_incr_async(self, anyio_backend):
148148
await self.backend.set_async(
149-
f"test-incr-async-{anyio_backend}", 0, version="1", timeout=1
149+
f"test-incr-async-{anyio_backend}", 0, version="1", ttl=1
150150
)
151151
await self.backend.incr_async(f"test-incr-async-{anyio_backend}", version="1")
152152
assert (
@@ -164,7 +164,7 @@ async def test_incr_async(self, anyio_backend):
164164
assert await self.backend.get_async(f"test-incr-async-{anyio_backend}") == 6
165165

166166
async def test_decr_async(self, anyio_backend):
167-
await self.backend.set_async("test-decr-async-pylib", 2, version="1", timeout=1)
167+
await self.backend.set_async("test-decr-async-pylib", 2, version="1", ttl=1)
168168
await self.backend.decr_async("test-decr-async-pylib", version="1")
169169
assert await self.backend.get_async("test-decr-async-pylib", version="1") == 1
170170

tests/test_cache/test_redis_cache.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def test_touch(self):
5656
assert self.backend.get("test-touch") == "1"
5757

5858
def test_incr_async(self):
59-
self.backend.set("test-incr", 0, timeout=1)
59+
self.backend.set("test-incr", 0, ttl=1)
6060
self.backend.incr("test-incr")
6161

6262
assert self.backend.get("test-incr") == 1
@@ -66,7 +66,7 @@ def test_incr_async(self):
6666
assert self.backend.get("test-incr") == 6
6767

6868
def test_decr_async(self):
69-
self.backend.set("test-decr", 2, timeout=1)
69+
self.backend.set("test-decr", 2, ttl=1)
7070
self.backend.decr("test-decr")
7171

7272
assert self.backend.get("test-decr") == 1
@@ -137,7 +137,7 @@ async def test_touch_async(
137137

138138
@pytest.mark.asyncio
139139
async def test_incr_async(self):
140-
await self.backend.set_async("test-incr-async", 0, timeout=1)
140+
await self.backend.set_async("test-incr-async", 0, ttl=1)
141141
await self.backend.incr_async("test-incr-async")
142142
assert await self.backend.get_async("test-incr-async") == 1
143143
await self.backend.incr_async("test-incr-async", 2)
@@ -146,7 +146,7 @@ async def test_incr_async(self):
146146

147147
@pytest.mark.asyncio
148148
async def test_decr_async(self):
149-
await self.backend.set_async("test-decr-async", 2, timeout=1)
149+
await self.backend.set_async("test-decr-async", 2, ttl=1)
150150
await self.backend.decr_async("test-decr-async")
151151
assert await self.backend.get_async("test-decr-async") == 1
152152

@@ -177,5 +177,5 @@ class DemoMemCachedBackend(RedisCacheBackend):
177177
MEMCACHE_CLIENT = DemoCacheClient
178178

179179
backend = DemoMemCachedBackend(servers=["redis://localhost:6379/0"])
180-
await backend.set_async("zero", "value", timeout=0)
180+
await backend.set_async("zero", "value", ttl=0)
181181
assert set_called and delete_called

tests/test_cache/test_schema.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import pytest
2+
3+
from ellar.cache.backends.local_cache import LocalMemCacheBackend
4+
from ellar.cache.schema import CacheModuleSchemaSetup
5+
6+
7+
def test_invalid_cached_backend_config():
8+
with pytest.raises(ValueError, match="Expected BaseCacheBackend, received:"):
9+
CacheModuleSchemaSetup(CACHES={"default": type("whatever", (), {})})
10+
11+
12+
def test_cache_backend_without_default_raise_exception():
13+
with pytest.raises(
14+
ValueError, match="CACHES configuration must have a 'default' key"
15+
):
16+
CacheModuleSchemaSetup(CACHES={"local": LocalMemCacheBackend()})

0 commit comments

Comments
 (0)