4
4
"context"
5
5
"testing"
6
6
7
+ "github.com/google/uuid"
7
8
"github.com/stretchr/testify/assert"
8
9
"github.com/stretchr/testify/require"
9
10
@@ -17,47 +18,150 @@ import (
17
18
18
19
func TestTemplateUpdate (t * testing.T ) {
19
20
t .Parallel ()
21
+ // NewParameter will:
22
+ // 1. Create a template version with 0 params
23
+ // 2. Create a new version with 1 param
24
+ // 2a. Expects 1 param prompt, fills in value
25
+ // 3. Assert 1 param value in new version
26
+ // 4. Creates a new version with same param
27
+ // 4a. Expects 0 prompts as the param value is carried over
28
+ // 5. Assert 1 param value in new version
29
+ // 6. Creates a new version with 0 params
30
+ // 7. Asset 0 params in new version
31
+ t .Run ("NewParameter" , func (t * testing.T ) {
32
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
33
+ user := coderdtest .CreateFirstUser (t , client )
34
+ // Create initial template version to update
35
+ lastActiveVersion := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
36
+ _ = coderdtest .AwaitTemplateVersionJob (t , client , lastActiveVersion .ID )
37
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , lastActiveVersion .ID )
20
38
21
- client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
22
- user := coderdtest .CreateFirstUser (t , client )
23
- version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
24
- _ = coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
25
- template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
39
+ // Create new template version with a new parameter
40
+ source := clitest .CreateTemplateVersionSource (t , & echo.Responses {
41
+ Parse : createTestParseResponse (),
42
+ Provision : echo .ProvisionComplete ,
43
+ })
44
+ cmd , root := clitest .New (t , "templates" , "update" , template .Name , "-y" , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ))
45
+ clitest .SetupConfig (t , client , root )
46
+ pty := ptytest .New (t )
47
+ cmd .SetIn (pty .Input ())
48
+ cmd .SetOut (pty .Output ())
26
49
27
- // Test the cli command.
28
- source := clitest .CreateTemplateVersionSource (t , & echo.Responses {
29
- Parse : echo .ParseComplete ,
30
- Provision : echo .ProvisionComplete ,
50
+ execDone := make (chan error )
51
+ go func () {
52
+ execDone <- cmd .Execute ()
53
+ }()
54
+
55
+ matches := []struct {
56
+ match string
57
+ write string
58
+ }{
59
+ // Expect to be prompted for the new param
60
+ {match : "Enter a value:" , write : "peter-pan" },
61
+ }
62
+ for _ , m := range matches {
63
+ pty .ExpectMatch (m .match )
64
+ pty .WriteLine (m .write )
65
+ }
66
+
67
+ require .NoError (t , <- execDone )
68
+
69
+ // Assert template version changed and we have the new param
70
+ latestTV , latestParams := latestTemplateVersion (t , client , template .ID )
71
+ assert .NotEqual (t , lastActiveVersion .ID , latestTV .ID )
72
+ require .Len (t , latestParams , 1 , "expect 1 param" )
73
+ lastActiveVersion = latestTV
74
+
75
+ // Second update of the same source requires no prompt since the params
76
+ // are carried over.
77
+ cmd , root = clitest .New (t , "templates" , "update" , template .Name , "-y" , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ))
78
+ clitest .SetupConfig (t , client , root )
79
+ go func () {
80
+ execDone <- cmd .Execute ()
81
+ }()
82
+ require .NoError (t , <- execDone )
83
+
84
+ // Assert template version changed and we have the carried over param
85
+ latestTV , latestParams = latestTemplateVersion (t , client , template .ID )
86
+ assert .NotEqual (t , lastActiveVersion .ID , latestTV .ID )
87
+ require .Len (t , latestParams , 1 , "expect 1 param" )
88
+ lastActiveVersion = latestTV
89
+
90
+ // Remove the param
91
+ source = clitest .CreateTemplateVersionSource (t , & echo.Responses {
92
+ Parse : echo .ParseComplete ,
93
+ Provision : echo .ProvisionComplete ,
94
+ })
95
+
96
+ cmd , root = clitest .New (t , "templates" , "update" , template .Name , "-y" , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ))
97
+ clitest .SetupConfig (t , client , root )
98
+ go func () {
99
+ execDone <- cmd .Execute ()
100
+ }()
101
+ require .NoError (t , <- execDone )
102
+ // Assert template version changed and the param was removed
103
+ latestTV , latestParams = latestTemplateVersion (t , client , template .ID )
104
+ assert .NotEqual (t , lastActiveVersion .ID , latestTV .ID )
105
+ require .Len (t , latestParams , 0 , "expect 0 param" )
106
+ lastActiveVersion = latestTV
31
107
})
32
- cmd , root := clitest .New (t , "templates" , "update" , template .Name , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ))
33
- clitest .SetupConfig (t , client , root )
34
- pty := ptytest .New (t )
35
- cmd .SetIn (pty .Input ())
36
- cmd .SetOut (pty .Output ())
37
-
38
- execDone := make (chan error )
39
- go func () {
40
- execDone <- cmd .Execute ()
41
- }()
42
-
43
- matches := []struct {
44
- match string
45
- write string
46
- }{
47
- {match : "Upload" , write : "yes" },
48
- }
49
- for _ , m := range matches {
50
- pty .ExpectMatch (m .match )
51
- pty .WriteLine (m .write )
52
- }
53
-
54
- require .NoError (t , <- execDone )
55
-
56
- // Assert that the template version changed.
57
- templateVersions , err := client .TemplateVersionsByTemplate (context .Background (), codersdk.TemplateVersionsByTemplateRequest {
58
- TemplateID : template .ID ,
108
+
109
+ t .Run ("OK" , func (t * testing.T ) {
110
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
111
+ user := coderdtest .CreateFirstUser (t , client )
112
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , nil )
113
+ _ = coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
114
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
115
+
116
+ // Test the cli command.
117
+ source := clitest .CreateTemplateVersionSource (t , & echo.Responses {
118
+ Parse : echo .ParseComplete ,
119
+ Provision : echo .ProvisionComplete ,
120
+ })
121
+ cmd , root := clitest .New (t , "templates" , "update" , template .Name , "--directory" , source , "--test.provisioner" , string (database .ProvisionerTypeEcho ))
122
+ clitest .SetupConfig (t , client , root )
123
+ pty := ptytest .New (t )
124
+ cmd .SetIn (pty .Input ())
125
+ cmd .SetOut (pty .Output ())
126
+
127
+ execDone := make (chan error )
128
+ go func () {
129
+ execDone <- cmd .Execute ()
130
+ }()
131
+
132
+ matches := []struct {
133
+ match string
134
+ write string
135
+ }{
136
+ {match : "Upload" , write : "yes" },
137
+ }
138
+ for _ , m := range matches {
139
+ pty .ExpectMatch (m .match )
140
+ pty .WriteLine (m .write )
141
+ }
142
+
143
+ require .NoError (t , <- execDone )
144
+
145
+ // Assert that the template version changed.
146
+ templateVersions , err := client .TemplateVersionsByTemplate (context .Background (), codersdk.TemplateVersionsByTemplateRequest {
147
+ TemplateID : template .ID ,
148
+ })
149
+ require .NoError (t , err )
150
+ assert .Len (t , templateVersions , 2 )
151
+ assert .NotEqual (t , template .ActiveVersionID , templateVersions [1 ].ID )
59
152
})
153
+ }
154
+
155
+ func latestTemplateVersion (t * testing.T , client * codersdk.Client , templateID uuid.UUID ) (codersdk.TemplateVersion , []codersdk.Parameter ) {
156
+ t .Helper ()
157
+
158
+ ctx := context .Background ()
159
+ newTemplate , err := client .Template (ctx , templateID )
160
+ require .NoError (t , err )
161
+ tv , err := client .TemplateVersion (ctx , newTemplate .ActiveVersionID )
60
162
require .NoError (t , err )
61
- assert .Len (t , templateVersions , 2 )
62
- assert .NotEqual (t , template .ActiveVersionID , templateVersions [1 ].ID )
163
+ params , err := client .Parameters (ctx , codersdk .ParameterImportJob , tv .Job .ID )
164
+ require .NoError (t , err )
165
+
166
+ return tv , params
63
167
}
0 commit comments