Files
bot_vk_ikp_prodagi/tests/test_database.py
T

109 lines
4.8 KiB
Python

def test_services_crud(tmp_db):
assert len(tmp_db.get_services()) >= 1 # сид
nid = tmp_db.add_service("X-услуга", "100 ₽", "описание")
assert nid in tmp_db.get_services()
tmp_db.update_service(nid, "price", "200 ₽")
assert tmp_db.get_services()[nid]["price"] == "200 ₽"
tmp_db.delete_service(nid)
assert nid not in tmp_db.get_services()
def test_custom_faq(tmp_db):
fid = tmp_db.add_custom_faq("привет", "Здравствуйте!")
assert tmp_db.match_custom_faq("ну привет всем") == "Здравствуйте!"
assert tmp_db.delete_custom_faq(fid)
assert tmp_db.match_custom_faq("привет") is None
def test_vacancy_options(tmp_db):
assert len(tmp_db.get_vacancy_options("player")) == 3
vid = tmp_db.add_vacancy_option("worker", "Аналитик")
assert any(l == "Аналитик" for _, l in tmp_db.get_vacancy_options("worker"))
tmp_db.delete_vacancy_option(vid)
assert not any(l == "Аналитик" for _, l in tmp_db.get_vacancy_options("worker"))
def test_applications_and_stats(tmp_db):
tmp_db.add_application(1, "player", {
"discipline": "CS2", "rank": "8", "role": "awp", "experience": "x", "contact": "@a"})
st = tmp_db.get_application_stats()
assert st["players"] == 1 and st["total"] == 1
rows = tmp_db.get_recent_applications()
assert tmp_db.set_application_status(rows[0]["id"], "принят")
def test_admins(tmp_db):
assert tmp_db.add_admin(555)
assert 555 in tmp_db.get_admins()
assert not tmp_db.add_admin(555) # дубль
assert tmp_db.remove_admin(555)
assert 555 not in tmp_db.get_admins()
def test_leads_and_vac_data(tmp_db):
tmp_db.add_lead(user_id=1, source="bot", name="A", phone="+79990001122",
service="CS2", call_time="завтра", promo=None, marketing=True)
s = tmp_db.get_lead_stats()
assert s["total"] == 1 and s["from_bot"] == 1 and s["marketing_yes"] == 1
tmp_db.set_vac_field(2, "discipline", "CS2")
assert tmp_db.get_vac_data(2)["discipline"] == "CS2"
tmp_db.clear_vac_data(2)
assert tmp_db.get_vac_data(2) == {}
def test_marketing_subscribers(tmp_db):
tmp_db.update_user_field(10, "consent_2", "Согласен")
tmp_db.update_user_field(11, "consent_2", "Не согласен")
subs = tmp_db.get_marketing_subscribers()
assert 10 in subs and 11 not in subs
def test_reminders_crud(tmp_db):
rid = tmp_db.add_reminder("Продлить домен", "2027-03-15 09:00:00", "yearly", [1, 2], created_by=1)
active = tmp_db.get_active_reminders()
assert any(r["id"] == rid for r in active)
r = next(r for r in active if r["id"] == rid)
assert r["recipients"] == [1, 2] and r["recurrence"] == "yearly"
due = tmp_db.get_due_reminders("2027-03-15 09:00:00")
assert any(r["id"] == rid for r in due)
assert tmp_db.get_due_reminders("2027-03-14 09:00:00") == []
tmp_db.update_reminder_next_at(rid, "2028-03-15 09:00:00")
r2 = next(r for r in tmp_db.get_active_reminders() if r["id"] == rid)
assert r2["next_at"] == "2028-03-15 09:00:00"
tmp_db.deactivate_reminder(rid)
assert not any(r["id"] == rid for r in tmp_db.get_active_reminders())
def test_reminders_all_recipients_and_delete(tmp_db):
rid = tmp_db.add_reminder("Оплатить сервер", "2027-01-01 09:00:00", "once", "all", created_by=1)
r = next(r for r in tmp_db.get_active_reminders() if r["id"] == rid)
assert r["recipients"] == "all"
assert tmp_db.delete_reminder(rid)
assert not tmp_db.delete_reminder(rid) # уже удалено, повторное удаление — False
def test_admin_tz_offset(tmp_db):
assert tmp_db.get_admin_tz_offset(999) is None
tmp_db.set_admin_tz_offset(999, 3)
assert tmp_db.get_admin_tz_offset(999) == 3
tmp_db.set_admin_tz_offset(999, -5) # перезапись существующего значения
assert tmp_db.get_admin_tz_offset(999) == -5
def test_reminder_pause_excludes_from_due_but_stays_visible(tmp_db):
rid = tmp_db.add_reminder("Продлить домен", "2020-01-01 09:00:00", "once", "all", created_by=1)
assert tmp_db.get_due_reminders("2020-01-01 09:00:00") # просрочено — должно найтись
tmp_db.set_reminder_paused(rid, True)
assert tmp_db.get_due_reminders("2020-01-01 09:00:00") == [] # на паузе — не должно
row = next(r for r in tmp_db.get_active_reminders() if r["id"] == rid)
assert row["paused"] == 1 # но в общем списке всё ещё видно
tmp_db.set_reminder_paused(rid, False)
assert tmp_db.get_due_reminders("2020-01-01 09:00:00") # сняли паузу — снова попадает в due
row = next(r for r in tmp_db.get_active_reminders() if r["id"] == rid)
assert row["paused"] == 0