feat(tg): db schema (user_id,thread_id) PK + converter context_key
This commit is contained in:
parent
5def360f8d
commit
82dc840544
5 changed files with 283 additions and 0 deletions
0
tests/adapter/telegram/__init__.py
Normal file
0
tests/adapter/telegram/__init__.py
Normal file
50
tests/adapter/telegram/test_converter.py
Normal file
50
tests/adapter/telegram/test_converter.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from types import SimpleNamespace
|
||||
|
||||
from adapter.telegram.converter import format_outgoing, from_message
|
||||
from core.protocol import OutgoingMessage, OutgoingUI
|
||||
|
||||
|
||||
def make_message(*, text="hello", thread_id=42, user_id=1):
|
||||
m = SimpleNamespace()
|
||||
m.text = text
|
||||
m.caption = None
|
||||
m.photo = None
|
||||
m.document = None
|
||||
m.voice = None
|
||||
m.message_thread_id = thread_id
|
||||
m.from_user = SimpleNamespace(id=user_id, full_name="Alice")
|
||||
return m
|
||||
|
||||
|
||||
def test_from_message_in_topic():
|
||||
msg = make_message(thread_id=42, user_id=7)
|
||||
result = from_message(msg)
|
||||
assert result is not None
|
||||
assert result.user_id == "7"
|
||||
assert result.chat_id == "42"
|
||||
assert result.text == "hello"
|
||||
assert result.platform == "telegram"
|
||||
|
||||
|
||||
def test_from_message_in_general_returns_none():
|
||||
msg = make_message(thread_id=None)
|
||||
assert from_message(msg) is None
|
||||
|
||||
|
||||
def test_from_message_uses_caption_if_no_text():
|
||||
msg = make_message(text=None, thread_id=10)
|
||||
msg.caption = "caption text"
|
||||
result = from_message(msg)
|
||||
assert result.text == "caption text"
|
||||
|
||||
|
||||
def test_format_outgoing_message():
|
||||
event = OutgoingMessage(chat_id="42", text="response")
|
||||
assert format_outgoing(event) == "response"
|
||||
|
||||
|
||||
def test_format_outgoing_ui():
|
||||
event = OutgoingUI(chat_id="42", text="choose")
|
||||
assert format_outgoing(event) == "choose"
|
||||
80
tests/adapter/test_forum_db.py
Normal file
80
tests/adapter/test_forum_db.py
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def fresh_db(tmp_path, monkeypatch):
|
||||
monkeypatch.setenv("DB_PATH", str(tmp_path / "test.db"))
|
||||
import adapter.telegram.db as db_mod
|
||||
importlib.reload(db_mod)
|
||||
db_mod.init_db()
|
||||
return db_mod
|
||||
|
||||
|
||||
def test_create_and_get_chat(fresh_db):
|
||||
db = fresh_db
|
||||
db.create_chat(user_id=1, thread_id=100, chat_name="Чат #1")
|
||||
chat = db.get_chat(user_id=1, thread_id=100)
|
||||
assert chat is not None
|
||||
assert chat["chat_name"] == "Чат #1"
|
||||
assert chat["archived_at"] is None
|
||||
|
||||
|
||||
def test_get_chat_missing(fresh_db):
|
||||
assert fresh_db.get_chat(user_id=1, thread_id=999) is None
|
||||
|
||||
|
||||
def test_archive_chat(fresh_db):
|
||||
db = fresh_db
|
||||
db.create_chat(1, 100, "Чат #1")
|
||||
db.archive_chat(1, 100)
|
||||
chat = db.get_chat(1, 100)
|
||||
assert chat["archived_at"] is not None
|
||||
|
||||
|
||||
def test_rename_chat(fresh_db):
|
||||
db = fresh_db
|
||||
db.create_chat(1, 100, "Чат #1")
|
||||
db.rename_chat(1, 100, "Новое имя")
|
||||
assert db.get_chat(1, 100)["chat_name"] == "Новое имя"
|
||||
|
||||
|
||||
def test_get_active_chats(fresh_db):
|
||||
db = fresh_db
|
||||
db.create_chat(1, 100, "Чат #1")
|
||||
db.create_chat(1, 200, "Чат #2")
|
||||
db.archive_chat(1, 100)
|
||||
chats = db.get_active_chats(1)
|
||||
assert len(chats) == 1
|
||||
assert chats[0]["thread_id"] == 200
|
||||
|
||||
|
||||
def test_display_number(fresh_db):
|
||||
db = fresh_db
|
||||
db.create_chat(1, 100, "Чат #1")
|
||||
db.create_chat(1, 200, "Чат #2")
|
||||
db.create_chat(1, 300, "Чат #3")
|
||||
assert db.get_display_number(1, 100) == 1
|
||||
assert db.get_display_number(1, 200) == 2
|
||||
assert db.get_display_number(1, 300) == 3
|
||||
|
||||
|
||||
def test_count_active_chats(fresh_db):
|
||||
db = fresh_db
|
||||
db.create_chat(1, 100, "Чат #1")
|
||||
db.create_chat(1, 200, "Чат #2")
|
||||
db.archive_chat(1, 100)
|
||||
assert db.count_active_chats(1) == 1
|
||||
|
||||
|
||||
def test_different_users_isolated(fresh_db):
|
||||
db = fresh_db
|
||||
db.create_chat(1, 100, "Чат #1")
|
||||
db.create_chat(2, 100, "Чат #1") # same thread_id, different user
|
||||
assert db.get_chat(1, 100)["chat_name"] == "Чат #1"
|
||||
assert db.get_chat(2, 100)["chat_name"] == "Чат #1"
|
||||
db.archive_chat(1, 100)
|
||||
assert db.get_chat(1, 100)["archived_at"] is not None
|
||||
assert db.get_chat(2, 100)["archived_at"] is None
|
||||
Loading…
Add table
Add a link
Reference in a new issue