@@ -118,6 +118,8 @@ def register_callback_for_user_pool_client(self, **kwargs: object) -> None:
118118 assert captured ["region" ] == expected_region
119119 assert captured ["project" ] == expected_project
120120 assert veadk_environments ["VEIDENTITY_REGION" ] == expected_identity_region
121+ assert "VEADK_STUDIO_ADMINS" not in veadk_environments
122+ assert "VEADK_STUDIO_DEVELOPERS" not in veadk_environments
121123 assert f"{ expected_region } /{ expected_project } " in result .output
122124 assert ("Warning:" in result .output ) == (
123125 expected_identity_region != expected_region
@@ -128,6 +130,78 @@ def register_callback_for_user_pool_client(self, **kwargs: object) -> None:
128130 assert callback ["skip_consent_enabled" ] is True
129131
130132
133+ @pytest .mark .parametrize (
134+ ("role_args" , "expected_environment" ),
135+ [
136+ (
137+ ["--admin" , "admin@example.com" ],
138+ {"VEADK_STUDIO_ADMINS" : "admin@example.com" },
139+ ),
140+ (
141+ ["--developer" , "dev@example.com" ],
142+ {"VEADK_STUDIO_DEVELOPERS" : "dev@example.com" },
143+ ),
144+ ],
145+ )
146+ def test_studio_deploy_enables_rbac_when_either_role_is_configured (
147+ monkeypatch : pytest .MonkeyPatch ,
148+ role_args : list [str ],
149+ expected_environment : dict [str , str ],
150+ ) -> None :
151+ class _FakeCloudAgentEngine :
152+ def __init__ (self , ** _ : object ) -> None :
153+ pass
154+
155+ def deploy (self , ** _ : object ) -> SimpleNamespace :
156+ return SimpleNamespace (
157+ vefaas_endpoint = "https://studio.example.com" ,
158+ vefaas_application_id = "app-id" ,
159+ vefaas_function_id = "" ,
160+ )
161+
162+ monkeypatch .setattr (
163+ "veadk.cloud.cloud_agent_engine.CloudAgentEngine" , _FakeCloudAgentEngine
164+ )
165+ monkeypatch .setattr (
166+ "veadk.cli.cli_frontend._resolve_studio_identity_region" ,
167+ lambda ** _ : "cn-beijing" ,
168+ )
169+ monkeypatch .setattr (
170+ "veadk.integrations.ve_identity.identity_client.IdentityClient.register_callback_for_user_pool_client" ,
171+ lambda * _args , ** _kwargs : None ,
172+ )
173+
174+ result = CliRunner ().invoke (
175+ studio ,
176+ [
177+ "deploy" ,
178+ "--user-pool-id" ,
179+ "pool-id" ,
180+ "--allowed-client-id" ,
181+ "client-id" ,
182+ "--vefaas-app-name" ,
183+ "studio-app" ,
184+ "--iam-role" ,
185+ "trn:iam::role/test" ,
186+ "--gateway-name" ,
187+ "gateway" ,
188+ "--volcengine-access-key" ,
189+ "ak" ,
190+ "--volcengine-secret-key" ,
191+ "sk" ,
192+ * role_args ,
193+ ],
194+ )
195+
196+ assert result .exit_code == 0 , result .output
197+ configured_roles = {
198+ key : value
199+ for key , value in veadk_environments .items ()
200+ if key in {"VEADK_STUDIO_ADMINS" , "VEADK_STUDIO_DEVELOPERS" }
201+ }
202+ assert configured_roles == expected_environment
203+
204+
131205def test_studio_identity_region_searches_deployment_region_first (
132206 monkeypatch : pytest .MonkeyPatch ,
133207) -> None :
0 commit comments