Skip to content

Commit d59cb83

Browse files
committed
create org member in coderdtest helper
1 parent a25bfa0 commit d59cb83

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed

enterprise/cli/create_test.go

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package cli_test
2+
3+
import (
4+
"context"
5+
"sync"
6+
"testing"
7+
8+
"github.com/google/uuid"
9+
"github.com/stretchr/testify/assert"
10+
11+
"github.com/coder/coder/v2/cli/clitest"
12+
"github.com/coder/coder/v2/coderd/coderdtest"
13+
"github.com/coder/coder/v2/coderd/rbac"
14+
"github.com/coder/coder/v2/codersdk"
15+
"github.com/coder/coder/v2/enterprise/coderd/coderdenttest"
16+
"github.com/coder/coder/v2/enterprise/coderd/license"
17+
"github.com/coder/coder/v2/pty/ptytest"
18+
)
19+
20+
func TestEnterpriseCreate(t *testing.T) {
21+
t.Parallel()
22+
23+
type setupData struct {
24+
firstResponse codersdk.CreateFirstUserResponse
25+
second codersdk.Organization
26+
owner *codersdk.Client
27+
member *codersdk.Client
28+
}
29+
30+
type setupArgs struct {
31+
firstTemplates []string
32+
secondTemplates []string
33+
}
34+
35+
setupMultipleOrganizations := func(t *testing.T, args setupArgs) setupData {
36+
ownerClient, first := coderdenttest.New(t, &coderdenttest.Options{
37+
Options: &coderdtest.Options{
38+
// This only affects the first org.
39+
IncludeProvisionerDaemon: false,
40+
},
41+
LicenseOptions: &coderdenttest.LicenseOptions{
42+
Features: license.Features{
43+
codersdk.FeatureExternalProvisionerDaemons: 1,
44+
},
45+
},
46+
})
47+
48+
second := coderdtest.CreateOrganization(t, ownerClient, coderdtest.CreateOrganizationOptions{
49+
IncludeProvisionerDaemon: true,
50+
})
51+
member, _ := coderdtest.CreateAnotherUser(t, ownerClient, first.OrganizationID, rbac.ScopedRoleOrgMember(second.ID))
52+
53+
var wg sync.WaitGroup
54+
55+
createTemplate := func(tplName string, orgID uuid.UUID) {
56+
version := coderdtest.CreateTemplateVersion(t, ownerClient, orgID, nil)
57+
wg.Add(1)
58+
go func() {
59+
coderdtest.AwaitTemplateVersionJobCompleted(t, ownerClient, version.ID)
60+
wg.Done()
61+
}()
62+
63+
coderdtest.CreateTemplate(t, ownerClient, orgID, version.ID, func(request *codersdk.CreateTemplateRequest) {
64+
request.Name = tplName
65+
})
66+
}
67+
68+
for _, tplName := range args.firstTemplates {
69+
createTemplate(tplName, first.OrganizationID)
70+
}
71+
72+
for _, tplName := range args.secondTemplates {
73+
createTemplate(tplName, second.ID)
74+
}
75+
76+
wg.Wait()
77+
78+
return setupData{
79+
firstResponse: first,
80+
owner: ownerClient,
81+
second: second,
82+
member: member,
83+
}
84+
}
85+
86+
t.Run("CreateMultipleOrganization", func(t *testing.T) {
87+
// Creates a workspace in another organization
88+
t.Parallel()
89+
90+
const templateName = "secondtemplate"
91+
setup := setupMultipleOrganizations(t, setupArgs{
92+
secondTemplates: []string{templateName},
93+
})
94+
member := setup.member
95+
96+
args := []string{
97+
"create",
98+
"my-workspace",
99+
"--template", templateName,
100+
}
101+
inv, root := clitest.New(t, args...)
102+
clitest.SetupConfig(t, member, root)
103+
doneChan := make(chan struct{})
104+
pty := ptytest.New(t).Attach(inv)
105+
go func() {
106+
defer close(doneChan)
107+
err := inv.Run()
108+
assert.NoError(t, err)
109+
}()
110+
matches := []struct {
111+
match string
112+
write string
113+
}{
114+
{match: "compute.main"},
115+
{match: "smith (linux, i386)"},
116+
{match: "Confirm create", write: "yes"},
117+
}
118+
for _, m := range matches {
119+
pty.ExpectMatch(m.match)
120+
if len(m.write) > 0 {
121+
pty.WriteLine(m.write)
122+
}
123+
}
124+
<-doneChan
125+
126+
ws, err := member.WorkspaceByOwnerAndName(context.Background(), codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})
127+
if assert.NoError(t, err, "expected workspace to be created") {
128+
assert.Equal(t, ws.TemplateName, templateName)
129+
assert.Equal(t, ws.OrganizationName, setup.second.ID, "workspace in second organization")
130+
}
131+
})
132+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy