/
aastray
/
StudentPart
Обзор
Документация
Войти
/
aastray
/
StudentPart
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
service/test/test_description.py
162 строки
7 KB
aastray
Реализован функционал загрузки файлов и просмотра документов, удалены базовые эндпоинты, обновлена документация
10 янв 2026, 15:38
10 янв 2026, 15:38
4d47c55
Код
Авторство
О чём код?
""" Тесты для функции get_description() Для запуска в терминале: python -m pytest .\tests\test_description.py """ import sys import os import pytest from unittest.mock import patch, Mock, PropertyMock import json # Добавляем путь для импорта (теперь путь другой) sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) class TestGetDescription: """Тесты функции get_description()""" def test_data_format(self): """ Тест 1: Формат получаемых данных Проверяем что функция возвращает объект с полями Name и Description """ print("\n=== Тест 1: Формат данных ===") # Импортируем внутри теста from src.services.description import get_description # Создаем mock для settings mock_settings = Mock() mock_settings.DT_INFO = { "DT_NAME": "Digital Twin Production", "DT_DESCRIPTION": "Система цифрового двойника производства" } # Правильно патчим settings (путь изменился!) with patch('app.services.description.settings', mock_settings): result = get_description() print(f"Результат: {result}") print(f"Тип результата: {type(result).__name__}") # Проверяем что это объект (DescriptionSchema) assert hasattr(result, 'Name'), "Объект должен иметь поле Name" assert hasattr(result, 'Description'), "Объект должен иметь поле Description" # Проверяем типы данных assert isinstance(result.Name, str), "Name должен быть строкой" assert isinstance(result.Description, str), "Description должен быть строкой" # Проверяем значения assert result.Name == "Digital Twin Production" assert result.Description == "Система цифрового двойника производства" print("✅ Формат данных правильный") def test_function_real_data(self): """ Тест 2: Реальные данные функции Проверяем реальные данные из настроек """ print("\n=== Тест 2: Реальные данные ===") from src.services.description import get_description result = get_description() print(f"Результат: {result}") # Проверяем структуру assert hasattr(result, 'Name'), "Нет поля Name" assert hasattr(result, 'Description'), "Нет поля Description" # Проверяем что поля не None assert result.Name is not None, "Name не должен быть None" assert result.Description is not None, "Description не должен быть None" # Выводим реальные значения print(f"✅ Получены реальные данные:") print(f" Name: '{result.Name}'") print(f" Description: '{result.Description}'") # Проверяем конкретные значения if result.Name == "DT" and result.Description == "DT": print(" ⚠️ Значения по умолчанию: 'DT'") else: print(" 📝 Кастомные настройки") def test_error_handling(self): """ Тест 3: Обработка ошибок Проверяем как функция обрабатывает различные ошибки """ print("\n=== Тест 3: Обработка ошибок ===") from src.services.description import get_description # Тест 3.1: Пустой DT_INFO print("\n3.1: Пустой DT_INFO") mock_settings = Mock() mock_settings.DT_INFO = {} # Пустой словарь with patch('app.services.description.settings', mock_settings): result = get_description() print(f" Результат: {result}") # Проверяем что возвращается словарь с ошибкой assert isinstance(result, dict), "При ошибке должен возвращаться словарь" assert "Message" in result, "В словаре должно быть поле Message" assert "Failed to load DT_INFO" in result["Message"] print(" ✅ Ошибка обрабатывается корректно") # Тест 3.2: DT_INFO = None print("\n3.2: DT_INFO = None") mock_settings = Mock() mock_settings.DT_INFO = None with patch('app.services.description.settings', mock_settings): result = get_description() print(f" Результат: {result}") # Проверяем что функция возвращает словарь с ошибкой assert isinstance(result, dict), "Должен возвращаться словарь" assert "Message" in result, "Должно быть поле Message" print(" ✅ Ошибка None обрабатывается") # Тест 3.3: Отсутствует DT_INFO (используем PropertyMock) print("\n3.3: Отсутствует DT_INFO") mock_settings = Mock() # Удаляем атрибут DT_INFO у mock type(mock_settings).DT_INFO = PropertyMock(side_effect=AttributeError("No DT_INFO")) with patch('app.services.description.settings', mock_settings): result = get_description() print(f" Результат: {result}") # Должен быть словарь с ошибкой assert isinstance(result, dict), "Должен возвращаться словарь при AttributeError" assert "Message" in result, "Должно быть поле Message" print(" ✅ Отсутствие атрибута обрабатывается") print("✅ Все сценарии ошибок обрабатываются") def test_json_parsing(self): """ Тест 4: Проверка JSON парсинга """ print("\n=== Тест 4: JSON парсинг ===") from src.services.description import get_description mock_settings = Mock() mock_settings.DT_INFO = { "DT_NAME": "JSON System", "DT_DESCRIPTION": "Система из JSON" } with patch('app.services.description.settings', mock_settings): result = get_description() assert result.Name == "JSON System" assert result.Description == "Система из JSON" print("✅ JSON данные корректно обрабатываются")