11from __future__ import annotations
22
3+ from typing import cast , get_args
4+
35import pytest
46
57from pdfrest import AsyncPdfRestClient , PdfRestApiError , PdfRestClient
68from pdfrest .models import PdfRestFile
9+ from pdfrest .types import PdfColorProfile
710
811from ..resources import get_test_resource_path
912
13+ ALL_COLOR_PROFILES : tuple [PdfColorProfile , ...] = cast (
14+ tuple [PdfColorProfile , ...],
15+ get_args (PdfColorProfile ),
16+ )
17+ PRESET_COLOR_PROFILES : tuple [PdfColorProfile , ...] = tuple (
18+ color_profile for color_profile in ALL_COLOR_PROFILES if color_profile != "custom"
19+ )
20+
1021
1122@pytest .fixture (scope = "module" )
1223def uploaded_pdf_for_color_conversion (
@@ -21,20 +32,50 @@ def uploaded_pdf_for_color_conversion(
2132 return client .files .create_from_paths ([resource ])[0 ]
2233
2334
35+ @pytest .mark .parametrize (
36+ "color_profile" ,
37+ [
38+ pytest .param (color_profile , id = f"color-profile-{ color_profile } " )
39+ for color_profile in PRESET_COLOR_PROFILES
40+ ],
41+ )
42+ def test_live_convert_colors_presets_success (
43+ pdfrest_api_key : str ,
44+ pdfrest_live_base_url : str ,
45+ uploaded_pdf_for_color_conversion : PdfRestFile ,
46+ color_profile : PdfColorProfile ,
47+ ) -> None :
48+ with PdfRestClient (
49+ api_key = pdfrest_api_key ,
50+ base_url = pdfrest_live_base_url ,
51+ ) as client :
52+ response = client .convert_colors (
53+ uploaded_pdf_for_color_conversion ,
54+ color_profile = color_profile ,
55+ )
56+
57+ assert response .output_files
58+ output_file = response .output_file
59+ assert output_file .type == "application/pdf"
60+ assert output_file .size > 0
61+ assert response .warning is None
62+ assert str (response .input_id ) == str (uploaded_pdf_for_color_conversion .id )
63+
64+
2465@pytest .mark .parametrize (
2566 "output_name" ,
2667 [
2768 pytest .param (None , id = "default-output" ),
2869 pytest .param ("converted-colors" , id = "custom-output" ),
2970 ],
3071)
31- def test_live_convert_colors_success (
72+ def test_live_convert_colors_output_prefix (
3273 pdfrest_api_key : str ,
3374 pdfrest_live_base_url : str ,
3475 uploaded_pdf_for_color_conversion : PdfRestFile ,
3576 output_name : str | None ,
3677) -> None :
37- kwargs : dict [str , str | bool ] = {"color_profile" : "srgb" }
78+ kwargs : dict [str , str ] = {"color_profile" : "srgb" }
3879 if output_name is not None :
3980 kwargs ["output" ] = output_name
4081
@@ -57,7 +98,38 @@ def test_live_convert_colors_success(
5798
5899
59100@pytest .mark .asyncio
60- async def test_live_async_convert_colors_success (
101+ @pytest .mark .parametrize (
102+ "color_profile" ,
103+ [
104+ pytest .param (color_profile , id = f"color-profile-{ color_profile } " )
105+ for color_profile in PRESET_COLOR_PROFILES
106+ ],
107+ )
108+ async def test_live_async_convert_colors_presets_success (
109+ pdfrest_api_key : str ,
110+ pdfrest_live_base_url : str ,
111+ uploaded_pdf_for_color_conversion : PdfRestFile ,
112+ color_profile : PdfColorProfile ,
113+ ) -> None :
114+ async with AsyncPdfRestClient (
115+ api_key = pdfrest_api_key ,
116+ base_url = pdfrest_live_base_url ,
117+ ) as client :
118+ response = await client .convert_colors (
119+ uploaded_pdf_for_color_conversion ,
120+ color_profile = color_profile ,
121+ )
122+
123+ assert response .output_files
124+ output_file = response .output_file
125+ assert output_file .type == "application/pdf"
126+ assert output_file .size > 0
127+ assert response .warning is None
128+ assert str (response .input_id ) == str (uploaded_pdf_for_color_conversion .id )
129+
130+
131+ @pytest .mark .asyncio
132+ async def test_live_async_convert_colors_output_prefix (
61133 pdfrest_api_key : str ,
62134 pdfrest_live_base_url : str ,
63135 uploaded_pdf_for_color_conversion : PdfRestFile ,
@@ -81,6 +153,43 @@ async def test_live_async_convert_colors_success(
81153 assert str (response .input_id ) == str (uploaded_pdf_for_color_conversion .id )
82154
83155
156+ def test_live_convert_colors_invalid_color_profile (
157+ pdfrest_api_key : str ,
158+ pdfrest_live_base_url : str ,
159+ uploaded_pdf_for_color_conversion : PdfRestFile ,
160+ ) -> None :
161+ with (
162+ PdfRestClient (
163+ api_key = pdfrest_api_key ,
164+ base_url = pdfrest_live_base_url ,
165+ ) as client ,
166+ pytest .raises (PdfRestApiError , match = r"(?i)(color|profile)" ),
167+ ):
168+ client .convert_colors (
169+ uploaded_pdf_for_color_conversion ,
170+ color_profile = "srgb" ,
171+ extra_body = {"color_profile" : "not-a-color-profile" },
172+ )
173+
174+
175+ @pytest .mark .asyncio
176+ async def test_live_async_convert_colors_invalid_color_profile (
177+ pdfrest_api_key : str ,
178+ pdfrest_live_base_url : str ,
179+ uploaded_pdf_for_color_conversion : PdfRestFile ,
180+ ) -> None :
181+ async with AsyncPdfRestClient (
182+ api_key = pdfrest_api_key ,
183+ base_url = pdfrest_live_base_url ,
184+ ) as client :
185+ with pytest .raises (PdfRestApiError , match = r"(?i)(color|profile)" ):
186+ await client .convert_colors (
187+ uploaded_pdf_for_color_conversion ,
188+ color_profile = "srgb" ,
189+ extra_body = {"color_profile" : "not-a-color-profile" },
190+ )
191+
192+
84193def test_live_convert_colors_invalid_file_id (
85194 pdfrest_api_key : str ,
86195 pdfrest_live_base_url : str ,
0 commit comments