Files
OperatorSchedule/tests/test_config.py

140 lines
5.8 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.
"""
test_config.py - Тесты для конфигурации
Проверяют корректность чтения и структуры config.py
"""
import pytest
from config import YEAR, MONTH, SHIFTS, OPERATORS, OPERATOR_PREFERENCES
class TestConfigConstants:
"""Тесты для констант конфигурации"""
def test_year_is_int(self):
"""Год должен быть целым числом"""
assert isinstance(YEAR, int)
assert YEAR == 2026
def test_month_is_int(self):
"""Месяц должен быть целым числом"""
assert isinstance(MONTH, int)
assert MONTH == 4
def test_month_in_range(self):
"""Месяц должен быть в диапазоне 1-12"""
assert 1 <= MONTH <= 12
def test_shifts_is_list(self):
"""Смены должны быть списком"""
assert isinstance(SHIFTS, list)
assert len(SHIFTS) == 4
def test_shifts_structure(self):
"""Каждая смена должна быть кортежем из двух чисел"""
for shift in SHIFTS:
assert isinstance(shift, tuple)
assert len(shift) == 2
start, end = shift
assert isinstance(start, (int, float))
assert isinstance(end, (int, float))
assert start < end
def test_operators_is_list(self):
"""Операторы должны быть списком"""
assert isinstance(OPERATORS, list)
assert len(OPERATORS) > 0
def test_operators_not_empty(self):
"""Список операторов не должен быть пустым"""
assert len(OPERATORS) >= 1
def test_operators_strings(self):
"""Все операторы должны быть строками"""
for op in OPERATORS:
assert isinstance(op, str)
assert len(op) > 0
def test_operator_preferences_structure(self):
"""Структура предпочтений должна быть корректной"""
assert isinstance(OPERATOR_PREFERENCES, dict)
assert len(OPERATOR_PREFERENCES) == len(OPERATORS)
def test_operator_preferences_values(self):
"""Значения предпочтений должны быть словарями"""
for op, prefs in OPERATOR_PREFERENCES.items():
assert isinstance(prefs, dict)
# Проверка, что ключи предпочтений корректны
valid_keys = {'dates', 'day_of_week', 'shift', 'off_dates'}
assert set(prefs.keys()).issubset(valid_keys)
class TestConfigDates:
"""Тесты для дат"""
def test_year_is_positive(self):
"""Год должен быть положительным"""
assert YEAR > 0
def test_month_is_valid(self):
"""Месяц должен быть валидным (1-12)"""
assert 1 <= MONTH <= 12
def test_shifts_time_valid(self):
"""Время смены должно быть валидным (0-24)"""
for start, end in SHIFTS:
assert 0 <= start <= 24
assert 0 <= end <= 24
assert start < end
class TestConfigOperators:
"""Тесты для операторов"""
def test_operators_unique(self):
"""Имена операторов должны быть уникальными"""
assert len(OPERATORS) == len(set(OPERATORS))
def test_operators_no_empty_strings(self):
"""Имена операторов не должны быть пустыми строками"""
for op in OPERATORS:
assert op.strip() != ""
def test_operators_no_special_chars(self):
"""Имена операторов не должны содержать специальные символы"""
for op in OPERATORS:
assert not any(c in op for c in ['<', '>', '/', '\\', '|', ':', '*', '?', '"'])
class TestConfigPreferences:
"""Тесты для предпочтений операторов"""
def test_all_operators_have_preferences(self):
"""Все операторы должны иметь предпочтения"""
assert len(OPERATOR_PREFERENCES) == len(OPERATORS)
def test_dates_in_range(self):
"""Дни в предпочтениях должны быть в диапазоне 1-31"""
for prefs in OPERATOR_PREFERENCES.values():
if 'dates' in prefs:
for day in prefs['dates']:
assert 1 <= day <= 31
def test_shift_in_range(self):
"""Смена в предпочтениях должна быть в диапазоне 0-3"""
for prefs in OPERATOR_PREFERENCES.values():
if 'shift' in prefs:
assert 0 <= prefs['shift'] <= 3
def test_day_of_week_valid(self):
"""День недели в предпочтениях должен быть валидным"""
for prefs in OPERATOR_PREFERENCES.values():
if 'day_of_week' in prefs:
day_str = prefs['day_of_week']
# Проверяем, что это строка с валидным значением
assert day_str.lower() in ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье']
def test_off_dates_in_range(self):
"""Дни отдыха должны быть в диапазоне 1-31"""
for prefs in OPERATOR_PREFERENCES.values():
if 'off_dates' in prefs:
for day in prefs['off_dates']:
assert 1 <= day <= 31