33from pydantic import BaseModel
44from python_anvil .models import FileCompatibleBaseModel
55from typing import Any , Optional , List
6+ import base64
67
78def test_file_compat_base_model_handles_regular_data ():
89 class TestModel (FileCompatibleBaseModel ):
@@ -22,18 +23,17 @@ class FileModel(FileCompatibleBaseModel):
2223 model = FileModel (file = test_file )
2324 data = model .model_dump ()
2425
25- # First verify we got a BufferedReader back, not a SerializationIterator
26- assert isinstance (data ['file' ], BufferedReader ), \
27- f"Expected BufferedReader but got { type (data ['file' ])} "
26+ # Verify we got a dictionary with the expected structure
27+ assert isinstance (data ['file' ], dict )
28+ assert 'data' in data ['file' ]
29+ assert 'mimetype' in data ['file' ]
30+ assert 'filename' in data ['file' ]
2831
29- # Verify the file is still readable
30- data ['file' ].seek (0 )
31- content = data ['file' ].read ()
32- assert len (content ) > 0 , "File should be readable"
33-
34- # verify the content is the same as the original file
32+ # Verify the content matches
3533 with open (__file__ , 'rb' ) as original_file :
36- assert content == original_file .read (), "File content should match original"
34+ original_content = original_file .read ()
35+ decoded_content = base64 .b64decode (data ['file' ]['data' ].encode ('utf-8' ))
36+ assert decoded_content == original_content , "File content should match original"
3737
3838def test_file_compat_base_model_validates_types ():
3939 class TestModel (FileCompatibleBaseModel ):
@@ -106,14 +106,17 @@ def test_document_upload_handles_file_objects():
106106
107107 data = doc .model_dump ()
108108
109- # Verify file object is preserved
110- assert isinstance (data ['file' ], BufferedReader ), \
111- f"Expected BufferedReader but got { type (data ['file' ])} "
109+ # Verify file is converted to expected dictionary format
110+ assert isinstance (data ['file' ], dict )
111+ assert 'data' in data ['file' ]
112+ assert 'mimetype' in data ['file' ]
113+ assert 'filename' in data ['file' ]
112114
113- # Verify file is still readable
114- data ['file' ].seek (0 )
115- content = data ['file' ].read ()
116- assert len (content ) > 0 , "File should be readable"
115+ # Verify content matches
116+ with open (__file__ , 'rb' ) as original_file :
117+ original_content = original_file .read ()
118+ decoded_content = base64 .b64decode (data ['file' ]['data' ].encode ('utf-8' ))
119+ assert decoded_content == original_content
117120
118121 # Verify other fields are correct
119122 assert data ['id' ] == "doc1"
@@ -174,17 +177,16 @@ def test_create_etch_packet_payload_handles_nested_file_objects():
174177 file_data = data ['files' ][0 ]
175178 assert file_data ['id' ] == "doc1"
176179 assert file_data ['title' ] == "Test Document"
177- assert isinstance (file_data ['file' ], BufferedReader ), \
178- f"Expected BufferedReader but got { type (file_data ['file' ])} "
179-
180- # Verify file is still readable
181- file_data ['file' ].seek (0 )
182- content = file_data ['file' ].read ()
183- assert len (content ) > 0 , "File should be readable"
180+ assert isinstance (file_data ['file' ], dict )
181+ assert 'data' in file_data ['file' ]
182+ assert 'mimetype' in file_data ['file' ]
183+ assert 'filename' in file_data ['file' ]
184184
185- # Verify the content matches the original file
185+ # Verify content matches
186186 with open (__file__ , 'rb' ) as original_file :
187- assert content == original_file .read (), "File content should match original"
187+ original_content = original_file .read ()
188+ decoded_content = base64 .b64decode (file_data ['file' ]['data' ].encode ('utf-8' ))
189+ assert decoded_content == original_content
188190
189191def test_create_etch_packet_payload_handles_multiple_files ():
190192 from python_anvil .api_resources .payload import (
@@ -250,10 +252,13 @@ def test_create_etch_packet_payload_handles_multiple_files():
250252 for i , file_data in enumerate (data ['files' ], 1 ):
251253 assert file_data ['id' ] == f"doc{ i } "
252254 assert file_data ['title' ] == f"Test Document { i } "
253- assert isinstance (file_data ['file' ], BufferedReader ), \
254- f"File { i } : Expected BufferedReader but got { type (file_data ['file' ])} "
255+ assert isinstance (file_data ['file' ], dict )
256+ assert 'data' in file_data ['file' ]
257+ assert 'mimetype' in file_data ['file' ]
258+ assert 'filename' in file_data ['file' ]
255259
256- # Verify file is readable
257- file_data ['file' ].seek (0 )
258- content = file_data ['file' ].read ()
259- assert len (content ) > 0 , f"File { i } should be readable"
260+ # Verify content matches
261+ with open (__file__ , 'rb' ) as original_file :
262+ original_content = original_file .read ()
263+ decoded_content = base64 .b64decode (file_data ['file' ]['data' ].encode ('utf-8' ))
264+ assert decoded_content == original_content
0 commit comments