@@ -15,6 +15,7 @@ import (
1515 "github.com/coder/coder/coderd/database"
1616 "github.com/coder/coder/coderd/provisionerdserver"
1717 "github.com/coder/coder/codersdk"
18+ "github.com/coder/coder/examples"
1819 "github.com/coder/coder/provisioner/echo"
1920 "github.com/coder/coder/provisionersdk/proto"
2021 "github.com/coder/coder/testutil"
@@ -128,6 +129,57 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) {
128129 require .Len (t , auditor .AuditLogs , 1 )
129130 assert .Equal (t , database .AuditActionCreate , auditor .AuditLogs [0 ].Action )
130131 })
132+ t .Run ("Example" , func (t * testing.T ) {
133+ t .Parallel ()
134+ client := coderdtest .New (t , nil )
135+ user := coderdtest .CreateFirstUser (t , client )
136+
137+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
138+ defer cancel ()
139+
140+ ls , err := examples .List ()
141+ require .NoError (t , err )
142+
143+ // try a bad example ID
144+ _ , err = client .CreateTemplateVersion (ctx , user .OrganizationID , codersdk.CreateTemplateVersionRequest {
145+ Name : "my-example" ,
146+ StorageMethod : codersdk .ProvisionerStorageMethodFile ,
147+ ExampleID : "not a real ID" ,
148+ Provisioner : codersdk .ProvisionerTypeEcho ,
149+ })
150+ require .Error (t , err )
151+ require .ErrorContains (t , err , "not found" )
152+
153+ // try file and example IDs
154+ _ , err = client .CreateTemplateVersion (ctx , user .OrganizationID , codersdk.CreateTemplateVersionRequest {
155+ Name : "my-example" ,
156+ StorageMethod : codersdk .ProvisionerStorageMethodFile ,
157+ ExampleID : ls [0 ].ID ,
158+ FileID : uuid .New (),
159+ Provisioner : codersdk .ProvisionerTypeEcho ,
160+ })
161+ require .Error (t , err )
162+ require .ErrorContains (t , err , "example_id" )
163+ require .ErrorContains (t , err , "file_id" )
164+
165+ // try a good example ID
166+ tv , err := client .CreateTemplateVersion (ctx , user .OrganizationID , codersdk.CreateTemplateVersionRequest {
167+ Name : "my-example" ,
168+ StorageMethod : codersdk .ProvisionerStorageMethodFile ,
169+ ExampleID : ls [0 ].ID ,
170+ Provisioner : codersdk .ProvisionerTypeEcho ,
171+ })
172+ require .NoError (t , err )
173+ require .Equal (t , "my-example" , tv .Name )
174+
175+ // ensure the template tar was uploaded correctly
176+ fl , ct , err := client .Download (ctx , tv .Job .FileID )
177+ require .NoError (t , err )
178+ require .Equal (t , "application/x-tar" , ct )
179+ tar , err := examples .Archive (ls [0 ].ID )
180+ require .NoError (t , err )
181+ require .EqualValues (t , tar , fl )
182+ })
131183}
132184
133185func TestPatchCancelTemplateVersion (t * testing.T ) {
@@ -1019,3 +1071,21 @@ func TestPreviousTemplateVersion(t *testing.T) {
10191071 require .Equal (t , templateBVersion1 .ID , result .ID )
10201072 })
10211073}
1074+
1075+ func TestTemplateExamples (t * testing.T ) {
1076+ t .Parallel ()
1077+ t .Run ("OK" , func (t * testing.T ) {
1078+ t .Parallel ()
1079+ client := coderdtest .New (t , nil )
1080+ user := coderdtest .CreateFirstUser (t , client )
1081+
1082+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
1083+ defer cancel ()
1084+
1085+ ex , err := client .TemplateExamples (ctx , user .OrganizationID )
1086+ require .NoError (t , err )
1087+ ls , err := examples .List ()
1088+ require .NoError (t , err )
1089+ require .EqualValues (t , ls , ex )
1090+ })
1091+ }
0 commit comments