Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc1885da

Browse files
authored
fix: NPE when no arg provided to 'coder update' (#3347)
- Add test suite for 'coder update'.
1 parent8a28112 commitc1885da

File tree

2 files changed

+143
-1
lines changed

2 files changed

+143
-1
lines changed

‎cli/update.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ func update() *cobra.Command {
1818

1919
cmd:=&cobra.Command{
2020
Annotations:workspaceCommand,
21-
Use:"update",
21+
Use:"update <workspace>",
22+
Args:cobra.ExactArgs(1),
2223
Short:"Update a workspace to the latest template version",
2324
RunE:func(cmd*cobra.Command,args []string)error {
2425
client,err:=createClient(cmd)

‎cli/update_test.go

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
package cli_test
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
10+
11+
"github.com/coder/coder/cli/clitest"
12+
"github.com/coder/coder/coderd/coderdtest"
13+
"github.com/coder/coder/codersdk"
14+
"github.com/coder/coder/provisioner/echo"
15+
"github.com/coder/coder/pty/ptytest"
16+
)
17+
18+
funcTestUpdate(t*testing.T) {
19+
t.Parallel()
20+
21+
// Test that the function does not panic on missing arg.
22+
t.Run("NoArgs",func(t*testing.T) {
23+
t.Parallel()
24+
25+
cmd,_:=clitest.New(t,"update")
26+
err:=cmd.Execute()
27+
require.Error(t,err)
28+
})
29+
30+
t.Run("OK",func(t*testing.T) {
31+
t.Parallel()
32+
33+
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerD:true})
34+
user:=coderdtest.CreateFirstUser(t,client)
35+
version1:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
36+
37+
coderdtest.AwaitTemplateVersionJob(t,client,version1.ID)
38+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version1.ID)
39+
40+
cmd,root:=clitest.New(t,"create",
41+
"my-workspace",
42+
"--template",template.Name,
43+
"-y",
44+
)
45+
clitest.SetupConfig(t,client,root)
46+
47+
err:=cmd.Execute()
48+
require.NoError(t,err)
49+
50+
ws,err:=client.WorkspaceByOwnerAndName(context.Background(),"testuser","my-workspace", codersdk.WorkspaceOptions{})
51+
require.NoError(t,err)
52+
require.Equal(t,version1.ID.String(),ws.LatestBuild.TemplateVersionID.String())
53+
54+
version2:=coderdtest.UpdateTemplateVersion(t,client,user.OrganizationID,&echo.Responses{
55+
Parse:echo.ParseComplete,
56+
Provision:echo.ProvisionComplete,
57+
ProvisionDryRun:echo.ProvisionComplete,
58+
},template.ID)
59+
_=coderdtest.AwaitTemplateVersionJob(t,client,version2.ID)
60+
61+
err=client.UpdateActiveTemplateVersion(context.Background(),template.ID, codersdk.UpdateActiveTemplateVersion{
62+
ID:version2.ID,
63+
})
64+
require.NoError(t,err)
65+
66+
cmd,root=clitest.New(t,"update",ws.Name)
67+
clitest.SetupConfig(t,client,root)
68+
69+
err=cmd.Execute()
70+
require.NoError(t,err)
71+
72+
ws,err=client.WorkspaceByOwnerAndName(context.Background(),"testuser","my-workspace", codersdk.WorkspaceOptions{})
73+
require.NoError(t,err)
74+
require.Equal(t,version2.ID.String(),ws.LatestBuild.TemplateVersionID.String())
75+
})
76+
77+
t.Run("WithParameter",func(t*testing.T) {
78+
t.Parallel()
79+
80+
client:=coderdtest.New(t,&coderdtest.Options{IncludeProvisionerD:true})
81+
user:=coderdtest.CreateFirstUser(t,client)
82+
version1:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
83+
84+
coderdtest.AwaitTemplateVersionJob(t,client,version1.ID)
85+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version1.ID)
86+
87+
cmd,root:=clitest.New(t,"create",
88+
"my-workspace",
89+
"--template",template.Name,
90+
"-y",
91+
)
92+
clitest.SetupConfig(t,client,root)
93+
94+
err:=cmd.Execute()
95+
require.NoError(t,err)
96+
97+
ws,err:=client.WorkspaceByOwnerAndName(context.Background(),"testuser","my-workspace", codersdk.WorkspaceOptions{})
98+
require.NoError(t,err)
99+
require.Equal(t,version1.ID.String(),ws.LatestBuild.TemplateVersionID.String())
100+
101+
defaultValue:="something"
102+
version2:=coderdtest.UpdateTemplateVersion(t,client,user.OrganizationID,&echo.Responses{
103+
Parse:createTestParseResponseWithDefault(defaultValue),
104+
Provision:echo.ProvisionComplete,
105+
ProvisionDryRun:echo.ProvisionComplete,
106+
},template.ID)
107+
coderdtest.AwaitTemplateVersionJob(t,client,version2.ID)
108+
109+
err=client.UpdateActiveTemplateVersion(context.Background(),template.ID, codersdk.UpdateActiveTemplateVersion{
110+
ID:version2.ID,
111+
})
112+
require.NoError(t,err)
113+
114+
cmd,root=clitest.New(t,"update",ws.Name)
115+
clitest.SetupConfig(t,client,root)
116+
117+
pty:=ptytest.New(t)
118+
cmd.SetIn(pty.Input())
119+
cmd.SetOut(pty.Output())
120+
121+
doneChan:=make(chanstruct{})
122+
gofunc() {
123+
deferclose(doneChan)
124+
err:=cmd.Execute()
125+
assert.NoError(t,err)
126+
}()
127+
128+
matches:= []string{
129+
fmt.Sprintf("Enter a value (default: %q):",defaultValue),"bingo",
130+
"Enter a value:","boingo",
131+
}
132+
fori:=0;i<len(matches);i+=2 {
133+
match:=matches[i]
134+
value:=matches[i+1]
135+
pty.ExpectMatch(match)
136+
pty.WriteLine(value)
137+
}
138+
139+
<-doneChan
140+
})
141+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp