from unittest.mock import MagicMock, patch from src.clients.s3 import create_presigned_url, open_s3_seekable def test_create_presigned_url() -> None: with patch("src.clients.s3.s3") as s3_mock: s3_mock.generate_presigned_url.return_value = "https://signed.example/object" url = create_presigned_url("raw-assets", "object-key", expires_in_seconds=1800) assert str(url) == "https://signed.example/object" s3_mock.generate_presigned_url.assert_called_once_with( "get_object", Params={"Bucket": "raw-assets", "Key": "object-key"}, ExpiresIn=1800, ) def test_open_s3_seekable_opens_via_smart_open_with_our_client() -> None: handle = MagicMock() with ( patch("src.clients.s3.smart_open.open", return_value=handle) as open_mock, patch("src.clients.s3.s3") as s3_mock, ): result = open_s3_seekable("raw-assets", "object-key") assert result is handle open_mock.assert_called_once_with( "s3://raw-assets/object-key", "rb", transport_params={"client": s3_mock}, )