mirror of
https://github.com/EDeev/vkrepost_to_tg.git
synced 2026-10-07 20:49:50 +03:00
code/sql.py на psycopg 3 с пулом соединений; таблицы users, pages, subscribers, page_state (user и group в PostgreSQL зарезервированы), внутренние номера сохраняются. Счётчики подписок меняются одним запросом. scripts/migrate_sqlite.py переносит старые базы со сверкой (проверено на копии рабочих: 7 пользователей, 10 страниц). Тесты на PostgreSQL в CI; compose — с базой.
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
import os
|
|
import sqlite3
|
|
import sys
|
|
|
|
import psycopg
|
|
import pytest
|
|
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "scripts"))
|
|
|
|
DSN = os.environ.get("TEST_DATABASE_URL")
|
|
pytestmark = pytest.mark.skipif(not DSN, reason="нужен TEST_DATABASE_URL (PostgreSQL)")
|
|
|
|
|
|
@pytest.fixture
|
|
def pool():
|
|
with psycopg.connect(DSN, autocommit=True) as conn:
|
|
conn.execute("DROP SCHEMA public CASCADE; CREATE SCHEMA public;")
|
|
import sql
|
|
p = sql.connect(DSN)
|
|
yield p
|
|
p.close()
|
|
|
|
|
|
def test_subscriptions(pool):
|
|
from sql import Base, Users
|
|
du, db = Users(pool), Base(pool)
|
|
du.add_user(111)
|
|
uid = du.get_user_id(111)
|
|
db.add_infoUser(uid)
|
|
du.add_group(-500)
|
|
gid = du.get_group_id(-500)
|
|
db.add_infoGroup(gid, 1, 42)
|
|
db.update_user_groups(uid, str(gid))
|
|
db.update_countUser(uid, 1)
|
|
db.update_countGroup(gid, 1)
|
|
assert db.all_subUser() == [(uid, str(gid))] and db.all_activUser() == []
|
|
db.update_token(uid, "tok")
|
|
assert db.all_activUser() == [(uid, str(gid))]
|
|
assert db.all_notifGroup() == [(gid,)] and db.get_postGroup(gid) == 42 and du.get_vk_id(gid) == -500
|
|
db.update_status(uid)
|
|
assert db.get_status(uid) is False and db.all_subUser() == []
|
|
|
|
|
|
def test_migration(pool, tmp_path):
|
|
import migrate_sqlite
|
|
users = sqlite3.connect(tmp_path / "users.db")
|
|
users.executescript("""
|
|
CREATE TABLE user (id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL);
|
|
CREATE TABLE "group" (id INTEGER PRIMARY KEY, group_id INTEGER NOT NULL);
|
|
INSERT INTO user VALUES (3, 333);
|
|
INSERT INTO "group" VALUES (7, -700);
|
|
""")
|
|
users.commit()
|
|
base = sqlite3.connect(tmp_path / "base.db")
|
|
base.executescript("""
|
|
CREATE TABLE user (user_id INTEGER NOT NULL, status BOOLEAN NOT NULL DEFAULT (True), count INTEGER NOT NULL DEFAULT (0),
|
|
groups TEXT, token TEXT);
|
|
CREATE TABLE "group" (group_id INTEGER NOT NULL, type BOOLEAN NOT NULL, count INTEGER NOT NULL DEFAULT (0),
|
|
last_post INTEGER NOT NULL);
|
|
INSERT INTO user VALUES (3, 1, 1, '7', NULL);
|
|
INSERT INTO "group" VALUES (7, 1, 1, 99);
|
|
""")
|
|
base.commit()
|
|
assert migrate_sqlite.migrate(str(tmp_path), DSN, force=True)
|
|
|
|
from sql import Base, Users
|
|
du, db = Users(pool), Base(pool)
|
|
assert du.get_user_id(333) == 3 and du.get_group_id(-700) == 7
|
|
assert db.get_user_groups(3) == "7" and db.get_postGroup(7) == 99
|
|
du.add_group(-800)
|
|
assert du.get_group_id(-800) == 8
|