49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
# tests/db/test_migration_026.py
|
|
import pytest
|
|
from pathlib import Path
|
|
from app.db.store import Store
|
|
|
|
|
|
def test_migration_026_adds_community_pseudonyms(tmp_path):
|
|
"""Migration 026 adds community_pseudonyms table to per-user kiwi.db."""
|
|
store = Store(tmp_path / "test.db")
|
|
cur = store.conn.execute(
|
|
"SELECT name FROM sqlite_master WHERE type='table' AND name='community_pseudonyms'"
|
|
)
|
|
assert cur.fetchone() is not None, "community_pseudonyms table must exist after migrations"
|
|
store.close()
|
|
|
|
|
|
def test_migration_026_unique_index_enforces_single_current_pseudonym(tmp_path):
|
|
"""Only one is_current=1 pseudonym per directus_user_id is allowed."""
|
|
store = Store(tmp_path / "test.db")
|
|
store.conn.execute(
|
|
"INSERT INTO community_pseudonyms (pseudonym, directus_user_id, is_current) VALUES (?, ?, 1)",
|
|
("PastaWitch", "user-abc-123"),
|
|
)
|
|
store.conn.commit()
|
|
|
|
import sqlite3
|
|
with pytest.raises(sqlite3.IntegrityError):
|
|
store.conn.execute(
|
|
"INSERT INTO community_pseudonyms (pseudonym, directus_user_id, is_current) VALUES (?, ?, 1)",
|
|
("NoodleNinja", "user-abc-123"),
|
|
)
|
|
store.conn.commit()
|
|
|
|
store.close()
|
|
|
|
|
|
def test_migration_026_allows_historical_pseudonyms(tmp_path):
|
|
"""Multiple is_current=0 pseudonyms are allowed for the same user."""
|
|
store = Store(tmp_path / "test.db")
|
|
store.conn.executemany(
|
|
"INSERT INTO community_pseudonyms (pseudonym, directus_user_id, is_current) VALUES (?, ?, 0)",
|
|
[("OldName1", "user-abc-123"), ("OldName2", "user-abc-123")],
|
|
)
|
|
store.conn.commit()
|
|
cur = store.conn.execute(
|
|
"SELECT COUNT(*) FROM community_pseudonyms WHERE directus_user_id='user-abc-123'"
|
|
)
|
|
assert cur.fetchone()[0] == 2
|
|
store.close()
|