@@ -853,3 +853,192 @@ def test_get_project_not_found(self, mock_get_openstack_conn_identity):
853853 name_or_id = "ProjectOne" ,
854854 ignore_missing = False ,
855855 )
856+
857+ def test_create_project_success_with_all_fields (
858+ self , mock_get_openstack_conn_identity
859+ ):
860+ """Test creating a identity project successfully."""
861+ mock_conn = mock_get_openstack_conn_identity
862+
863+ # Create mock project object
864+ mock_project = Mock ()
865+ mock_project .id = "project1111111111111111111111111"
866+ mock_project .name = "ProjectOne"
867+ mock_project .description = "Project One description"
868+ mock_project .is_enabled = True
869+ mock_project .domain_id = "domain1111111111111111111111111"
870+ mock_project .parent_id = "parentproject1111111111111111111"
871+
872+ # Configure mock project.create_project()
873+ mock_conn .identity .create_project .return_value = mock_project
874+
875+ # Test create_project()
876+ identity_tools = self .get_identity_tools ()
877+ result = identity_tools .create_project (
878+ name = "ProjectOne" ,
879+ description = "Project One description" ,
880+ is_enabled = True ,
881+ domain_id = "domain1111111111111111111111111" ,
882+ parent_id = "parentproject1111111111111111111" ,
883+ )
884+
885+ # Verify results
886+ assert result == Project (
887+ id = "project1111111111111111111111111" ,
888+ name = "ProjectOne" ,
889+ description = "Project One description" ,
890+ is_enabled = True ,
891+ domain_id = "domain1111111111111111111111111" ,
892+ parent_id = "parentproject1111111111111111111" ,
893+ )
894+
895+ # Verify mock calls
896+ mock_conn .identity .create_project .assert_called_once_with (
897+ name = "ProjectOne" ,
898+ description = "Project One description" ,
899+ is_enabled = True ,
900+ domain_id = "domain1111111111111111111111111" ,
901+ parent_id = "parentproject1111111111111111111" ,
902+ )
903+
904+ def test_create_project_parent_disabled_failed (
905+ self , mock_get_openstack_conn_identity
906+ ):
907+ """Test creating a identity project with a parent project that is disabled."""
908+ mock_conn = mock_get_openstack_conn_identity
909+
910+ # Configure mock to raise BadRequestException
911+ mock_conn .identity .create_project .side_effect = exceptions .BadRequestException (
912+ "cannot create a project in a branch containing a disabled project" ,
913+ )
914+
915+ # Test create_project()
916+ identity_tools = self .get_identity_tools ()
917+
918+ # Verify exception is raised
919+ with pytest .raises (
920+ exceptions .BadRequestException ,
921+ match = "cannot create a project in a branch containing a disabled project" ,
922+ ):
923+ identity_tools .create_project (
924+ name = "ProjectOne" ,
925+ description = "Project One description" ,
926+ is_enabled = True ,
927+ domain_id = None ,
928+ parent_id = "parentproject1111111111111111111" ,
929+ )
930+
931+ # Verify mock calls
932+ mock_conn .identity .create_project .assert_called_once_with (
933+ name = "ProjectOne" ,
934+ description = "Project One description" ,
935+ is_enabled = True ,
936+ domain_id = None ,
937+ parent_id = "parentproject1111111111111111111" ,
938+ )
939+
940+ def test_create_project_without_all_fields (
941+ self , mock_get_openstack_conn_identity
942+ ):
943+ """Test creating a identity project without all fields."""
944+ mock_conn = mock_get_openstack_conn_identity
945+
946+ mock_conn .identity .create_project .side_effect = (
947+ exceptions .BadRequestException (
948+ "Field required" ,
949+ )
950+ )
951+
952+ # Test create_project()
953+ identity_tools = self .get_identity_tools ()
954+
955+ with pytest .raises (
956+ exceptions .BadRequestException ,
957+ match = "Field required" ,
958+ ):
959+ identity_tools .create_project (
960+ name = "ProjectOne" ,
961+ description = "Project One description" ,
962+ is_enabled = True ,
963+ domain_id = None ,
964+ parent_id = None ,
965+ )
966+
967+ # Verify mock calls
968+ mock_conn .identity .create_project .assert_called_once_with (
969+ name = "ProjectOne" ,
970+ description = "Project One description" ,
971+ is_enabled = True ,
972+ domain_id = None ,
973+ parent_id = None ,
974+ )
975+
976+ def test_create_project_domain_not_found (
977+ self , mock_get_openstack_conn_identity
978+ ):
979+ """Test creating a identity project with a domain that does not exist."""
980+ mock_conn = mock_get_openstack_conn_identity
981+
982+ # Configure mock to raise BadRequestException
983+ mock_conn .identity .create_project .side_effect = exceptions .BadRequestException (
984+ "Domain 'domain1111111111111111111111111' not found. Please check the domain ID." ,
985+ )
986+
987+ # Test create_project()
988+ identity_tools = self .get_identity_tools ()
989+
990+ with pytest .raises (
991+ exceptions .BadRequestException ,
992+ match = "Domain 'domain1111111111111111111111111' not found. Please check the domain ID." ,
993+ ):
994+ identity_tools .create_project (
995+ name = "ProjectOne" ,
996+ description = "Project One description" ,
997+ is_enabled = True ,
998+ domain_id = "domain1111111111111111111111111" ,
999+ parent_id = None ,
1000+ )
1001+
1002+ # Verify mock calls
1003+ mock_conn .identity .create_project .assert_called_once_with (
1004+ name = "ProjectOne" ,
1005+ description = "Project One description" ,
1006+ is_enabled = True ,
1007+ domain_id = "domain1111111111111111111111111" ,
1008+ parent_id = None ,
1009+ )
1010+
1011+ def test_create_project_parent_not_found (
1012+ self , mock_get_openstack_conn_identity
1013+ ):
1014+ """Test creating a identity project with a parent project that does not exist."""
1015+ mock_conn = mock_get_openstack_conn_identity
1016+
1017+ # Configure mock to raise BadRequestException
1018+ mock_conn .identity .create_project .side_effect = exceptions .BadRequestException (
1019+ "Parent project 'parentproject1111111111111111111' not found. Please check the parent project ID." ,
1020+ )
1021+
1022+ # Test create_project()
1023+ identity_tools = self .get_identity_tools ()
1024+
1025+ with pytest .raises (
1026+ exceptions .BadRequestException ,
1027+ match = "Parent project 'parentproject1111111111111111111' not found. Please check the parent project ID." ,
1028+ ):
1029+ identity_tools .create_project (
1030+ name = "ProjectOne" ,
1031+ description = "Project One description" ,
1032+ is_enabled = True ,
1033+ domain_id = None ,
1034+ parent_id = "parentproject1111111111111111111" ,
1035+ )
1036+
1037+ # Verify mock calls
1038+ mock_conn .identity .create_project .assert_called_once_with (
1039+ name = "ProjectOne" ,
1040+ description = "Project One description" ,
1041+ is_enabled = True ,
1042+ domain_id = None ,
1043+ parent_id = "parentproject1111111111111111111" ,
1044+ )
0 commit comments