77
88from ..resources import get_test_resource_path
99
10+ IMPORT_FORM_DATA_SUCCESS_CASES = (
11+ pytest .param (
12+ ("acroform.pdf" , "test-data-acro.xml" , None ),
13+ id = "acro-xml" ,
14+ ),
15+ pytest .param (
16+ ("acroform.pdf" , "test-data-acro.xfdf" , None ),
17+ id = "acro-xfdf" ,
18+ ),
19+ pytest .param (
20+ ("xfa.pdf" , "test-data-xfa.xml" , None ),
21+ id = "xfa-xml" ,
22+ ),
23+ pytest .param (
24+ ("xfa.pdf" , "test-data-xfa.xdp" , None ),
25+ id = "xfa-xdp" ,
26+ ),
27+ pytest .param (
28+ (
29+ "xfa.pdf" ,
30+ "test-data-xfa.xfd" ,
31+ "application/vnd.adobe.xfd+xml" ,
32+ ),
33+ id = "xfa-xfd" ,
34+ ),
35+ )
36+
37+
38+ @pytest .fixture (scope = "module" , params = IMPORT_FORM_DATA_SUCCESS_CASES )
39+ def uploaded_success_import_form_data_case (
40+ pdfrest_api_key : str ,
41+ pdfrest_live_base_url : str ,
42+ request : pytest .FixtureRequest ,
43+ ) -> tuple [PdfRestFile , PdfRestFile ]:
44+ pdf_resource_name , data_resource_name , forced_data_mime = request .param
45+ pdf_resource = get_test_resource_path (pdf_resource_name )
46+ data_resource = get_test_resource_path (data_resource_name )
47+
48+ with PdfRestClient (
49+ api_key = pdfrest_api_key ,
50+ base_url = pdfrest_live_base_url ,
51+ ) as client :
52+ input_file = client .files .create_from_paths ([pdf_resource ])[0 ]
53+ data_file = client .files .create_from_paths ([data_resource ])[0 ]
54+
55+ # pdfRest currently reports .xfd uploads as application/octet-stream.
56+ # Override the local MIME metadata so the request can exercise xfd imports.
57+ if forced_data_mime is not None :
58+ data_file = data_file .model_copy (update = {"type" : forced_data_mime })
59+
60+ return input_file , data_file
61+
1062
1163@pytest .fixture (scope = "module" )
12- def uploaded_pdf_with_forms (
64+ def uploaded_acro_import_pair (
1365 pdfrest_api_key : str ,
1466 pdfrest_live_base_url : str ,
15- ) -> PdfRestFile :
16- resource = get_test_resource_path ("form_with_data.pdf" )
67+ ) -> tuple [PdfRestFile , PdfRestFile ]:
68+ acro_pdf = get_test_resource_path ("acroform.pdf" )
69+ acro_data = get_test_resource_path ("test-data-acro.xml" )
70+
1771 with PdfRestClient (
1872 api_key = pdfrest_api_key ,
1973 base_url = pdfrest_live_base_url ,
2074 ) as client :
21- return client .files .create_from_paths ([resource ])[0 ]
75+ input_file = client .files .create_from_paths ([acro_pdf ])[0 ]
76+ data_file = client .files .create_from_paths ([acro_data ])[0 ]
77+
78+ return input_file , data_file
2279
2380
2481@pytest .fixture (scope = "module" )
25- def uploaded_form_data_file (
82+ def uploaded_acro_fdf_import_pair (
2683 pdfrest_api_key : str ,
2784 pdfrest_live_base_url : str ,
28- ) -> PdfRestFile :
29- resource = get_test_resource_path ("form_data.xml" )
85+ ) -> tuple [PdfRestFile , PdfRestFile ]:
86+ acro_pdf = get_test_resource_path ("acroform.pdf" )
87+ acro_fdf = get_test_resource_path ("test-data-acro.fdf" )
88+
3089 with PdfRestClient (
3190 api_key = pdfrest_api_key ,
3291 base_url = pdfrest_live_base_url ,
3392 ) as client :
34- return client .files .create_from_paths ([resource ])[0 ]
93+ input_file = client .files .create_from_paths ([acro_pdf ])[0 ]
94+ data_file = client .files .create_from_paths ([acro_fdf ])[0 ]
95+
96+ return input_file , data_file
3597
3698
3799@pytest .mark .parametrize (
@@ -44,14 +106,17 @@ def uploaded_form_data_file(
44106def test_live_import_form_data (
45107 pdfrest_api_key : str ,
46108 pdfrest_live_base_url : str ,
47- uploaded_pdf_with_forms : PdfRestFile ,
48- uploaded_form_data_file : PdfRestFile ,
109+ uploaded_success_import_form_data_case : tuple [PdfRestFile , PdfRestFile ],
49110 output_name : str | None ,
50111) -> None :
51112 kwargs : dict [str , str ] = {}
52113 if output_name is not None :
53114 kwargs ["output" ] = output_name
54115
116+ uploaded_pdf_with_forms , uploaded_form_data_file = (
117+ uploaded_success_import_form_data_case
118+ )
119+
55120 with PdfRestClient (
56121 api_key = pdfrest_api_key ,
57122 base_url = pdfrest_live_base_url ,
@@ -65,6 +130,8 @@ def test_live_import_form_data(
65130 assert response .output_files
66131 output_file = response .output_file
67132 assert output_file .type == "application/pdf"
133+ assert output_file .size > 0
134+ assert response .warning is None
68135 assert str (uploaded_pdf_with_forms .id ) in {
69136 str (file_id ) for file_id in response .input_ids
70137 }
@@ -81,9 +148,12 @@ def test_live_import_form_data(
81148async def test_live_async_import_form_data_success (
82149 pdfrest_api_key : str ,
83150 pdfrest_live_base_url : str ,
84- uploaded_pdf_with_forms : PdfRestFile ,
85- uploaded_form_data_file : PdfRestFile ,
151+ uploaded_success_import_form_data_case : tuple [PdfRestFile , PdfRestFile ],
86152) -> None :
153+ uploaded_pdf_with_forms , uploaded_form_data_file = (
154+ uploaded_success_import_form_data_case
155+ )
156+
87157 async with AsyncPdfRestClient (
88158 api_key = pdfrest_api_key ,
89159 base_url = pdfrest_live_base_url ,
@@ -98,6 +168,8 @@ async def test_live_async_import_form_data_success(
98168 output_file = response .output_file
99169 assert output_file .name .startswith ("async-imported" )
100170 assert output_file .type == "application/pdf"
171+ assert output_file .size > 0
172+ assert response .warning is None
101173 assert str (uploaded_pdf_with_forms .id ) in {
102174 str (file_id ) for file_id in response .input_ids
103175 }
@@ -106,12 +178,54 @@ async def test_live_async_import_form_data_success(
106178 }
107179
108180
181+ def test_live_import_form_data_fdf_server_error (
182+ pdfrest_api_key : str ,
183+ pdfrest_live_base_url : str ,
184+ uploaded_acro_fdf_import_pair : tuple [PdfRestFile , PdfRestFile ],
185+ ) -> None :
186+ uploaded_pdf_with_forms , uploaded_form_data_file = uploaded_acro_fdf_import_pair
187+
188+ with (
189+ PdfRestClient (
190+ api_key = pdfrest_api_key ,
191+ base_url = pdfrest_live_base_url ,
192+ ) as client ,
193+ pytest .raises (
194+ PdfRestApiError ,
195+ match = r"(?i)(issue processing|filled correctly|corrupted)" ,
196+ ),
197+ ):
198+ client .import_form_data (uploaded_pdf_with_forms , uploaded_form_data_file )
199+
200+
201+ @pytest .mark .asyncio
202+ async def test_live_async_import_form_data_fdf_server_error (
203+ pdfrest_api_key : str ,
204+ pdfrest_live_base_url : str ,
205+ uploaded_acro_fdf_import_pair : tuple [PdfRestFile , PdfRestFile ],
206+ ) -> None :
207+ uploaded_pdf_with_forms , uploaded_form_data_file = uploaded_acro_fdf_import_pair
208+
209+ async with AsyncPdfRestClient (
210+ api_key = pdfrest_api_key ,
211+ base_url = pdfrest_live_base_url ,
212+ ) as client :
213+ with pytest .raises (
214+ PdfRestApiError ,
215+ match = r"(?i)(issue processing|filled correctly|corrupted)" ,
216+ ):
217+ await client .import_form_data (
218+ uploaded_pdf_with_forms , uploaded_form_data_file
219+ )
220+
221+
109222def test_live_import_form_data_invalid_data_file_id (
110223 pdfrest_api_key : str ,
111224 pdfrest_live_base_url : str ,
112- uploaded_pdf_with_forms : PdfRestFile ,
113- uploaded_form_data_file : PdfRestFile ,
225+ uploaded_acro_import_pair : tuple [PdfRestFile , PdfRestFile ],
114226) -> None :
227+ uploaded_pdf_with_forms , uploaded_form_data_file = uploaded_acro_import_pair
228+
115229 with (
116230 PdfRestClient (
117231 api_key = pdfrest_api_key ,
@@ -130,9 +244,10 @@ def test_live_import_form_data_invalid_data_file_id(
130244async def test_live_async_import_form_data_invalid_data_file_id (
131245 pdfrest_api_key : str ,
132246 pdfrest_live_base_url : str ,
133- uploaded_pdf_with_forms : PdfRestFile ,
134- uploaded_form_data_file : PdfRestFile ,
247+ uploaded_acro_import_pair : tuple [PdfRestFile , PdfRestFile ],
135248) -> None :
249+ uploaded_pdf_with_forms , uploaded_form_data_file = uploaded_acro_import_pair
250+
136251 async with AsyncPdfRestClient (
137252 api_key = pdfrest_api_key ,
138253 base_url = pdfrest_live_base_url ,
0 commit comments