# Copyright (c) 2026, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors # # SPDX-License-Identifier: Apache-2.0 import pytest from dirty_equals import IsFloat from ag2.events import BinaryResult, FileIdInput, Input from ag2.files import FileContent, FileProvider, UploadedFile class TestUploadedFile: def test_is_file_id_input(self) -> None: assert isinstance(UploadedFile(file_id="file-123", filename="test.pdf"), FileIdInput) def test_is_input(self) -> None: assert isinstance(UploadedFile(file_id="file-123"), Input) def test_fields_preserved(self) -> None: f = UploadedFile( file_id="file-123", filename="doc.pdf", provider=FileProvider.OPENAI, bytes_count=1024, purpose="assistants", created_at=1767225600.0, ) assert f == UploadedFile( file_id="file-123", filename="doc.pdf", provider=FileProvider.OPENAI, bytes_count=1024, purpose="assistants", created_at=1767225600.0, ) assert f.created_at == 1767225600.0 def test_minimal_construction_defaults(self) -> None: assert UploadedFile(file_id="file-456") == UploadedFile( file_id="file-456", filename=None, provider=None, bytes_count=None, purpose=None, created_at=IsFloat(), ) class TestFileContent: def test_frozen(self) -> None: fc = FileContent(name="test.txt", data=b"hello") with pytest.raises(AttributeError): fc.name = "other.txt" # type: ignore[misc] def test_fields_preserved(self) -> None: assert FileContent(name="doc.pdf", data=b"pdf-bytes", media_type="application/pdf") == FileContent( name="doc.pdf", data=b"pdf-bytes", media_type="application/pdf", ) class TestBinaryResult: def test_name_from_metadata(self) -> None: br = BinaryResult(data=b"image-bytes", metadata={"filename": "cat.png", "size": "512x512"}) assert br.name == "cat.png" def test_name_default(self) -> None: assert BinaryResult(data=b"data").name == "generated_file" @pytest.mark.asyncio async def test_binary_result_content_returns_bytes() -> None: br = BinaryResult(data=b"raw-data", metadata={"filename": "out.bin"}) assert await br.content() == b"raw-data"