137 lines
4.1 KiB
Python
137 lines
4.1 KiB
Python
"""Тест моделей данных для операторов и смен"""
|
||
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() |