Skip to content

Commit f4f6932

Browse files
authored
Merge pull request #42 from arab0v/improve-test-type-assertions
Improve type assertions in tests and session backends import structure
2 parents 50c8f25 + 1dac42b commit f4f6932

File tree

2 files changed

+98
-29
lines changed

2 files changed

+98
-29
lines changed
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
11
"""Session storage backends for different storage systems."""
22

3-
__all__ = ["MemorySessionStorage", "RedisSessionStorage", "MemcachedSessionStorage"]
3+
from .database import DatabaseSessionStorage
4+
from .hybrid import HybridSessionStorage
5+
from .memcached import MemcachedSessionStorage
6+
from .memory import MemorySessionStorage
7+
from .redis import RedisSessionStorage
8+
9+
__all__ = (
10+
"MemorySessionStorage",
11+
"RedisSessionStorage",
12+
"MemcachedSessionStorage",
13+
"DatabaseSessionStorage",
14+
"HybridSessionStorage",
15+
)

tests/crud/test_session_backend_parameters.py

Lines changed: 85 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pytest
44

55
from crudadmin import CRUDAdmin
6+
from crudadmin.session import backends as session_backends
67
from tests.crud.test_admin import create_test_db_config
78

89

@@ -25,17 +26,23 @@ async def test_redis_url_configuration(self, async_session):
2526
try:
2627
# Test basic URL
2728
admin.use_redis_sessions(redis_url="redis://localhost:6379/0")
28-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
29+
assert isinstance(
30+
admin.session_manager.storage, session_backends.RedisSessionStorage
31+
)
2932

3033
# Test URL with password
3134
admin.use_redis_sessions(redis_url="redis://user:pass@localhost:6379/1")
32-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
35+
assert isinstance(
36+
admin.session_manager.storage, session_backends.RedisSessionStorage
37+
)
3338

3439
# Test complex URL
3540
admin.use_redis_sessions(
3641
redis_url="redis://admin:[email protected]:6380/2"
3742
)
38-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
43+
assert isinstance(
44+
admin.session_manager.storage, session_backends.RedisSessionStorage
45+
)
3946

4047
except ImportError:
4148
pytest.skip("Redis not available")
@@ -56,23 +63,33 @@ async def test_redis_individual_parameters(self, async_session):
5663
try:
5764
# Test basic parameters
5865
admin.use_redis_sessions(host="localhost", port=6379, db=0)
59-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
66+
assert isinstance(
67+
admin.session_manager.storage, session_backends.RedisSessionStorage
68+
)
6069

6170
# Test with password
6271
admin.use_redis_sessions(
6372
host="localhost", port=6379, db=1, password="secret"
6473
)
65-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
74+
assert isinstance(
75+
admin.session_manager.storage, session_backends.RedisSessionStorage
76+
)
6677

6778
# Test partial parameters (others should use defaults)
6879
admin.use_redis_sessions(host="custom-host")
69-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
80+
assert isinstance(
81+
admin.session_manager.storage, session_backends.RedisSessionStorage
82+
)
7083

7184
admin.use_redis_sessions(port=6380)
72-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
85+
assert isinstance(
86+
admin.session_manager.storage, session_backends.RedisSessionStorage
87+
)
7388

7489
admin.use_redis_sessions(db=3)
75-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
90+
assert isinstance(
91+
admin.session_manager.storage, session_backends.RedisSessionStorage
92+
)
7693

7794
except ImportError:
7895
pytest.skip("Redis not available")
@@ -92,7 +109,9 @@ async def test_redis_defaults(self, async_session):
92109

93110
try:
94111
admin.use_redis_sessions()
95-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
112+
assert isinstance(
113+
admin.session_manager.storage, session_backends.RedisSessionStorage
114+
)
96115
except ImportError:
97116
pytest.skip("Redis not available")
98117

@@ -172,13 +191,18 @@ async def test_redis_additional_parameters(self, async_session):
172191
admin.use_redis_sessions(
173192
redis_url="redis://localhost:6379/0", pool_size=20, connect_timeout=10
174193
)
175-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
194+
195+
assert isinstance(
196+
admin.session_manager.storage, session_backends.RedisSessionStorage
197+
)
176198

177199
# Test with additional parameters via individual params
178200
admin.use_redis_sessions(
179201
host="localhost", port=6379, db=0, pool_size=15, connect_timeout=5
180202
)
181-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
203+
assert isinstance(
204+
admin.session_manager.storage, session_backends.RedisSessionStorage
205+
)
182206

183207
except ImportError:
184208
pytest.skip("Redis not available")
@@ -384,15 +408,21 @@ async def test_memcached_servers_configuration(self, async_session):
384408
try:
385409
# Test single server
386410
admin.use_memcached_sessions(servers=["localhost:11211"])
387-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
411+
assert isinstance(
412+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
413+
)
388414

