feat(core): initialize project structure, postgres schema and docker setup
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import asyncio
|
||||
import os
|
||||
import tempfile
|
||||
from db.database import init_db
|
||||
from db.repository import Repository
|
||||
|
||||
async def run_tests():
|
||||
with tempfile.NamedTemporaryFile(suffix=".db") as tmp:
|
||||
db_path = tmp.name
|
||||
print(f"Testing DB on {db_path}...")
|
||||
await init_db(db_path)
|
||||
repo = Repository(db_path)
|
||||
|
||||
# 1. Test Sources
|
||||
s_id = await repo.add_source(-1001234567890, "Source Tech", "source_tech")
|
||||
sources = await repo.get_active_sources()
|
||||
assert len(sources) == 1
|
||||
assert sources[0].channel_id == -1001234567890
|
||||
|
||||
# 2. Test Targets
|
||||
t_id = await repo.add_target(-1009876543210, "Target Channel", "target_chan", post_interval_min=15)
|
||||
targets = await repo.get_active_targets()
|
||||
assert len(targets) == 1
|
||||
assert targets[0].post_interval_min == 15
|
||||
|
||||
# 3. Test Raw Post & Deduplication
|
||||
post_id = await repo.create_raw_post(
|
||||
source_channel_id=-1001234567890,
|
||||
source_message_id=101,
|
||||
raw_text="Breaking news: AI update released!",
|
||||
content_hash="hash_12345",
|
||||
is_duplicate=False
|
||||
)
|
||||
assert post_id is not None
|
||||
|
||||
# Check duplicate lookup
|
||||
dup_match = await repo.find_duplicate_post("hash_12345")
|
||||
assert dup_match is not None
|
||||
assert dup_match.id == post_id
|
||||
|
||||
# 4. Test AI update & Approval flow
|
||||
await repo.update_ai_result(post_id, subject="AI/Tech", ai_text="Rewritten: AI update is now live!", suggested_target_id=t_id)
|
||||
pending_review = await repo.get_posts_by_status("pending_review")
|
||||
assert len(pending_review) == 1
|
||||
assert pending_review[0].subject == "AI/Tech"
|
||||
|
||||
await repo.approve_post(post_id, target_channel_id=t_id)
|
||||
approved_post = await repo.get_next_approved_post_for_target(t_id)
|
||||
assert approved_post is not None
|
||||
assert approved_post.id == post_id
|
||||
|
||||
await repo.mark_post_published(post_id)
|
||||
assert await repo.get_next_approved_post_for_target(t_id) is None
|
||||
|
||||
# 5. Settings
|
||||
await repo.set_setting("system_prompt", "You are a professional editor.")
|
||||
val = await repo.get_setting("system_prompt")
|
||||
assert val == "You are a professional editor."
|
||||
|
||||
print("All database tests passed successfully!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(run_tests())
|
||||
Reference in New Issue
Block a user