backend-api/pipeline/tests/test_file_adapter.py

53 lines
1.5 KiB
Python

import io
import pytest
from fastapi import UploadFile
from ingestion.adapters.file_adapter import FileAdapter
def make_upload_file(content: str, filename: str) -> UploadFile:
return UploadFile(
filename=filename,
file=io.BytesIO(content.encode("utf-8")),
)
async def test_file_adapter_csv():
csv_content = "id,name,price\n001,Apple,12\n002,Orange,10\n003,Banana,8"
upload = make_upload_file(csv_content, "test.csv")
adapter = FileAdapter(upload)
records = await adapter.fetch()
assert len(records) == 3
assert records[0].data["name"] == "Apple"
assert records[1].data["price"] == 10
assert records[2].data["id"] == 3
async def test_file_adapter_json():
json_content = """
[{"id": "001", "name": "Apple", "price": 12},
{"id": "002", "name": "Orange", "price": 10},
{"id": "003", "name": "Banana", "price": 8}]
"""
upload = make_upload_file(json_content, "test.json")
adapter = FileAdapter(upload)
records = await adapter.fetch()
assert len(records) == 3
assert records[0].data["name"] == "Apple"
assert records[1].data["price"] == 10
assert records[2].data["id"] == 3
async def test_file_adapter_missing_filename():
upload = UploadFile(
filename="",
file=io.BytesIO("id,name,price\n001,Apple,12".encode("utf-8")),
)
adapter = FileAdapter(upload)
with pytest.raises(ValueError) as excinfo:
await adapter.fetch()
assert "File name is required" in str(excinfo.value)