11package coderd_test
22
33import (
4+ "net/http"
45"testing"
56
67"github.com/stretchr/testify/require"
78
89"github.com/coder/coder/v2/coderd/coderdtest"
910"github.com/coder/coder/v2/coderd/database/dbauthz"
1011"github.com/coder/coder/v2/coderd/idpsync"
12+ "github.com/coder/coder/v2/coderd/rbac"
1113"github.com/coder/coder/v2/coderd/runtimeconfig"
1214"github.com/coder/coder/v2/codersdk"
1315"github.com/coder/coder/v2/enterprise/coderd/coderdenttest"
@@ -63,7 +65,7 @@ func TestPostGroupSyncConfig(t *testing.T) {
6365string (codersdk .ExperimentMultiOrganization ),
6466}
6567
66- client , db , user := coderdenttest .NewWithDatabase (t ,& coderdenttest.Options {
68+ owner , user := coderdenttest .New (t ,& coderdenttest.Options {
6769Options :& coderdtest.Options {
6870DeploymentValues :dv ,
6971},
@@ -75,17 +77,54 @@ func TestPostGroupSyncConfig(t *testing.T) {
7577},
7678})
7779
80+ orgAdmin ,_ := coderdtest .CreateAnotherUser (t ,owner ,user .OrganizationID ,rbac .ScopedRoleOrgAdmin (user .OrganizationID ))
81+
82+ // Test as org admin
7883ctx := testutil .Context (t ,testutil .WaitShort )
79- settings ,err := client . PostGroupIDPSyncSettings (ctx ,user .OrganizationID .String (), codersdk.GroupSyncSettings {
84+ settings ,err := orgAdmin . PatchGroupIDPSyncSettings (ctx ,user .OrganizationID .String (), codersdk.GroupSyncSettings {
8085Field :"august" ,
8186})
8287require .NoError (t ,err )
8388require .Equal (t ,"august" ,settings .Field )
8489
85- dbresv := runtimeconfig .OrganizationResolver (user .OrganizationID ,runtimeconfig .NewStoreResolver (db ))
86- entry := runtimeconfig.MustNew [* idpsync.GroupSyncSettings ]("group-sync-settings" )
87- dbSettings ,err := entry .Resolve (ctx ,dbresv )
90+ fetchedSettings ,err := orgAdmin .GroupIDPSyncSettings (ctx ,user .OrganizationID .String ())
8891require .NoError (t ,err )
89- require .Equal (t ,"august" ,dbSettings .Field )
92+ require .Equal (t ,"august" ,fetchedSettings .Field )
93+ })
94+
95+ t .Run ("NotAuthorized" ,func (t * testing.T ) {
96+ t .Parallel ()
97+
98+ dv := coderdtest .DeploymentValues (t )
99+ dv .Experiments = []string {
100+ string (codersdk .ExperimentCustomRoles ),
101+ string (codersdk .ExperimentMultiOrganization ),
102+ }
103+
104+ owner ,user := coderdenttest .New (t ,& coderdenttest.Options {
105+ Options :& coderdtest.Options {
106+ DeploymentValues :dv ,
107+ },
108+ LicenseOptions :& coderdenttest.LicenseOptions {
109+ Features : license.Features {
110+ codersdk .FeatureCustomRoles :1 ,
111+ codersdk .FeatureMultipleOrganizations :1 ,
112+ },
113+ },
114+ })
115+
116+ member ,_ := coderdtest .CreateAnotherUser (t ,owner ,user .OrganizationID )
117+
118+ ctx := testutil .Context (t ,testutil .WaitShort )
119+ _ ,err := member .PatchGroupIDPSyncSettings (ctx ,user .OrganizationID .String (), codersdk.GroupSyncSettings {
120+ Field :"august" ,
121+ })
122+ var apiError * codersdk.Error
123+ require .ErrorAs (t ,err ,& apiError )
124+ require .Equal (t ,http .StatusForbidden ,apiError .StatusCode ())
125+
126+ _ ,err = member .GroupIDPSyncSettings (ctx ,user .OrganizationID .String ())
127+ require .ErrorAs (t ,err ,& apiError )
128+ require .Equal (t ,http .StatusForbidden ,apiError .StatusCode ())
90129})
91130}