66from openstack import exceptions
77
88from openstack_mcp_server .tools .identity_tools import IdentityTools
9- from openstack_mcp_server .tools .response .identity import Domain , Region
9+ from openstack_mcp_server .tools .response .identity import Domain , Region , Project
1010
1111
1212class TestIdentityTools :
@@ -715,3 +715,142 @@ def test_update_domain_with_empty_id(
715715
716716 # Verify mock calls
717717 mock_conn .identity .update_domain .assert_called_once_with (domain = "" )
718+
719+ def test_get_projects_success (self , mock_get_openstack_conn_identity ):
720+ """Test getting identity projects successfully."""
721+ mock_conn = mock_get_openstack_conn_identity
722+
723+ # Create mock project objects
724+ mock_project1 = Mock ()
725+ mock_project1 .id = "project1111111111111111111111111"
726+ mock_project1 .name = "ProjectOne"
727+ mock_project1 .description = "Project One description"
728+ mock_project1 .is_enabled = True
729+ mock_project1 .domain_id = "domain1111111111111111111111111"
730+ mock_project1 .parent_id = "parentproject1111111111111111111"
731+
732+ mock_project2 = Mock ()
733+ mock_project2 .id = "project2222222222222222222222222"
734+ mock_project2 .name = "ProjectTwo"
735+ mock_project2 .description = "Project Two description"
736+ mock_project2 .is_enabled = False
737+ mock_project2 .domain_id = "domain22222222222222222222222222"
738+ mock_project2 .parent_id = "default"
739+
740+ # Configure mock project.projects()
741+ mock_conn .identity .projects .return_value = [mock_project1 , mock_project2 ]
742+
743+ # Test get_projects()
744+ identity_tools = self .get_identity_tools ()
745+ result = identity_tools .get_projects ()
746+
747+ # Verify results
748+ assert result == [
749+ Project (
750+ id = "project1111111111111111111111111" ,
751+ name = "ProjectOne" ,
752+ description = "Project One description" ,
753+ is_enabled = True ,
754+ domain_id = "domain1111111111111111111111111" ,
755+ parent_id = "parentproject1111111111111111111" ,
756+ ),
757+ Project (
758+ id = "project2222222222222222222222222" ,
759+ name = "ProjectTwo" ,
760+ description = "Project Two description" ,
761+ is_enabled = False ,
762+ domain_id = "domain22222222222222222222222222" ,
763+ parent_id = "default" ,
764+ ),
765+ ]
766+
767+ # Verify mock calls
768+ mock_conn .identity .projects .assert_called_once ()
769+
770+
771+
772+ def test_get_projects_empty_list (self , mock_get_openstack_conn_identity ):
773+ """Test getting identity projects when there are no projects."""
774+ mock_conn = mock_get_openstack_conn_identity
775+
776+ # Empty project list
777+ mock_conn .identity .projects .return_value = []
778+
779+ # Test get_projects()
780+ identity_tools = self .get_identity_tools ()
781+ result = identity_tools .get_projects ()
782+
783+ # Verify results
784+ assert result == []
785+
786+ # Verify mock calls
787+ mock_conn .identity .projects .assert_called_once ()
788+
789+ def test_get_project_success (self , mock_get_openstack_conn_identity ):
790+ """Test getting a identity project successfully."""
791+ mock_conn = mock_get_openstack_conn_identity
792+
793+ # Create mock project object
794+ mock_project = Mock ()
795+ mock_project .id = "project1111111111111111111111111"
796+ mock_project .name = "ProjectOne"
797+ mock_project .description = "Project One description"
798+ mock_project .is_enabled = True
799+ mock_project .domain_id = "domain1111111111111111111111111"
800+ mock_project .parent_id = "parentproject1111111111111111111"
801+
802+ # Configure mock project.find_project()
803+ mock_conn .identity .find_project .return_value = mock_project
804+
805+ # Test get_project()
806+ identity_tools = self .get_identity_tools ()
807+ result = identity_tools .get_project (name = "ProjectOne" )
808+
809+ # Verify results
810+ assert result == Project (
811+ id = "project1111111111111111111111111" ,
812+ name = "ProjectOne" ,
813+ description = "Project One description" ,
814+ is_enabled = True ,
815+ domain_id = "domain1111111111111111111111111" ,
816+ parent_id = "parentproject1111111111111111111" ,
817+ )
818+
819+ # Verify mock calls
820+ mock_conn .identity .find_project .assert_called_once_with (
821+ name_or_id = "ProjectOne" ,
822+ ignore_missing = False ,
823+ )
824+
825+ def test_get_project_not_found (self , mock_get_openstack_conn_identity ):
826+ """Test getting a identity project that does not exist."""
827+ mock_conn = mock_get_openstack_conn_identity
828+
829+ # Configure mock to raise NotFoundException
830+ mock_conn .identity .find_project .side_effect = (
831+ exceptions .NotFoundException (
832+ "Project 'ProjectOne' not found" ,
833+ )
834+ )
835+
836+ # Test get_project()
837+ identity_tools = self .get_identity_tools ()
838+
839+ # Verify exception is raised
840+ with pytest .raises (
841+ exceptions .NotFoundException ,
842+ match = "Project 'ProjectOne' not found" ,
843+ ):
844+ identity_tools .get_project (name = "ProjectOne" )
845+
846+ # Verify mock calls
847+ mock_conn .identity .find_project .assert_called_once_with (
848+ name_or_id = "ProjectOne" ,
849+ ignore_missing = False ,
850+ )
851+
852+
853+
854+
855+
856+
0 commit comments