1+ import pytest
2+
3+ from deepset_mcp .api .pipeline_template .models import PipelineTemplate
4+ from deepset_mcp .api .pipeline_template .resource import PipelineTemplateResource
5+ from .test_pipeline_template_resource import create_sample_template , DummyClient
6+
7+
8+ class TestPipelineTemplateResource :
9+ """Tests for the PipelineTemplateResource class."""
10+
11+ @pytest .fixture
12+ def dummy_client (self ) -> DummyClient :
13+ """Return a basic DummyClient instance."""
14+ return DummyClient ()
15+
16+ @pytest .fixture
17+ def template_resource (self , dummy_client : DummyClient ) -> PipelineTemplateResource :
18+ """Return a PipelineTemplateResource instance with a dummy client."""
19+ return PipelineTemplateResource (client = dummy_client , workspace = "test-workspace" )
20+
21+ @pytest .mark .asyncio
22+ async def test_get_template_success (self ) -> None :
23+ """Test getting a template by name successfully."""
24+ # Create sample template data
25+ template_name = "test-template"
26+ sample_template = create_sample_template (name = template_name )
27+
28+ # Create client with predefined response
29+ client = DummyClient (
30+ responses = {
31+ f"test-workspace/pipeline_templates/{ template_name } " : sample_template
32+ }
33+ )
34+
35+ # Create resource and call get method
36+ resource = PipelineTemplateResource (client = client , workspace = "test-workspace" )
37+ result = await resource .get_template (template_name = template_name )
38+
39+ # Verify results
40+ assert isinstance (result , PipelineTemplate )
41+ assert result .template_name == template_name
42+ assert result .pipeline_type == "query"
43+ assert result .yaml_content == sample_template ["query_yaml" ]
44+ assert result .description == "A test template"
45+ assert len (result .tags ) == 1
46+
47+ # Verify request
48+ assert len (client .requests ) == 1
49+ assert client .requests [0 ]["endpoint" ] == f"v1/workspaces/test-workspace/pipeline_templates/{ template_name } "
50+ assert client .requests [0 ]["method" ] == "GET"
51+
52+ @pytest .mark .asyncio
53+ async def test_get_template_not_found (self ) -> None :
54+ """Test getting a non-existent template."""
55+ # Create client that raises an exception
56+ client = DummyClient (
57+ responses = {"test-workspace/pipeline_templates/nonexistent" : ValueError ("Template not found" )}
58+ )
59+
60+ # Create resource
61+ resource = PipelineTemplateResource (client = client , workspace = "test-workspace" )
62+
63+ # Verify exception is raised
64+ with pytest .raises (ValueError , match = "Template not found" ):
65+ await resource .get_template (template_name = "nonexistent" )
66+
67+ @pytest .mark .asyncio
68+ async def test_list_templates_default_params (self ) -> None :
69+ """Test listing templates with default parameters."""
70+ # Create sample data
71+ sample_templates = [
72+ create_sample_template (name = "Template 1" , template_id = "1fa85f64-5717-4562-b3fc-2c963f66afa6" ),
73+ create_sample_template (name = "Template 2" , template_id = "2fa85f64-5717-4562-b3fc-2c963f66afa6" ),
74+ ]
75+
76+ # Create client with predefined response
77+ client = DummyClient (
78+ responses = {
79+ "test-workspace/pipeline_templates?limit=100&page_number=1&field=created_at&order=DESC" : {
80+ "data" : sample_templates ,
81+ "has_more" : False ,
82+ "total" : 2 ,
83+ }
84+ }
85+ )
86+
87+ # Create resource and call list method
88+ resource = PipelineTemplateResource (client = client , workspace = "test-workspace" )
89+ result = await resource .list_templates ()
90+
91+ # Verify results
92+ assert len (result ) == 2
93+ assert isinstance (result [0 ], PipelineTemplate )
94+ assert result [0 ].template_name == "Template 1"
95+ assert result [1 ].template_name == "Template 2"
96+
97+ # Verify request
98+ assert len (client .requests ) == 1
99+ assert client .requests [0 ]["endpoint" ] == "v1/workspaces/test-workspace/pipeline_templates?limit=100&page_number=1&field=created_at&order=DESC"
100+ assert client .requests [0 ]["method" ] == "GET"
101+
102+ @pytest .mark .asyncio
103+ async def test_list_templates_custom_limit (self ) -> None :
104+ """Test listing templates with custom limit."""
105+ # Create sample data
106+ sample_templates = [
107+ create_sample_template (name = "Template 1" , template_id = "1fa85f64-5717-4562-b3fc-2c963f66afa6" ),
108+ ]
109+
110+ # Create client with predefined response
111+ client = DummyClient (
112+ responses = {
113+ "test-workspace/pipeline_templates?limit=1&page_number=1&field=created_at&order=DESC" : {
114+ "data" : sample_templates ,
115+ "has_more" : True ,
116+ "total" : 2 ,
117+ }
118+ }
119+ )
120+
121+ # Create resource and call list method with custom limit
122+ resource = PipelineTemplateResource (client = client , workspace = "test-workspace" )
123+ result = await resource .list_templates (limit = 1 )
124+
125+ # Verify results
126+ assert len (result ) == 1
127+ assert isinstance (result [0 ], PipelineTemplate )
128+ assert result [0 ].template_name == "Template 1"
129+
130+ # Verify request
131+ assert client .requests [0 ]["endpoint" ] == "v1/workspaces/test-workspace/pipeline_templates?limit=1&page_number=1&field=created_at&order=DESC"
132+
133+ @pytest .mark .asyncio
134+ async def test_list_templates_empty_result (self ) -> None :
135+ """Test listing templates when there are no templates."""
136+ # Create client with empty response
137+ client = DummyClient (
138+ responses = {
139+ "test-workspace/pipeline_templates?limit=100&page_number=1&field=created_at&order=DESC" : {
140+ "data" : [],
141+ "has_more" : False ,
142+ "total" : 0
143+ }
144+ }
145+ )
146+
147+ # Create resource and call list method
148+ resource = PipelineTemplateResource (client = client , workspace = "test-workspace" )
149+ result = await resource .list_templates ()
150+
151+ # Verify empty results
152+ assert len (result ) == 0
0 commit comments