389415
# Test multiple servers
390416
admin.use_memcached_sessions(servers=["localhost:11211", "server2:11211"])
391-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
417+
assert isinstance(
418+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
419+
)
392420

393421
# Test custom ports
394422
admin.use_memcached_sessions(servers=["localhost:11212", "server2:11213"])
395-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
423+
assert isinstance(
424+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
425+
)
396426

397427
except ImportError:
398428
pytest.skip("Memcached not available")
@@ -413,22 +443,32 @@ async def test_memcached_individual_parameters(self, async_session):
413443
try:
414444
# Test basic parameters
415445
admin.use_memcached_sessions(host="localhost", port=11211)
416-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
446+
assert isinstance(
447+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
448+
)
417449

418450
# Test custom host
419451
admin.use_memcached_sessions(host="memcached.example.com", port=11211)
420-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
452+
assert isinstance(
453+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
454+
)
421455

422456
# Test custom port
423457
admin.use_memcached_sessions(host="localhost", port=11212)
424-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
458+
assert isinstance(
459+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
460+
)
425461

426462
# Test partial parameters
427463
admin.use_memcached_sessions(host="custom-host")
428-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
464+
assert isinstance(
465+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
466+
)
429467

430468
admin.use_memcached_sessions(port=11213)
431-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
469+
assert isinstance(
470+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
471+
)
432472

433473
except ImportError:
434474
pytest.skip("Memcached not available")
@@ -448,7 +488,9 @@ async def test_memcached_defaults(self, async_session):
448488

449489
try:
450490
admin.use_memcached_sessions()
451-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
491+
assert isinstance(
492+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
493+
)
452494
except ImportError:
453495
pytest.skip("Memcached not available")
454496

@@ -510,11 +552,15 @@ async def test_memcached_additional_parameters(self, async_session):
510552
try:
511553
# Test with additional parameters via servers
512554
admin.use_memcached_sessions(servers=["localhost:11211"], pool_size=20)
513-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
555+
assert isinstance(
556+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
557+
)
514558

515559
# Test with additional parameters via individual params
516560
admin.use_memcached_sessions(host="localhost", port=11211, pool_size=15)
517-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
561+
assert isinstance(
562+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
563+
)
518564

519565
except ImportError:
520566
pytest.skip("Memcached not available")
@@ -602,20 +648,27 @@ async def test_track_sessions_in_db_flag_management(self, async_session):
602648
# Switch to database sessions
603649
admin.use_database_sessions()
604650
assert admin.track_sessions_in_db is True
605-
assert "DatabaseSessionStorage" in str(type(admin.session_manager.storage))
651+
assert isinstance(
652+
admin.session_manager.storage, session_backends.DatabaseSessionStorage
653+
)
606654

607655
# Switch to memory sessions (should reset flag)
608656
admin.use_memory_sessions()
609657
assert admin.track_sessions_in_db is False
610-
assert "MemorySessionStorage" in str(type(admin.session_manager.storage))
658+
assert isinstance(
659+
admin.session_manager.storage, session_backends.MemorySessionStorage
660+
)
611661

612662
# Switch to Redis with explicit tracking
613663
try:
614664
admin.use_redis_sessions(host="localhost", track_sessions_in_db=True)
615665
assert admin.track_sessions_in_db is True
616666
# Should be HybridSessionStorage when Redis + DB tracking
617-
storage_name = type(admin.session_manager.storage).__name__
618-
assert storage_name in ["HybridSessionStorage", "RedisSessionStorage"]
667+
storage_name = type(admin.session_manager.storage)
668+
assert storage_name in [
669+
session_backends.HybridSessionStorage,
670+
session_backends.RedisSessionStorage,
671+
]
619672
except ImportError:
620673
pytest.skip("Redis not available")
621674

@@ -639,7 +692,9 @@ async def test_redis_positional_argument(self, async_session):
639692
try:
640693
# Old way should still work
641694
admin.use_redis_sessions("redis://localhost:6379/0")
642-
assert "RedisSessionStorage" in str(type(admin.session_manager.storage))
695+
assert isinstance(
696+
admin.session_manager.storage, session_backends.RedisSessionStorage
697+
)
643698
except ImportError:
644699
pytest.skip("Redis not available")
645700

@@ -659,7 +714,9 @@ async def test_memcached_positional_argument(self, async_session):
659714
try:
660715
# Old way should still work
661716
admin.use_memcached_sessions(["localhost:11211"])
662-
assert "MemcachedSessionStorage" in str(type(admin.session_manager.storage))
717+
assert isinstance(
718+
admin.session_manager.storage, session_backends.MemcachedSessionStorage
719+
)
663720
except ImportError:
664721
pytest.skip("Memcached not available")
665722

0 commit comments

Comments
 (0)