import pytest from upload.backend.session import ( create_session, add_file, get_files, file_count, store_result, get_result, store_csv, get_csv, touch, pause_ttl, resume_ttl, request_cancel, get_cancel_event, cleanup, configure, MAX_FILE_BYTES, MAX_SESSION_BYTES ) from upload.backend.session.state import _sessions def test_session_lifecycle(): sid = create_session() assert sid in _sessions assert file_count(sid) == 0 assert get_files(sid) == [] # Add file ok = add_file(sid, "doc.txt", b"hello world") assert ok is True assert file_count(sid) == 1 files = get_files(sid) assert len(files) == 1 assert files[0] == ("doc.txt", b"hello world") # Store result and csv assert store_result(sid, b"PK...zip") is True assert get_result(sid) == b"PK...zip" assert store_csv(sid, "col1,col2\nval1,val2") is True assert get_csv(sid) == "col1,col2\nval1,val2" # Cancel event ev = get_cancel_event(sid) assert ev is not None assert not ev.is_set() assert request_cancel(sid) is True assert ev.is_set() # TTL methods do not raise touch(sid) pause_ttl(sid) resume_ttl(sid) # Cleanup cleanup(sid) assert sid not in _sessions assert get_files(sid) is None assert file_count(sid) == 0 def test_session_limits(): sid = create_session() configure(max_session_bytes=100) try: # Add 60 bytes - ok assert add_file(sid, "f1.bin", b"x" * 60) is True # Add 50 bytes - should fail (60 + 50 > 100) assert add_file(sid, "f2.bin", b"x" * 50) is False assert file_count(sid) == 1 finally: configure(max_session_bytes=500 * 1024 * 1024) cleanup(sid)