Skip to content

Commit 446d51b

Browse files
committed
continue moving tests
1 parent 6b64343 commit 446d51b

File tree

5 files changed

+164
-108
lines changed

5 files changed

+164
-108
lines changed

coderd/members_test.go

Lines changed: 0 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package coderd_test
22

33
import (
4-
"net/http"
54
"testing"
65

76
"github.com/google/uuid"
@@ -17,42 +16,6 @@ import (
1716
func TestAddMember(t *testing.T) {
1817
t.Parallel()
1918

20-
t.Run("OK", func(t *testing.T) {
21-
t.Parallel()
22-
owner := coderdtest.New(t, nil)
23-
first := coderdtest.CreateFirstUser(t, owner)
24-
ctx := testutil.Context(t, testutil.WaitMedium)
25-
org, err := owner.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
26-
Name: "other",
27-
DisplayName: "",
28-
Description: "",
29-
Icon: "",
30-
})
31-
require.NoError(t, err)
32-
33-
// Make a user not in the second organization
34-
_, user := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID)
35-
36-
// Use scoped user admin in org to add the user
37-
client, userAdmin := coderdtest.CreateAnotherUser(t, owner, org.ID, rbac.ScopedRoleOrgUserAdmin(org.ID))
38-
39-
members, err := client.OrganizationMembers(ctx, org.ID)
40-
require.NoError(t, err)
41-
require.Len(t, members, 2) // Verify the 2 members at the start
42-
43-
// Add user to org
44-
_, err = client.PostOrganizationMember(ctx, org.ID, user.Username)
45-
require.NoError(t, err)
46-
47-
members, err = client.OrganizationMembers(ctx, org.ID)
48-
require.NoError(t, err)
49-
// Owner + user admin + new member
50-
require.Len(t, members, 3)
51-
require.ElementsMatch(t,
52-
[]uuid.UUID{first.UserID, user.ID, userAdmin.ID},
53-
db2sdk.List(members, onlyIDs))
54-
})
55-
5619
t.Run("AlreadyMember", func(t *testing.T) {
5720
t.Parallel()
5821
owner := coderdtest.New(t, nil)
@@ -65,28 +28,6 @@ func TestAddMember(t *testing.T) {
6528
_, err := owner.PostOrganizationMember(ctx, first.OrganizationID, user.Username)
6629
require.ErrorContains(t, err, "already exists")
6730
})
68-
69-
t.Run("UserNotExists", func(t *testing.T) {
70-
t.Parallel()
71-
owner := coderdtest.New(t, nil)
72-
_ = coderdtest.CreateFirstUser(t, owner)
73-
ctx := testutil.Context(t, testutil.WaitMedium)
74-
75-
org, err := owner.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
76-
Name: "other",
77-
DisplayName: "",
78-
Description: "",
79-
Icon: "",
80-
})
81-
require.NoError(t, err)
82-
83-
// Add user to org
84-
_, err = owner.PostOrganizationMember(ctx, org.ID, uuid.NewString())
85-
require.Error(t, err)
86-
var apiErr *codersdk.Error
87-
require.ErrorAs(t, err, &apiErr)
88-
require.Contains(t, apiErr.Message, "must be an existing")
89-
})
9031
}
9132

9233
func TestListMembers(t *testing.T) {
@@ -107,28 +48,6 @@ func TestListMembers(t *testing.T) {
10748
[]uuid.UUID{first.UserID, user.ID},
10849
db2sdk.List(members, onlyIDs))
10950
})
110-
111-
// Calling it from a user without the org access.
112-
t.Run("NotInOrg", func(t *testing.T) {
113-
t.Parallel()
114-
owner := coderdtest.New(t, nil)
115-
first := coderdtest.CreateFirstUser(t, owner)
116-
117-
client, _ := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID, rbac.ScopedRoleOrgAdmin(first.OrganizationID))
118-
119-
ctx := testutil.Context(t, testutil.WaitShort)
120-
org, err := owner.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
121-
Name: "test",
122-
DisplayName: "",
123-
Description: "",
124-
})
125-
require.NoError(t, err, "create organization")
126-
127-
// 404 error is expected instead of a 403/401 to not leak existence of
128-
// an organization.
129-
_, err = client.OrganizationMembers(ctx, org.ID)
130-
require.ErrorContains(t, err, "404")
131-
})
13251
}
13352

