140 lines
5.8 KiB
Python
140 lines
5.8 KiB
Python
"""
|
||
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 |