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)