@@ -1068,6 +1068,84 @@ defmodule Rbac.GrpcServers.RbacServer.Test do
10681068 end
10691069 end
10701070
1071+ describe "list_subjects" do
1072+ alias InternalApi.RBAC.ListSubjectsRequest , as: Request
1073+
1074+ test "invalid org_id returns error" , state do
1075+ req = % Request { org_id: "invalid-uuid" , subject_ids: [ ] }
1076+ { :error , grpc_error } = state . grpc_channel |> Stub . list_subjects ( req )
1077+ assert grpc_error . message =~ "Invalid uuid"
1078+ end
1079+
1080+ test "returns subjects that are part of the organization" , state do
1081+ user1_id = UUID . generate ( )
1082+ user2_id = UUID . generate ( )
1083+ user3_id = UUID . generate ( )
1084+
1085+ Support.Factories.RbacUser . insert ( user1_id , "User One" )
1086+ Support.Factories.RbacUser . insert ( user2_id , "User Two" )
1087+ Support.Factories.RbacUser . insert ( user3_id , "User Three" )
1088+
1089+ Support.Rbac . assign_org_role_by_name ( @ org_id , user1_id , "Admin" )
1090+ Support.Rbac . assign_org_role_by_name ( @ org_id , user2_id , "Member" )
1091+
1092+ req = % Request { org_id: @ org_id , subject_ids: [ user1_id , user2_id , user3_id ] }
1093+ { :ok , % { subjects: subjects } } = state . grpc_channel |> Stub . list_subjects ( req )
1094+
1095+ assert length ( subjects ) == 2
1096+ subject_ids = Enum . map ( subjects , & & 1 . subject_id )
1097+ assert user1_id in subject_ids
1098+ assert user2_id in subject_ids
1099+ refute user3_id in subject_ids
1100+ end
1101+
1102+ test "returns empty list when no subjects match" , state do
1103+ user_id = UUID . generate ( )
1104+ Support.Factories.RbacUser . insert ( user_id , "User One" )
1105+
1106+ req = % Request { org_id: @ org_id , subject_ids: [ user_id ] }
1107+ { :ok , % { subjects: subjects } } = state . grpc_channel |> Stub . list_subjects ( req )
1108+
1109+ assert subjects == [ ]
1110+ end
1111+
1112+ test "returns subjects with correct type and display name" , state do
1113+ user_id = UUID . generate ( )
1114+ Support.Factories.RbacUser . insert ( user_id , "Test User" )
1115+ Support.Rbac . assign_org_role_by_name ( @ org_id , user_id , "Admin" )
1116+
1117+ req = % Request { org_id: @ org_id , subject_ids: [ user_id ] }
1118+ { :ok , % { subjects: subjects } } = state . grpc_channel |> Stub . list_subjects ( req )
1119+
1120+ assert length ( subjects ) == 1
1121+ subject = hd ( subjects )
1122+ assert subject . subject_id == user_id
1123+ assert subject . display_name == "Test User"
1124+ assert subject . subject_type == :USER
1125+ end
1126+
1127+ test "returns empty list when subject_ids is empty" , state do
1128+ req = % Request { org_id: @ org_id , subject_ids: [ ] }
1129+ { :ok , % { subjects: subjects } } = state . grpc_channel |> Stub . list_subjects ( req )
1130+
1131+ assert subjects == [ ]
1132+ end
1133+
1134+ test "filters subjects by organization correctly" , state do
1135+ other_org_id = UUID . generate ( )
1136+ user_id = UUID . generate ( )
1137+
1138+ Support.Factories.RbacUser . insert ( user_id , "User One" )
1139+ Support.Rbac . create_org_roles ( other_org_id )
1140+ Support.Rbac . assign_org_role_by_name ( other_org_id , user_id , "Admin" )
1141+
1142+ req = % Request { org_id: @ org_id , subject_ids: [ user_id ] }
1143+ { :ok , % { subjects: subjects } } = state . grpc_channel |> Stub . list_subjects ( req )
1144+
1145+ assert subjects == [ ]
1146+ end
1147+ end
1148+
10711149 ###
10721150 ### Helper functions
10731151 ###
0 commit comments