@@ -170,3 +170,122 @@ func TestPostGroupSyncConfig(t *testing.T) {
170170require .Equal (t ,http .StatusForbidden ,apiError .StatusCode ())
171171})
172172}
173+
174+ func TestGetRoleSyncConfig (t * testing.T ) {
175+ t .Parallel ()
176+
177+ t .Run ("OK" ,func (t * testing.T ) {
178+ t .Parallel ()
179+
180+ dv := coderdtest .DeploymentValues (t )
181+ dv .Experiments = []string {
182+ string (codersdk .ExperimentCustomRoles ),
183+ string (codersdk .ExperimentMultiOrganization ),
184+ }
185+
186+ owner ,_ ,_ ,user := coderdenttest .NewWithAPI (t ,& coderdenttest.Options {
187+ Options :& coderdtest.Options {
188+ DeploymentValues :dv ,
189+ },
190+ LicenseOptions :& coderdenttest.LicenseOptions {
191+ Features : license.Features {
192+ codersdk .FeatureCustomRoles :1 ,
193+ codersdk .FeatureMultipleOrganizations :1 ,
194+ },
195+ },
196+ })
197+ orgAdmin ,_ := coderdtest .CreateAnotherUser (t ,owner ,user .OrganizationID ,rbac .ScopedRoleOrgAdmin (user .OrganizationID ))
198+
199+ ctx := testutil .Context (t ,testutil .WaitShort )
200+ settings ,err := orgAdmin .PatchRoleIDPSyncSettings (ctx ,user .OrganizationID .String (), codersdk.RoleSyncSettings {
201+ Field :"august" ,
202+ Mapping :map [string ][]string {
203+ "foo" : {"bar" },
204+ },
205+ })
206+ require .NoError (t ,err )
207+ require .Equal (t ,"august" ,settings .Field )
208+ require .Equal (t ,map [string ][]string {"foo" : {"bar" }},settings .Mapping )
209+
210+ settings ,err = orgAdmin .RoleIDPSyncSettings (ctx ,user .OrganizationID .String ())
211+ require .NoError (t ,err )
212+ require .Equal (t ,"august" ,settings .Field )
213+ require .Equal (t ,map [string ][]string {"foo" : {"bar" }},settings .Mapping )
214+ })
215+ }
216+
217+ func TestPostRoleSyncConfig (t * testing.T ) {
218+ t .Parallel ()
219+
220+ t .Run ("OK" ,func (t * testing.T ) {
221+ t .Parallel ()
222+
223+ dv := coderdtest .DeploymentValues (t )
224+ dv .Experiments = []string {
225+ string (codersdk .ExperimentCustomRoles ),
226+ string (codersdk .ExperimentMultiOrganization ),
227+ }
228+
229+ owner ,user := coderdenttest .New (t ,& coderdenttest.Options {
230+ Options :& coderdtest.Options {
231+ DeploymentValues :dv ,
232+ },
233+ LicenseOptions :& coderdenttest.LicenseOptions {
234+ Features : license.Features {
235+ codersdk .FeatureCustomRoles :1 ,
236+ codersdk .FeatureMultipleOrganizations :1 ,
237+ },
238+ },
239+ })
240+
241+ orgAdmin ,_ := coderdtest .CreateAnotherUser (t ,owner ,user .OrganizationID ,rbac .ScopedRoleOrgAdmin (user .OrganizationID ))
242+
243+ // Test as org admin
244+ ctx := testutil .Context (t ,testutil .WaitShort )
245+ settings ,err := orgAdmin .PatchRoleIDPSyncSettings (ctx ,user .OrganizationID .String (), codersdk.RoleSyncSettings {
246+ Field :"august" ,
247+ })
248+ require .NoError (t ,err )
249+ require .Equal (t ,"august" ,settings .Field )
250+
251+ fetchedSettings ,err := orgAdmin .RoleIDPSyncSettings (ctx ,user .OrganizationID .String ())
252+ require .NoError (t ,err )
253+ require .Equal (t ,"august" ,fetchedSettings .Field )
254+ })
255+
256+ t .Run ("NotAuthorized" ,func (t * testing.T ) {
257+ t .Parallel ()
258+
259+ dv := coderdtest .DeploymentValues (t )
260+ dv .Experiments = []string {
261+ string (codersdk .ExperimentCustomRoles ),
262+ string (codersdk .ExperimentMultiOrganization ),
263+ }
264+
265+ owner ,user := coderdenttest .New (t ,& coderdenttest.Options {
266+ Options :& coderdtest.Options {
267+ DeploymentValues :dv ,
268+ },
269+ LicenseOptions :& coderdenttest.LicenseOptions {
270+ Features : license.Features {
271+ codersdk .FeatureCustomRoles :1 ,
272+ codersdk .FeatureMultipleOrganizations :1 ,
273+ },
274+ },
275+ })
276+
277+ member ,_ := coderdtest .CreateAnotherUser (t ,owner ,user .OrganizationID )
278+
279+ ctx := testutil .Context (t ,testutil .WaitShort )
280+ _ ,err := member .PatchRoleIDPSyncSettings (ctx ,user .OrganizationID .String (), codersdk.RoleSyncSettings {
281+ Field :"august" ,
282+ })
283+ var apiError * codersdk.Error
284+ require .ErrorAs (t ,err ,& apiError )
285+ require .Equal (t ,http .StatusForbidden ,apiError .StatusCode ())
286+
287+ _ ,err = member .RoleIDPSyncSettings (ctx ,user .OrganizationID .String ())
288+ require .ErrorAs (t ,err ,& apiError )
289+ require .Equal (t ,http .StatusForbidden ,apiError .StatusCode ())
290+ })
291+ }