13453
func TestRemoveMember(t *testing.T) {
@@ -161,31 +80,6 @@ func TestRemoveMember(t *testing.T) {
16180
[]uuid.UUID{first.UserID, orgAdmin.ID},
16281
db2sdk.List(members, onlyIDs))
16382
})
164-
165-
t.Run("MemberNotInOrg", func(t *testing.T) {
166-
t.Parallel()
167-
owner := coderdtest.New(t, nil)
168-
first := coderdtest.CreateFirstUser(t, owner)
169-
orgAdminClient, _ := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID, rbac.ScopedRoleOrgAdmin(first.OrganizationID))
170-
171-
ctx := testutil.Context(t, testutil.WaitMedium)
172-
// nolint:gocritic // requires owner to make a new org
173-
org, _ := owner.CreateOrganization(ctx, codersdk.CreateOrganizationRequest{
174-
Name: "other",
175-
DisplayName: "",
176-
Description: "",
177-
Icon: "",
178-
})
179-
180-
_, user := coderdtest.CreateAnotherUser(t, owner, org.ID)
181-
182-
// Delete a user that is not in the organization
183-
err := orgAdminClient.DeleteOrganizationMember(ctx, first.OrganizationID, user.Username)
184-
require.Error(t, err)
185-
var apiError *codersdk.Error
186-
require.ErrorAs(t, err, &apiError)
187-
require.Equal(t, http.StatusNotFound, apiError.StatusCode())
188-
})
18983
}
19084

