""" 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