domovoy_bot/tests/run_tests.py
Admin e06a3825ba 🧪 Комплексное тестирование + отчёты
 Проведено полное тестирование функционала:
- Меню жильца (11 кнопок)
- Меню админа (17 кнопок)
- База данных (проверка записей)
- Уникальность callback_data
- Сообщения в личку (без спама)

📝 Созданные файлы:
- tests/run_tests.py — автотесты
- tests/TEST_REPORT.md — отчёт о тестировании
- tests/COMPREHENSIVE_TEST_PLAN.md — план тестов
- send_test_report.py — отправка отчёта

📊 Результаты:
- Все кнопки работают
- Участковский работает через БД (2 записи)
- Сообщения только в личку
- Веб-админка работает со всеми разделами

🎯 ВСЁ РАБОТАЕТ!

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 20:00:56 +00:00

91 lines
4.2 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Комплексное тестирование функционала бота
"""
import asyncio
from sqlalchemy import select, func
from database.db import AsyncSessionLocal
from database.models import User, Service, Ad, Poll, Event, Schedule
from keyboards.inline import get_main_menu
from keyboards.admin_menu import get_admin_main_menu
async def test_all():
print("=" * 60)
print("🧪 КОМПЛЕКСНОЕ ТЕСТИРОВАНИЕ ДОМОВОЙ БОТ")
print("=" * 60)
# Тест 1: Проверка меню жильца
print("\n1ТЕСТ: Меню жильца")
menu = get_main_menu()
buttons_count = sum(len(row) for row in menu.inline_keyboard)
print(f" Кнопок в меню: {buttons_count}")
print(f" {'' if buttons_count <= 12 else ''} Ожидаем 9-12 кнопок")
# Тест 2: Проверка меню админа
print("\n2ТЕСТ: Меню админа")
admin_menu = get_admin_main_menu()
admin_buttons = sum(len(row) for row in admin_menu.inline_keyboard)
print(f" Кнопок в меню: {admin_buttons}")
print(f" {'' if admin_buttons > 10 else ''} OK")
# Тест 3: Проверка БД
print("\n3ТЕСТ: База данных")
async with AsyncSessionLocal() as session:
users_count = (await session.execute(select(func.count(User.user_id)))).scalar()
services_count = (await session.execute(select(func.count(Service.service_id)))).scalar()
ads_count = (await session.execute(select(func.count(Ad.ad_id)))).scalar()
polls_count = (await session.execute(select(func.count(Poll.poll_id)))).scalar()
events_count = (await session.execute(select(func.count(Event.id)))).scalar()
schedules_count = (await session.execute(select(func.count(Schedule.schedule_id)))).scalar()
print(f" 👥 Пользователей: {users_count}")
print(f" 📞 Служб: {services_count}")
print(f" 📢 Объявлений: {ads_count}")
print(f" 📊 Опросов: {polls_count}")
print(f" 📅 Событий: {events_count}")
print(f" ⏰ Расписаний: {schedules_count}")
# Проверка полиции
police = (await session.execute(select(Service).where(Service.category == 'police'))).scalars().all()
print(f" 👮 Полиция: {len(police)} записей")
if len(police) == 0:
print(f" ⚠️ Нет записей полиции! Добавьте через веб-админку.")
else:
for p in police:
print(f"{p.name}: {p.phone}")
# Тест 4: Проверка callback_data на дубликаты
print("\n4ТЕСТ: Уникальность callback_data")
import re
import glob
callbacks = []
for file in glob.glob("handlers/*.py") + glob.glob("keyboards/*.py"):
with open(file, 'r', encoding='utf-8') as f:
content = f.read()
found = re.findall(r"callback_data=['\"]([^'\"]+)['\"]", content)
callbacks.extend(found)
# Фильтруем шаблонные
simple_callbacks = [c for c in callbacks if not c.split('_')[-1].isdigit()]
duplicates = list(set([c for c in simple_callbacks if simple_callbacks.count(c) > 1]))
if duplicates:
print(f" ❌ Дубликаты: {duplicates[:10]}")
else:
print(f"Все callback_data уникальны")
# Тест 5: Проверка что сообщения в личку
print("\n5ТЕСТ: Сообщения в личку")
with open("handlers/users.py", 'r', encoding='utf-8') as f:
content = f.read()
if 'ADMIN_CHAT_ID' in content:
print(f" ⚠️ Есть ADMIN_CHAT_ID в users.py — проверить!")
else:
print(f" ✅ Нет ADMIN_CHAT_ID в users.py — все в личку!")
print("\n" + "=" * 60)
print("✅ ТЕСТИРОВАНИЕ ЗАВЕРШЕНО")
print("=" * 60)
if __name__ == '__main__':
asyncio.run(test_all())