@@ -787,6 +787,77 @@ func TestTemplatePush(t *testing.T) {
787
787
assert .Equal (t ,defaultTTL .Milliseconds (),updated .DefaultTTLMillis )
788
788
assert .Equal (t ,allowUserCancelWorkspaceJobs ,updated .AllowUserCancelWorkspaceJobs )
789
789
})
790
+
791
+ t .Run ("EditMetadataKeepUnsetUnchanged" ,func (t * testing.T ) {
792
+ t .Parallel ()
793
+ client := coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerDaemon :true })
794
+ owner := coderdtest .CreateFirstUser (t ,client )
795
+ templateAdmin ,_ := coderdtest .CreateAnotherUser (t ,client ,owner .OrganizationID ,rbac .RoleTemplateAdmin ())
796
+ version := coderdtest .CreateTemplateVersion (t ,client ,owner .OrganizationID ,nil )
797
+ _ = coderdtest .AwaitTemplateVersionJobCompleted (t ,client ,version .ID )
798
+
799
+ template := coderdtest .CreateTemplate (t ,client ,owner .OrganizationID ,version .ID )
800
+
801
+ // Test the cli command.
802
+ source := clitest .CreateTemplateVersionSource (t ,& echo.Responses {
803
+ Parse :echo .ParseComplete ,
804
+ ProvisionApply :echo .ApplyComplete ,
805
+ })
806
+
807
+ desc := "lorem ipsum dolor sit amet et cetera"
808
+
809
+ inv ,root := clitest .New (t ,
810
+ "templates" ,
811
+ "push" ,
812
+ template .Name ,
813
+ "--directory" ,source ,
814
+ "--test.provisioner" ,string (database .ProvisionerTypeEcho ),
815
+ "--description" ,desc ,
816
+ )
817
+ clitest .SetupConfig (t ,templateAdmin ,root )
818
+ pty := ptytest .New (t ).Attach (inv )
819
+
820
+ execDone := make (chan error )
821
+ go func () {
822
+ execDone <- inv .Run ()
823
+ }()
824
+
825
+ matches := []struct {
826
+ match string
827
+ write string
828
+ }{
829
+ {match :"Upload" ,write :"yes" },
830
+ }
831
+ for _ ,m := range matches {
832
+ pty .ExpectMatch (m .match )
833
+ pty .WriteLine (m .write )
834
+ }
835
+
836
+ require .NoError (t ,<- execDone )
837
+
838
+ // Assert that the template version changed.
839
+ templateVersions ,err := client .TemplateVersionsByTemplate (context .Background (), codersdk.TemplateVersionsByTemplateRequest {
840
+ TemplateID :template .ID ,
841
+ })
842
+ require .NoError (t ,err )
843
+ assert .Len (t ,templateVersions ,2 )
844
+ assert .NotEqual (t ,template .ActiveVersionID ,templateVersions [1 ].ID )
845
+
846
+ // Assert that the template metadata changed.
847
+ updated ,err := client .Template (context .Background (),template .ID )
848
+ require .NoError (t ,err )
849
+ assert .Equal (t ,template .Name ,updated .Name )
850
+ assert .Equal (t ,template .DisplayName ,updated .DisplayName )
851
+ assert .Equal (t ,desc ,updated .Description )
852
+ assert .Equal (t ,template .Icon ,updated .Icon )
853
+ assert .Equal (t ,template .DefaultTTLMillis ,updated .DefaultTTLMillis )
854
+ assert .Equal (t ,template .FailureTTLMillis ,updated .FailureTTLMillis )
855
+ assert .Equal (t ,template .TimeTilDormantAutoDeleteMillis ,updated .TimeTilDormantAutoDeleteMillis )
856
+ assert .Equal (t ,template .AutostartRequirement .DaysOfWeek ,updated .AutostartRequirement .DaysOfWeek )
857
+ assert .Equal (t ,template .AutostopRequirement .DaysOfWeek ,updated .AutostopRequirement .DaysOfWeek )
858
+ assert .Equal (t ,template .RequireActiveVersion ,updated .RequireActiveVersion )
859
+ assert .Equal (t ,template .AllowUserCancelWorkspaceJobs ,updated .AllowUserCancelWorkspaceJobs )
860
+ })
790
861
}
791
862
792
863
func createEchoResponsesWithTemplateVariables (templateVariables []* proto.TemplateVariable )* echo.Responses {