Skip to content

Commit 405336f

Browse files
authored
feat(identity): Add name filter in get_projects tool(#95) (#96)
1 parent 2c1ba09 commit 405336f

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

src/openstack_mcp_server/tools/identity_tools.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,16 +227,23 @@ def update_domain(
227227
is_enabled=updated_domain.is_enabled,
228228
)
229229

230-
def get_projects(self) -> list[Project]:
230+
def get_projects(self, name: str | None = None) -> list[Project]:
231231
"""
232232
Get the list of Identity projects.
233233
234+
:param name: The name of the project.
235+
It is used to get a project_id from a project name.
236+
234237
:return: A list of Project objects representing the projects.
235238
"""
236239
conn = get_openstack_conn()
237240

241+
filters = {}
242+
if name:
243+
filters["name"] = name
244+
238245
project_list = []
239-
for project in conn.identity.projects():
246+
for project in conn.identity.projects(**filters):
240247
project_list.append(
241248
Project(
242249
id=project.id,

tests/tools/test_identity_tools.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,40 @@ def test_get_projects_success(self, mock_get_openstack_conn_identity):
774774
# Verify mock calls
775775
mock_conn.identity.projects.assert_called_once()
776776

777+
def test_get_projects_with_name(self, mock_get_openstack_conn_identity):
778+
"""Test getting identity projects with a name."""
779+
mock_conn = mock_get_openstack_conn_identity
780+
781+
# Create mock project objects
782+
mock_project1 = Mock()
783+
mock_project1.id = "project1111111111111111111111111"
784+
mock_project1.name = "ProjectOne"
785+
mock_project1.description = "Project One description"
786+
mock_project1.is_enabled = True
787+
mock_project1.domain_id = "domain1111111111111111111111111"
788+
mock_project1.parent_id = "parentproject1111111111111111111"
789+
790+
mock_conn.identity.projects.return_value = [mock_project1]
791+
792+
# Test get_projects()
793+
identity_tools = self.get_identity_tools()
794+
result = identity_tools.get_projects(name="ProjectOne")
795+
796+
# Verify results
797+
assert result[0] == Project(
798+
id="project1111111111111111111111111",
799+
name="ProjectOne",
800+
description="Project One description",
801+
is_enabled=True,
802+
domain_id="domain1111111111111111111111111",
803+
parent_id="parentproject1111111111111111111",
804+
)
805+
806+
# Verify mock calls
807+
mock_conn.identity.projects.assert_called_once_with(
808+
name="ProjectOne",
809+
)
810+
777811
def test_get_projects_empty_list(self, mock_get_openstack_conn_identity):
778812
"""Test getting identity projects when there are no projects."""
779813
mock_conn = mock_get_openstack_conn_identity

0 commit comments

Comments
 (0)