Skip to content

Commit d62e35b

Browse files
committed
refactor: restructure get images testing for better maintainability
1 parent 6056460 commit d62e35b

File tree

1 file changed

+70
-78
lines changed

1 file changed

+70
-78
lines changed

tests/tools/test_image_tools.py

Lines changed: 70 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
from unittest.mock import Mock
44

5-
import pytest
6-
75
from openstack_mcp_server.tools.image_tools import ImageTools
86
from openstack_mcp_server.tools.request.image import CreateImage
97
from 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

Comments
 (0)