image-pipeline-server / tests /integration /api /test_process_url.py
Tany Nguyen
api key protected
7f0ad46
Raw
History Blame Contribute Delete
3.35 kB
from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from fastapi import status
from fastapi.testclient import TestClient
from app.api.dependencies import get_container
from app.main import create_app
from tests.integration.api.support import (
FakeProcessRemoteImage,
FakeProcessUploadedImage,
FailingProcessRemoteImage,
InvalidProcessRemoteImage,
make_container,
)
TEST_IMAGE_URL = "https://httpbin.org/image/jpeg"
class ApiProcessUrlIntegrationTests(unittest.TestCase):
def test_process_url_returns_job_id_on_success(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
process_remote_image = FakeProcessRemoteImage()
app = create_app()
app.dependency_overrides[get_container] = lambda: make_container(
root,
process_remote_image=process_remote_image,
process_uploaded_image=FakeProcessUploadedImage(),
)
client = TestClient(app)
try:
response = client.post("/process/url", json={"sourceUrl": TEST_IMAGE_URL})
self.assertEqual(status.HTTP_200_OK, response.status_code)
self.assertEqual("test-remote-job", response.json()["jobId"])
self.assertEqual(1, len(process_remote_image.calls))
self.assertEqual(TEST_IMAGE_URL, process_remote_image.calls[0].source_url)
finally:
client.close()
app.dependency_overrides.clear()
def test_process_url_returns_500_for_runtime_errors(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
app = create_app()
app.dependency_overrides[get_container] = lambda: make_container(
root,
process_remote_image=FailingProcessRemoteImage(),
process_uploaded_image=FakeProcessUploadedImage(),
)
client = TestClient(app)
try:
response = client.post("/process/url", json={"sourceUrl": TEST_IMAGE_URL})
self.assertEqual(status.HTTP_500_INTERNAL_SERVER_ERROR, response.status_code)
self.assertEqual("Internal processing error.", response.json()["detail"])
finally:
client.close()
app.dependency_overrides.clear()
def test_process_url_returns_400_for_value_errors(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
app = create_app()
app.dependency_overrides[get_container] = lambda: make_container(
root,
process_remote_image=InvalidProcessRemoteImage(),
process_uploaded_image=FakeProcessUploadedImage(),
)
client = TestClient(app)
try:
response = client.post("/process/url", json={"sourceUrl": TEST_IMAGE_URL})
self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
self.assertEqual("invalid source", response.json()["detail"])
finally:
client.close()
app.dependency_overrides.clear()
if __name__ == "__main__":
unittest.main()