Эндпоинты не работают
This commit is contained in:
183
tests/test_upload_with_local_storage.py
Normal file
183
tests/test_upload_with_local_storage.py
Normal file
@@ -0,0 +1,183 @@
|
||||
"""
|
||||
Тестирование загрузки файлов с сохранением в локальный storage
|
||||
"""
|
||||
import pytest
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Добавляем путь к проекту
|
||||
project_root = Path(__file__).parent.parent
|
||||
sys.path.insert(0, str(project_root / "python_parser"))
|
||||
|
||||
from core.services import ReportService, PARSERS
|
||||
from core.models import UploadRequest
|
||||
from adapters.local_storage import LocalStorageAdapter
|
||||
from adapters.parsers import SvodkaPMParser, SvodkaCAParser, MonitoringFuelParser
|
||||
|
||||
# Регистрируем парсеры
|
||||
PARSERS.update({
|
||||
'svodka_pm': SvodkaPMParser,
|
||||
'svodka_ca': SvodkaCAParser,
|
||||
'monitoring_fuel': MonitoringFuelParser,
|
||||
})
|
||||
|
||||
|
||||
class TestUploadWithLocalStorage:
|
||||
"""Тестирование загрузки файлов с локальным storage"""
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def setup_storage(self, clean_storage):
|
||||
"""Настройка локального storage для каждого теста"""
|
||||
self.storage = clean_storage
|
||||
self.report_service = ReportService(self.storage)
|
||||
|
||||
def test_upload_svodka_ca_to_local_storage(self, upload_file):
|
||||
"""Тест загрузки svodka_ca.xlsx в локальный storage"""
|
||||
file_path = upload_file("svodka_ca.xlsx")
|
||||
|
||||
# Читаем файл и создаем UploadRequest
|
||||
with open(file_path, 'rb') as f:
|
||||
file_content = f.read()
|
||||
|
||||
request = UploadRequest(
|
||||
report_type='svodka_ca',
|
||||
file_name=file_path.name,
|
||||
file_content=file_content,
|
||||
parse_params={}
|
||||
)
|
||||
|
||||
# Загружаем файл через ReportService
|
||||
result = self.report_service.upload_report(request)
|
||||
|
||||
assert result.success is True, f"Загрузка не удалась: {result.message}"
|
||||
|
||||
# Проверяем, что данные сохранились в локальном storage
|
||||
objects = self.storage.list_objects()
|
||||
assert len(objects) > 0, "Данные не сохранились в storage"
|
||||
|
||||
# Проверяем метаданные
|
||||
for obj_id in objects:
|
||||
metadata = self.storage.get_object_metadata(obj_id)
|
||||
assert metadata is not None, f"Метаданные для {obj_id} не найдены"
|
||||
assert "shape" in metadata, f"Отсутствует shape в метаданных {obj_id}"
|
||||
assert "columns" in metadata, f"Отсутствуют columns в метаданных {obj_id}"
|
||||
|
||||
print(f"✅ svodka_ca.xlsx загружен в локальный storage: {len(objects)} объектов")
|
||||
print(f" Объекты: {objects}")
|
||||
|
||||
def test_upload_pm_plan_to_local_storage(self, upload_file):
|
||||
"""Тест загрузки pm_plan.zip в локальный storage"""
|
||||
file_path = upload_file("pm_plan.zip")
|
||||
|
||||
# Читаем файл и создаем UploadRequest
|
||||
with open(file_path, 'rb') as f:
|
||||
file_content = f.read()
|
||||
|
||||
request = UploadRequest(
|
||||
report_type='svodka_pm',
|
||||
file_name=file_path.name,
|
||||
file_content=file_content,
|
||||
parse_params={}
|
||||
)
|
||||
|
||||
# Загружаем архив через ReportService
|
||||
result = self.report_service.upload_report(request)
|
||||
|
||||
assert result.success is True, f"Загрузка не удалась: {result.message}"
|
||||
|
||||
# Проверяем, что данные сохранились в локальном storage
|
||||
objects = self.storage.list_objects()
|
||||
assert len(objects) > 0, "Данные не сохранились в storage"
|
||||
|
||||
# Проверяем метаданные
|
||||
for obj_id in objects:
|
||||
metadata = self.storage.get_object_metadata(obj_id)
|
||||
assert metadata is not None, f"Метаданные для {obj_id} не найдены"
|
||||
assert "shape" in metadata, f"Отсутствует shape в метаданных {obj_id}"
|
||||
assert "columns" in metadata, f"Отсутствуют columns в метаданных {obj_id}"
|
||||
|
||||
print(f"✅ pm_plan.zip загружен в локальный storage: {len(objects)} объектов")
|
||||
print(f" Объекты: {objects}")
|
||||
|
||||
def test_upload_monitoring_to_local_storage(self, upload_file):
|
||||
"""Тест загрузки monitoring.zip в локальный storage"""
|
||||
file_path = upload_file("monitoring.zip")
|
||||
|
||||
# Читаем файл и создаем UploadRequest
|
||||
with open(file_path, 'rb') as f:
|
||||
file_content = f.read()
|
||||
|
||||
request = UploadRequest(
|
||||
report_type='monitoring_fuel',
|
||||
file_name=file_path.name,
|
||||
file_content=file_content,
|
||||
parse_params={}
|
||||
)
|
||||
|
||||
# Загружаем архив через ReportService
|
||||
result = self.report_service.upload_report(request)
|
||||
|
||||
assert result.success is True, f"Загрузка не удалась: {result.message}"
|
||||
|
||||
# Проверяем, что данные сохранились в локальном storage
|
||||
objects = self.storage.list_objects()
|
||||
assert len(objects) > 0, "Данные не сохранились в storage"
|
||||
|
||||
# Проверяем метаданные
|
||||
for obj_id in objects:
|
||||
metadata = self.storage.get_object_metadata(obj_id)
|
||||
assert metadata is not None, f"Метаданные для {obj_id} не найдены"
|
||||
assert "shape" in metadata, f"Отсутствует shape в метаданных {obj_id}"
|
||||
assert "columns" in metadata, f"Отсутствуют columns в метаданных {obj_id}"
|
||||
|
||||
print(f"✅ monitoring.zip загружен в локальный storage: {len(objects)} объектов")
|
||||
print(f" Объекты: {objects}")
|
||||
|
||||
def test_upload_all_files_sequence(self, upload_file):
|
||||
"""Тест последовательной загрузки всех файлов"""
|
||||
# Загружаем все файлы по очереди
|
||||
files_to_upload = [
|
||||
("svodka_ca.xlsx", "svodka_ca", "file"),
|
||||
("pm_plan.zip", "svodka_pm", "zip"),
|
||||
("monitoring.zip", "monitoring_fuel", "zip")
|
||||
]
|
||||
|
||||
total_objects = 0
|
||||
|
||||
for filename, report_type, upload_type in files_to_upload:
|
||||
file_path = upload_file(filename)
|
||||
|
||||
# Читаем файл и создаем UploadRequest
|
||||
with open(file_path, 'rb') as f:
|
||||
file_content = f.read()
|
||||
|
||||
request = UploadRequest(
|
||||
report_type=report_type,
|
||||
file_name=file_path.name,
|
||||
file_content=file_content,
|
||||
parse_params={}
|
||||
)
|
||||
|
||||
result = self.report_service.upload_report(request)
|
||||
|
||||
assert result.success is True, f"Загрузка {filename} не удалась: {result.message}"
|
||||
|
||||
# Подсчитываем объекты
|
||||
objects = self.storage.list_objects()
|
||||
current_count = len(objects)
|
||||
|
||||
print(f"✅ {filename} загружен: {current_count - total_objects} новых объектов")
|
||||
total_objects = current_count
|
||||
|
||||
# Проверяем итоговое количество объектов
|
||||
final_objects = self.storage.list_objects()
|
||||
assert len(final_objects) > 0, "Ни один файл не был загружен"
|
||||
|
||||
print(f"✅ Все файлы загружены. Итого объектов в storage: {len(final_objects)}")
|
||||
print(f" Все объекты: {final_objects}")
|
||||
|
||||
# Выводим детальную информацию о каждом объекте
|
||||
for obj_id in final_objects:
|
||||
metadata = self.storage.get_object_metadata(obj_id)
|
||||
if metadata:
|
||||
print(f" 📊 {obj_id}: {metadata['shape']} колонки: {metadata['columns'][:5]}...")
|
||||
Reference in New Issue
Block a user