Files
OperatorSchedule/tests/test_models.py

137 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
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.
"""Тест моделей данных для операторов и смен"""
import sys
sys.path.insert(0, 'src')
from datetime import date, datetime
from domains.models.operator import Operator, ShiftType
from domains.models.shift import Shift, ShiftTypeEnum
from domains.models.preference import OperatorPreferences, Preference
def test_operator():
"""Тест модели оператора"""
print("=" * 60)
print("TEST: Model Operator")
print("=" * 60)
# Создание оператора
operator = Operator(
id="OP001",
name="Иванов Иван Иванович",
department="Склад",
email="ivanov@company.com",
skills=["Morning", "Afternoon", "Evening"],
preferred_days=[1, 2, 3, 4, 5],
max_shifts_per_week=4,
max_weekly_hours=32
)
print(f"\nOperator: {operator}")
print(f"ID: {operator.id}")
print(f"Name: {operator.name}")
print(f"Department: {operator.department}")
print(f"Skills: {operator.skills}")
print(f"Preferred days: {operator.preferred_days}")
print(f"Can work 'Night' shift: {operator.can_work_shift(ShiftType.NIGHT)}")
# Проверка доступности
availability = operator.get_availability()
print(f"\nAvailability info:")
print(f" Total shifts assigned: {availability['total_shifts_assigned']}")
print(f" Available for assignment: {availability['available_for_assignment']}")
def test_shift():
"""Тест модели смены"""
print("\n" + "=" * 60)
print("TEST: Model Shift")
print("=" * 60)
# Создание смены
shift_date = date(2024, 12, 9) # Пятница
shift = Shift(
date=shift_date, # Используем datetime.date объект
shift_type=ShiftTypeEnum.AFTERNOON,
start_time="14:00",
end_time="22:00",
department_required="Склад",
required_skills=["Evening"],
min_operators=2,
max_operators=4,
description="Вечерняя смена на складе"
)
print(f"\nShift: {shift}")
print(f"Date: {shift.date}")
print(f"Type: {shift.shift_type}")
print(f"Start time: {shift.start_time}")
print(f"End time: {shift.end_time}")
print(f"Duration (hours): {shift.duration_hours}")
# Проверка совместимости
op = Operator(
id="OP001",
name="Иванов",
skills=["Afternoon"]
)
is_available = shift.is_available(op)
print(f"\nOperator {op.name} available for this shift: {is_available}")
def test_preferences():
"""Тест модели предпочтений"""
print("\n" + "=" * 60)
print("TEST: Model Preferences")
print("=" * 60)
# Создание предпочтений
prefs = OperatorPreferences(
operator_id="OP001",
shift_preferences=[],
day_preferences=[],
time_preferences=[],
rest_preferences=[],
sequence_preferences=[]
)
# Добавление предпочтений
prefs.add_shift_preference(
ShiftType.MORNING,
strength=80,
reason="Хочу работать утром"
)
prefs.add_day_preference(
{1, 2, 3}, # Пн-Ср
strength=70,
reason="Лучше работать в начале недели"
)
prefs.add_time_preference(
ShiftType.MORNING,
strength=75,
reason="Вечерная работа - не хочу"
)
print(f"\nNumber of shift preferences: {len(prefs.shift_preferences)}")
print(f"Number of day preferences: {len(prefs.day_preferences)}")
# Получение лучших предпочтений
best_shift = prefs.get_best_shift_type()
best_days = prefs.get_best_days()
print(f"Best shift type: {best_shift}")
print(f"Best days: {best_days}")
def test_all():
"""Запуск всех тестов"""
test_operator()
test_shift()
test_preferences()
print("\n" + "=" * 60)
print("All tests passed! ✓")
print("=" * 60)
if __name__ == "__main__":
test_all()