Skip to content

Commit 401166d

Browse files
committed
add more tests
1 parent d59cb83 commit 401166d

File tree

2 files changed

+96
-24
lines changed

2 files changed

+96
-24
lines changed

coderd/coderdtest/coderdtest.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -637,14 +637,18 @@ func NewExternalProvisionerDaemon(t testing.TB, client *codersdk.Client, org uui
637637
assert.NoError(t, err)
638638
}()
639639

640+
time.Sleep(time.Second)
640641
daemon := provisionerd.New(func(ctx context.Context) (provisionerdproto.DRPCProvisionerDaemonClient, error) {
641-
return client.ServeProvisionerDaemon(ctx, codersdk.ServeProvisionerDaemonRequest{
642+
client, err := client.ServeProvisionerDaemon(ctx, codersdk.ServeProvisionerDaemonRequest{
642643
ID: uuid.New(),
643644
Name: t.Name(),
644645
Organization: org,
645646
Provisioners: []codersdk.ProvisionerType{codersdk.ProvisionerTypeEcho},
646647
Tags: tags,
647648
})
649+
assert.NoError(t, err, "provisioner daemon failed to start")
650+
651+
return client, err
648652
}, &provisionerd.Options{
649653
Logger: slogtest.Make(t, nil).Named("provisionerd").Leveled(slog.LevelDebug),
650654
UpdateInterval: 250 * time.Millisecond,

enterprise/cli/create_test.go

Lines changed: 91 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/google/uuid"
99
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
1011

1112
"github.com/coder/coder/v2/cli/clitest"
1213
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -32,11 +33,13 @@ func TestEnterpriseCreate(t *testing.T) {
3233
secondTemplates []string
3334
}
3435

36+
// setupMultipleOrganizations creates an extra organization, assigns a member
37+
// both organizations, and optionally creates templates in each organization.
3538
setupMultipleOrganizations := func(t *testing.T, args setupArgs) setupData {
3639
ownerClient, first := coderdenttest.New(t, &coderdenttest.Options{
3740
Options: &coderdtest.Options{
3841
// This only affects the first org.
39-
IncludeProvisionerDaemon: false,
42+
IncludeProvisionerDaemon: true,
4043
},
4144
LicenseOptions: &coderdenttest.LicenseOptions{
4245
Features: license.Features{
@@ -83,8 +86,9 @@ func TestEnterpriseCreate(t *testing.T) {
8386
}
8487
}
8588

89+
// Test creating a workspace in the second organization with a template
90+
// name.
8691
t.Run("CreateMultipleOrganization", func(t *testing.T) {
87-
// Creates a workspace in another organization
8892
t.Parallel()
8993

9094
const templateName = "secondtemplate"
@@ -96,37 +100,101 @@ func TestEnterpriseCreate(t *testing.T) {
96100
args := []string{
97101
"create",
98102
"my-workspace",
103+
"-y",
99104
"--template", templateName,
100105
}
101106
inv, root := clitest.New(t, args...)
102107
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"},
108+
_ = ptytest.New(t).Attach(inv)
109+
err := inv.Run()
110+
require.NoError(t, err)
111+
112+
ws, err := member.WorkspaceByOwnerAndName(context.Background(), codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})
113+
if assert.NoError(t, err, "expected workspace to be created") {
114+
assert.Equal(t, ws.TemplateName, templateName)
115+
assert.Equal(t, ws.OrganizationName, setup.second.Name, "workspace in second organization")
117116
}
118-
for _, m := range matches {
119-
pty.ExpectMatch(m.match)
120-
if len(m.write) > 0 {
121-
pty.WriteLine(m.write)
122-
}
117+
})
118+
119+
// If a template name exists in two organizations, the workspace create will
120+
// fail.
121+
t.Run("AmbiguousTemplateName", func(t *testing.T) {
122+
t.Parallel()
123+
124+
const templateName = "ambiguous"
125+
setup := setupMultipleOrganizations(t, setupArgs{
126+
firstTemplates: []string{templateName},
127+
secondTemplates: []string{templateName},
128+
})
129+
member := setup.member
130+
131+
args := []string{
132+
"create",
133+
"my-workspace",
134+
"-y",
135+
"--template", templateName,
123136
}
124-
<-doneChan
137+
inv, root := clitest.New(t, args...)
138+
clitest.SetupConfig(t, member, root)
139+
_ = ptytest.New(t).Attach(inv)
140+
err := inv.Run()
141+
require.Error(t, err, "expected error due to ambiguous template name")
142+
require.ErrorContains(t, err, "multiple templates found")
143+
})
144+
145+
// Ambiguous template names are allowed if the organization is specified.
146+
t.Run("WorkingAmbiguousTemplateName", func(t *testing.T) {
147+
t.Parallel()
148+
149+
const templateName = "ambiguous"
150+
setup := setupMultipleOrganizations(t, setupArgs{
151+
firstTemplates: []string{templateName},
152+
secondTemplates: []string{templateName},
153+
})
154+
member := setup.member
155+
156+
args := []string{
157+
"create",
158+
"my-workspace",
159+
"-y",
160+
"--template", templateName,
161+
"--org", setup.second.Name,
162+
}
163+
inv, root := clitest.New(t, args...)
164+
clitest.SetupConfig(t, member, root)
165+
_ = ptytest.New(t).Attach(inv)
166+
err := inv.Run()
167+
require.NoError(t, err)
125168

126169
ws, err := member.WorkspaceByOwnerAndName(context.Background(), codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{})
127170
if assert.NoError(t, err, "expected workspace to be created") {
128171
assert.Equal(t, ws.TemplateName, templateName)
129-
assert.Equal(t, ws.OrganizationName, setup.second.ID, "workspace in second organization")
172+
assert.Equal(t, ws.OrganizationName, setup.second.Name, "workspace in second organization")
130173
}
131174
})
175+
176+
// If an organization is specified, but the template is not in that
177+
// organization, an error is thrown.
178+
t.Run("CreateIncorrectOrg", func(t *testing.T) {
179+
t.Parallel()
180+
181+
const templateName = "secondtemplate"
182+
setup := setupMultipleOrganizations(t, setupArgs{
183+
firstTemplates: []string{templateName},
184+
})
185+
member := setup.member
186+
187+
args := []string{
188+
"create",
189+
"my-workspace",
190+
"-y",
191+
"--org", setup.second.Name,
192+
"--template", templateName,
193+
}
194+
inv, root := clitest.New(t, args...)
195+
clitest.SetupConfig(t, member, root)
196+
_ = ptytest.New(t).Attach(inv)
197+
err := inv.Run()
198+
require.Error(t, err)
199+
})
132200
}

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