19185
func onlyIDs(u codersdk.OrganizationMemberWithUserData) uuid.UUID {

enterprise/coderd/provisionerdaemons_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ func TestProvisionerDaemonServe(t *testing.T) {
251251
codersdk.FeatureExternalProvisionerDaemons: 1,
252252
},
253253
}})
254-
closer := coderdtest.NewExternalProvisionerDaemon(t, client, user.OrganizationID, map[string]string{
254+
closer := coderdenttest.NewExternalProvisionerDaemon(t, client, user.OrganizationID, map[string]string{
255255
provisionersdk.TagScope: provisionersdk.ScopeUser,
256256
})
257257
defer closer.Close()
@@ -303,7 +303,7 @@ func TestProvisionerDaemonServe(t *testing.T) {
303303
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
304304
another, _ := coderdtest.CreateAnotherUser(t, client, user.OrganizationID)
305305
_ = closer.Close()
306-
closer = coderdtest.NewExternalProvisionerDaemon(t, another, user.OrganizationID, map[string]string{
306+
closer = coderdenttest.NewExternalProvisionerDaemon(t, another, user.OrganizationID, map[string]string{
307307
provisionersdk.TagScope: provisionersdk.ScopeUser,
308308
})
309309
defer closer.Close()

enterprise/coderd/templates_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,10 +1892,13 @@ func TestTemplateAccess(t *testing.T) {
18921892
func TestMultipleOrganizationTemplates(t *testing.T) {
18931893
t.Parallel()
18941894

1895+
dv := coderdtest.DeploymentValues(t)
1896+
dv.Experiments = []string{string(codersdk.ExperimentMultiOrganization)}
18951897
ownerClient, first := coderdenttest.New(t, &coderdenttest.Options{
18961898
Options: &coderdtest.Options{
18971899
// This only affects the first org.
18981900
IncludeProvisionerDaemon: true,
1901+
DeploymentValues: dv,
18991902
},
19001903
LicenseOptions: &coderdenttest.LicenseOptions{
19011904
Features: license.Features{

enterprise/coderd/users_test.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,3 +478,45 @@ func TestGrantSiteRoles(t *testing.T) {
478478
})
479479
}
480480
}
481+
482+
func TestEnterprisePostUser(t *testing.T) {
483+
t.Parallel()
484+
485+
t.Run("OrganizationNoAccess", func(t *testing.T) {
486+
t.Parallel()
487+
488+
dv := coderdtest.DeploymentValues(t)
489+
dv.Experiments = []string{string(codersdk.ExperimentMultiOrganization)}
490+
491+
client, first := coderdenttest.New(t, &coderdenttest.Options{
492+
Options: &coderdtest.Options{
493+
DeploymentValues: dv,
494+
},
495+
LicenseOptions: &coderdenttest.LicenseOptions{
496+
Features: license.Features{
497+
codersdk.FeatureMultipleOrganizations: 1,
498+
},
499+
},
500+
})
501+
502+
notInOrg, _ := coderdtest.CreateAnotherUser(t, client, first.OrganizationID)
503+
other, _ := coderdtest.CreateAnotherUser(t, client, first.OrganizationID, rbac.RoleOwner(), rbac.RoleMember())
504+
505+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
506+
defer cancel()
507+
508+
org := coderdenttest.CreateOrganization(t, other, coderdenttest.CreateOrganizationOptions{}, func(request *codersdk.CreateOrganizationRequest) {
509+
request.Name = "another"
510+
})
511+
512+
_, err := notInOrg.CreateUser(ctx, codersdk.CreateUserRequest{
513+
Email: "some@domain.com",
514+
Username: "anotheruser",
515+
Password: "SomeSecurePassword!",
516+
OrganizationID: org.ID,
517+
})
518+
var apiErr *codersdk.Error
519+
require.ErrorAs(t, err, &apiErr)
520+
require.Equal(t, http.StatusNotFound, apiErr.StatusCode())
521+
})
522+
}

enterprise/members_test.go

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package enterprise_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/google/uuid"
7+
"github.com/stretchr/testify/require"
8+
9+
"github.com/coder/coder/v2/coderd/coderdtest"
10+
"github.com/coder/coder/v2/coderd/database/db2sdk"
11+
"github.com/coder/coder/v2/coderd/rbac"
12+
"github.com/coder/coder/v2/codersdk"
13+
"github.com/coder/coder/v2/enterprise/coderd/coderdenttest"
14+
"github.com/coder/coder/v2/enterprise/coderd/license"
15+
"github.com/coder/coder/v2/testutil"
16+
)
17+
18+
func TestEnterpriseMembers(t *testing.T) {
19+
t.Run("PostUser", func(t *testing.T) {
20+
t.Parallel()
21+
22+
dv := coderdtest.DeploymentValues(t)
23+
dv.Experiments = []string{string(codersdk.ExperimentMultiOrganization)}
24+
owner, first := coderdenttest.New(t, &coderdenttest.Options{
25+
Options: &coderdtest.Options{
26+
DeploymentValues: dv,
27+
},
28+
LicenseOptions: &coderdenttest.LicenseOptions{
29+
Features: license.Features{
30+
codersdk.FeatureMultipleOrganizations: 1,
31+
},
32+
},
33+
})
34+
35+
ctx := testutil.Context(t, testutil.WaitMedium)
36+
org := coderdenttest.CreateOrganization(t, owner, coderdenttest.CreateOrganizationOptions{})
37+
38+
// Make a user not in the second organization
39+
_, user := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID)
40+
41+
// Use scoped user admin in org to add the user
42+
client, userAdmin := coderdtest.CreateAnotherUser(t, owner, org.ID, rbac.ScopedRoleOrgUserAdmin(org.ID))
43+
44+
members, err := client.OrganizationMembers(ctx, org.ID)
45+
require.NoError(t, err)
46+
require.Len(t, members, 2) // Verify the 2 members at the start
47+
48+
// Add user to org
49+
_, err = client.PostOrganizationMember(ctx, org.ID, user.Username)
50+
require.NoError(t, err)
51+
52+
members, err = client.OrganizationMembers(ctx, org.ID)
53+
require.NoError(t, err)
54+
// Owner + user admin + new member
55+
require.Len(t, members, 3)
56+
require.ElementsMatch(t,
57+
[]uuid.UUID{first.UserID, user.ID, userAdmin.ID},
58+
db2sdk.List(members, onlyIDs))
59+
})
60+
61+
t.Run("PostUserNotExists", func(t *testing.T) {
62+
t.Parallel()
63+
dv := coderdtest.DeploymentValues(t)
64+
dv.Experiments = []string{string(codersdk.ExperimentMultiOrganization)}
65+
owner, _ := coderdenttest.New(t, &coderdenttest.Options{
66+
Options: &coderdtest.Options{
67+
DeploymentValues: dv,
68+
},
69+
LicenseOptions: &coderdenttest.LicenseOptions{
70+
Features: license.Features{
71+
codersdk.FeatureMultipleOrganizations: 1,
72+
},
73+
},
74+
})
75+
76+
org := coderdenttest.CreateOrganization(t, owner, coderdenttest.CreateOrganizationOptions{})
77+
78+
ctx := testutil.Context(t, testutil.WaitMedium)
79+
// Add user to org
80+
_, err := owner.PostOrganizationMember(ctx, org.ID, uuid.NewString())
81+
require.Error(t, err)
82+
var apiErr *codersdk.Error
83+
require.ErrorAs(t, err, &apiErr)
84+
require.Contains(t, apiErr.Message, "must be an existing")
85+
})
86+
87+
// Calling it from a user without the org access.
88+
t.Run("ListNotInOrg", func(t *testing.T) {
89+
t.Parallel()
90+
dv := coderdtest.DeploymentValues(t)
91+
dv.Experiments = []string{string(codersdk.ExperimentMultiOrganization)}
92+
owner, first := coderdenttest.New(t, &coderdenttest.Options{
93+
Options: &coderdtest.Options{
94+
DeploymentValues: dv,
95+
},
96+
LicenseOptions: &coderdenttest.LicenseOptions{
97+
Features: license.Features{
98+
codersdk.FeatureMultipleOrganizations: 1,
99+
},
100+
},
101+
})
102+
103+
client, _ := coderdtest.CreateAnotherUser(t, owner, first.OrganizationID, rbac.ScopedRoleOrgAdmin(first.OrganizationID))
104+
org := coderdenttest.CreateOrganization(t, owner, coderdenttest.CreateOrganizationOptions{})
105+
106+
ctx := testutil.Context(t, testutil.WaitShort)
107+
108+
// 404 error is expected instead of a 403/401 to not leak existence of
109+
// an organization.
110+
_, err := client.OrganizationMembers(ctx, org.ID)
111+
require.ErrorContains(t, err, "404")
112+
})
113+
}
114+
115+
func onlyIDs(u codersdk.OrganizationMemberWithUserData) uuid.UUID {
116+
return u.UserID
117+
}

0 commit comments

Comments
 (0)