/
Roman88
/
contact_manager
Обзор
Документация
Войти
/
Roman88
/
contact_manager
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/tests/test_task.py
166 строк
7 KB
Roman88
16-05
16 май 2026, 10:00
16 май 2026, 10:00
d98539b
Код
Авторство
О чём код?
import datetime from src.models.user import User from src.models.contact import Contact from src.models.task import Task from src.connection.connect import connect_db, close_db, create_tables def test_task_model(): # Подключаемся к БД connect_db() # Создаем таблицы create_tables() # Создаем пользователя print("\n1. Создание пользователя...") user = User.get_or_none(User.login == "john_doe") if not user: user = User() user.login = "john_doe" user.set_password("secure_password123") user.save() print(f" Пользователь создан: {user}") else: print(f" Пользователь уже существует: {user}") # Создаем контакт print("\n2. Создание контакта...") contact = Contact.get_or_none(Contact.email == "ivan@example.com") if not contact: contact = Contact() contact.first_name = "Иван" contact.last_name = "Петров" contact.email = "ivan@example.com" contact.phone = "+7 (123) 456-78-90" contact.user = user contact.save() print(f" Контакт создан: {contact}") else: print(f" Контакт уже существует: {contact}") # Создаем задачи для контакта print("\n3. Создание задач...") # Задача 1: Высокий приоритет, срок завтра task1 = Task() task1.title = "Позвонить клиенту" task1.description = "Обсудить условия договора" task1.status = Task.STATUS_NEW task1.priority = Task.PRIORITY_HIGH task1.due_date = datetime.date.today() + datetime.timedelta(days=1) task1.contact = contact task1.save() print(f" Задача создана: {task1}") # Задача 2: Средний приоритет, срок через неделю task2 = Task() task2.title = "Отправить коммерческое предложение" task2.description = "Подготовить и отправить КП" task2.status = Task.STATUS_NEW task2.priority = Task.PRIORITY_MEDIUM task2.due_date = datetime.date.today() + datetime.timedelta(days=7) task2.contact = contact task2.save() print(f" Задача создана: {task2}") # Задача 3: Низкий приоритет, срок через месяц task3 = Task() task3.title = "Напомнить о встрече" task3.description = "" # пустое описание task3.status = Task.STATUS_NEW task3.priority = Task.PRIORITY_LOW task3.due_date = datetime.date.today() + datetime.timedelta(days=30) task3.contact = contact task3.save() print(f" Задача создана: {task3}") # Получаем все задачи контакта print("\n4. Все задачи контакта:") for task in contact.tasks: print( f" - {task.title} | {task.get_status_display()} | {task.get_priority_display()} | Срок: {task.due_date}") # Проверяем просроченные задачи print("\n5. Проверка просроченных задач:") for task in contact.tasks: if task.is_overdue(): print(f" ️ ПРОСРОЧЕНА: {task.title} (срок был {task.due_date})") else: print(f" В сроке: {task.title} (срок {task.due_date})") # Обновляем статус задачи print("\n6. Обновление статуса задачи...") task1.start_progress() print(f" Задача '{task1.title}' переведена в статус: {task1.get_status_display()}") task1.complete() print(f" Задача '{task1.title}' выполнена! Статус: {task1.get_status_display()}") # Получаем задачи по статусу print("\n7. Фильтрация задач по статусу:") new_tasks = Task.select().where(Task.status == Task.STATUS_NEW) print(f" Новые задачи: {new_tasks.count()}") in_progress_tasks = Task.select().where(Task.status == Task.STATUS_PROGRESS) print(f" В работе: {in_progress_tasks.count()}") done_tasks = Task.select().where(Task.status == Task.STATUS_DONE) print(f" Выполненные: {done_tasks.count()}") # Получаем задачи по приоритету print("\n8. Фильтрация задач по приоритету:") high_priority = Task.select().where(Task.priority == Task.PRIORITY_HIGH) print(f" Высокий приоритет: {high_priority.count()}") medium_priority = Task.select().where(Task.priority == Task.PRIORITY_MEDIUM) print(f" Средний приоритет: {medium_priority.count()}") low_priority = Task.select().where(Task.priority == Task.PRIORITY_LOW) print(f" Низкий приоритет: {low_priority.count()}") # Статистика print("\n9. Статистика:") total_tasks = Task.select().count() completed_tasks = Task.select().where(Task.status == Task.STATUS_DONE).count() completion_rate = (completed_tasks / total_tasks * 100) if total_tasks > 0 else 0 print(f" Всего задач: {total_tasks}") print(f" Выполнено: {completed_tasks}") print(f" Процент выполнения: {completion_rate:.1f}%") # Закрываем соединение close_db() def test_task_queries(): """Тест сложных запросов""" print("\n" + "=" * 50) print("ТЕСТ СЛОЖНЫХ ЗАПРОСОВ") print("=" * 50) connect_db() # Находим все просроченные невыполненные задачи print("\nПросроченные активные задачи:") overdue_tasks = Task.select().where( (Task.status != Task.STATUS_DONE) & (Task.due_date < datetime.date.today()) ) for task in overdue_tasks: print(f" - {task.title} (срок был {task.due_date})") # Находим задачи с высоким приоритетом, которые еще не выполнены print("\nАктивные задачи с высоким приоритетом:") high_priority_active = Task.select().where( (Task.priority == Task.PRIORITY_HIGH) & (Task.status != Task.STATUS_DONE) ) for task in high_priority_active: print(f" - {task.title} (статус: {task.get_status_display()})") close_db() if __name__ == "__main__": test_task_model() test_task_queries()