Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions src/openstack_mcp_server/tools/identity_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,16 +227,23 @@ def update_domain(
is_enabled=updated_domain.is_enabled,
)

def get_projects(self) -> list[Project]:
def get_projects(self, name: str | None = None) -> list[Project]:
"""
Get the list of Identity projects.

:param name: The name of the project.
It is used to get a project_id from a project name.

:return: A list of Project objects representing the projects.
"""
conn = get_openstack_conn()

filters = {}
if name:
filters["name"] = name

project_list = []
for project in conn.identity.projects():
for project in conn.identity.projects(**filters):
project_list.append(
Project(
id=project.id,
Expand Down
34 changes: 34 additions & 0 deletions tests/tools/test_identity_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -774,6 +774,40 @@ def test_get_projects_success(self, mock_get_openstack_conn_identity):
# Verify mock calls
mock_conn.identity.projects.assert_called_once()

def test_get_projects_with_name(self, mock_get_openstack_conn_identity):
"""Test getting identity projects with a name."""
mock_conn = mock_get_openstack_conn_identity

# Create mock project objects
mock_project1 = Mock()
mock_project1.id = "project1111111111111111111111111"
mock_project1.name = "ProjectOne"
mock_project1.description = "Project One description"
mock_project1.is_enabled = True
mock_project1.domain_id = "domain1111111111111111111111111"
mock_project1.parent_id = "parentproject1111111111111111111"

mock_conn.identity.projects.return_value = [mock_project1]

# Test get_projects()
identity_tools = self.get_identity_tools()
result = identity_tools.get_projects(name="ProjectOne")

# Verify results
assert result[0] == Project(
id="project1111111111111111111111111",
name="ProjectOne",
description="Project One description",
is_enabled=True,
domain_id="domain1111111111111111111111111",
parent_id="parentproject1111111111111111111",
)

# Verify mock calls
mock_conn.identity.projects.assert_called_once_with(
name="ProjectOne",
)

def test_get_projects_empty_list(self, mock_get_openstack_conn_identity):
"""Test getting identity projects when there are no projects."""
mock_conn = mock_get_openstack_conn_identity
Expand Down