22
33from unittest .mock import Mock
44
5- import pytest
6-
75from openstack_mcp_server .tools .image_tools import ImageTools
86from openstack_mcp_server .tools .request .image import CreateImage
97from openstack_mcp_server .tools .response .image import Image
@@ -51,7 +49,6 @@ def image_factory(**overrides):
5149 def test_get_images_success (self , mock_get_openstack_conn_image ):
5250 """Test getting image images successfully."""
5351 mock_conn = mock_get_openstack_conn_image
54-
5552 mock_image1 = self .image_factory (
5653 id = "img-123-abc-def" ,
5754 name = "ubuntu-20.04-server" ,
@@ -60,7 +57,6 @@ def test_get_images_success(self, mock_get_openstack_conn_image):
6057 checksum = "abc123" ,
6158 size = 1073741824 ,
6259 )
63-
6460 mock_image2 = self .image_factory (
6561 id = "img-456-ghi-jkl" ,
6662 name = "centos-8-stream" ,
@@ -69,115 +65,111 @@ def test_get_images_success(self, mock_get_openstack_conn_image):
6965 checksum = "def456" ,
7066 size = 2147483648 ,
7167 )
72-
7368 mock_conn .image .images .return_value = [mock_image1 , mock_image2 ]
7469
7570 result = ImageTools ().get_images ()
7671
72+ mock_conn .image .images .assert_called_once ()
7773 expected_output = [
7874 Image (** mock_image1 ),
7975 Image (** mock_image2 ),
8076 ]
8177 assert result == expected_output
8278
83- mock_conn .image .images .assert_called_once ()
84-
8579 def test_get_images_empty_list (self , mock_get_openstack_conn_image ):
8680 """Test getting image images when no images exist."""
8781 mock_conn = mock_get_openstack_conn_image
8882 mock_conn .image .images .return_value = []
8983
9084 result = ImageTools ().get_images ()
91-
92- assert result == []
85+
9386 mock_conn .image .images .assert_called_once ()
87+ assert result == []
9488
95- @pytest .mark .parametrize (
96- "filter_name,filter_value,expected_count" ,
97- [
98- ("name" , "ubuntu-20.04-server" , 1 ), # exact name match
99- ("name" , "ubuntu" , 0 ), # partial match not supported
100- ("name" , "nonexistent" , 0 ), # non-existent name
101- ("name" , "" , 2 ), # empty filter value
102- ("name" , " " , 2 ), # whitespace only
103- ("status" , "active" , 2 ),
104- ("visibility" , "public" , 2 ),
105- ("status" , "deleted" , 0 ),
106- ("visibility" , "private" , 0 ),
107- ],
108- )
109- def test_get_images_with_filters (
110- self ,
111- mock_get_openstack_conn_image ,
112- filter_name ,
113- filter_value ,
114- expected_count ,
115- ):
116- """Test getting images with various filters."""
89+ def test_get_images_with_status_filter (self , mock_get_openstack_conn_image ):
90+ """Test getting images with status filter."""
11791 mock_conn = mock_get_openstack_conn_image
118-
119- mock_image1 = self .image_factory (
92+ mock_image = self .image_factory (
12093 id = "img-123-abc-def" ,
12194 name = "ubuntu-20.04-server" ,
12295 status = "active" ,
12396 visibility = "public" ,
12497 checksum = "abc123" ,
12598 size = 1073741824 ,
12699 )
100+ mock_conn .image .images .return_value = [mock_image ]
127101
128- mock_image2 = self .image_factory (
102+ result = ImageTools ().get_images (status = "active" )
103+
104+ mock_conn .image .images .assert_called_once_with (status = "active" )
105+ expected_output = [Image (** mock_image )]
106+ assert result == expected_output
107+
108+ def test_get_images_with_visibility_filter (self , mock_get_openstack_conn_image ):
109+ """Test getting images with visibility filter."""
110+ mock_conn = mock_get_openstack_conn_image
111+ mock_image = self .image_factory (
129112 id = "img-456-ghi-jkl" ,
130113 name = "centos-8-stream" ,
131- status = "active " ,
132- visibility = "public " ,
114+ status = "queued " ,
115+ visibility = "private " ,
133116 checksum = "def456" ,
134117 size = 2147483648 ,
135118 )
119+ mock_conn .image .images .return_value = [mock_image ]
120+
121+ result = ImageTools ().get_images (visibility = "private" )
122+
123+ mock_conn .image .images .assert_called_once_with (visibility = "private" )
124+ expected_output = [Image (** mock_image )]
125+ assert result == expected_output
136126
137- if filter_name == "name" :
138- if filter_value == "ubuntu-20.04-server" :
139- mock_conn .image .images .return_value = [mock_image1 ]
140- elif filter_value in ["" , " " ]:
141- mock_conn .image .images .return_value = [
142- mock_image1 ,
143- mock_image2 ,
144- ]
145- else :
146- mock_conn .image .images .return_value = []
147- elif filter_name == "status" :
148- if filter_value == "active" :
149- mock_conn .image .images .return_value = [
150- mock_image1 ,
151- mock_image2 ,
152- ]
153- else :
154- mock_conn .image .images .return_value = []
155- elif filter_name == "visibility" :
156- if filter_value == "public" :
157- mock_conn .image .images .return_value = [
158- mock_image1 ,
159- mock_image2 ,
160- ]
161- else :
162- mock_conn .image .images .return_value = []
163-
164- result = ImageTools ().get_images (** {filter_name : filter_value })
165-
166- if expected_count == 0 :
167- assert result == []
168- elif expected_count == 1 :
169- assert result == [Image (** mock_image1 )]
170- else :
171- assert result == [Image (** mock_image1 ), Image (** mock_image2 )]
127+ def test_get_images_with_name_filter (self , mock_get_openstack_conn_image ):
128+ """Test getting images with name filter."""
129+ mock_conn = mock_get_openstack_conn_image
130+ mock_image = self .image_factory (
131+ id = "img-789-mno-pqr" ,
132+ name = "centos-8-stream" ,
133+ status = "active" ,
134+ visibility = "public" ,
135+ checksum = "ghi789" ,
136+ size = 3221225472 ,
137+ )
138+ mock_conn .image .images .return_value = [mock_image ]
172139
173- # For empty/whitespace filters, no filter should be applied
174- if filter_value in ["" , " " ]:
175- mock_conn .image .images .assert_called_once_with ()
176- else :
177- mock_conn .image .images .assert_called_once_with (
178- ** {filter_name : filter_value }
179- )
140+ result = ImageTools ().get_images (name = "centos-8-stream" )
141+
142+ mock_conn .image .images .assert_called_once_with (name = "centos-8-stream" )
143+ expected_output = [Image (** mock_image )]
144+ assert result == expected_output
180145
146+ def test_get_images_with_multiple_filters (self , mock_get_openstack_conn_image ):
147+ """Test getting images with multiple filters."""
148+ mock_conn = mock_get_openstack_conn_image
149+ mock_image = self .image_factory (
150+ id = "img-multi-filter" ,
151+ name = "ubuntu-20.04-server" ,
152+ status = "active" ,
153+ visibility = "public" ,
154+ checksum = "multi123" ,
155+ size = 1073741824 ,
156+ )
157+ mock_conn .image .images .return_value = [mock_image ]
158+
159+ result = ImageTools ().get_images (
160+ name = "ubuntu-20.04-server" ,
161+ status = "active" ,
162+ visibility = "public"
163+ )
164+
165+ mock_conn .image .images .assert_called_once_with (
166+ name = "ubuntu-20.04-server" ,
167+ status = "active" ,
168+ visibility = "public"
169+ )
170+ expected_output = [Image (** mock_image )]
171+ assert result == expected_output
172+
181173 def test_create_image_success_with_volume_id (
182174 self ,
183175 mock_get_openstack_conn_image ,
0 commit comments