@@ -901,9 +901,9 @@ func TestPatchTemplateMeta(t *testing.T) {
901
901
902
902
req := codersdk.UpdateTemplateMeta {
903
903
Name :"new-template-name" ,
904
- DisplayName :"Displayed Name 456" ,
905
- Description :"lorem ipsum dolor sit amet et cetera" ,
906
- Icon :"/icon/new-icon.png" ,
904
+ DisplayName :ptr . Ref ( "Displayed Name 456" ) ,
905
+ Description :ptr . Ref ( "lorem ipsum dolor sit amet et cetera" ) ,
906
+ Icon :ptr . Ref ( "/icon/new-icon.png" ) ,
907
907
DefaultTTLMillis :12 * time .Hour .Milliseconds (),
908
908
ActivityBumpMillis :3 * time .Hour .Milliseconds (),
909
909
AllowUserCancelWorkspaceJobs :false ,
@@ -918,9 +918,9 @@ func TestPatchTemplateMeta(t *testing.T) {
918
918
require .NoError (t ,err )
919
919
assert .Greater (t ,updated .UpdatedAt ,template .UpdatedAt )
920
920
assert .Equal (t ,req .Name ,updated .Name )
921
- assert .Equal (t ,req .DisplayName ,updated .DisplayName )
922
- assert .Equal (t ,req .Description ,updated .Description )
923
- assert .Equal (t ,req .Icon ,updated .Icon )
921
+ assert .Equal (t ,* req .DisplayName ,updated .DisplayName )
922
+ assert .Equal (t ,* req .Description ,updated .Description )
923
+ assert .Equal (t ,* req .Icon ,updated .Icon )
924
924
assert .Equal (t ,req .DefaultTTLMillis ,updated .DefaultTTLMillis )
925
925
assert .Equal (t ,req .ActivityBumpMillis ,updated .ActivityBumpMillis )
926
926
assert .False (t ,req .AllowUserCancelWorkspaceJobs )
@@ -930,9 +930,9 @@ func TestPatchTemplateMeta(t *testing.T) {
930
930
require .NoError (t ,err )
931
931
assert .Greater (t ,updated .UpdatedAt ,template .UpdatedAt )
932
932
assert .Equal (t ,req .Name ,updated .Name )
933
- assert .Equal (t ,req .DisplayName ,updated .DisplayName )
934
- assert .Equal (t ,req .Description ,updated .Description )
935
- assert .Equal (t ,req .Icon ,updated .Icon )
933
+ assert .Equal (t ,* req .DisplayName ,updated .DisplayName )
934
+ assert .Equal (t ,* req .Description ,updated .Description )
935
+ assert .Equal (t ,* req .Icon ,updated .Icon )
936
936
assert .Equal (t ,req .DefaultTTLMillis ,updated .DefaultTTLMillis )
937
937
assert .Equal (t ,req .ActivityBumpMillis ,updated .ActivityBumpMillis )
938
938
assert .False (t ,req .AllowUserCancelWorkspaceJobs )
@@ -1167,9 +1167,9 @@ func TestPatchTemplateMeta(t *testing.T) {
1167
1167
1168
1168
got ,err := client .UpdateTemplateMeta (ctx ,template .ID , codersdk.UpdateTemplateMeta {
1169
1169
Name :template .Name ,
1170
- DisplayName :template .DisplayName ,
1171
- Description :template .Description ,
1172
- Icon :template .Icon ,
1170
+ DisplayName :& template .DisplayName ,
1171
+ Description :& template .Description ,
1172
+ Icon :& template .Icon ,
1173
1173
DefaultTTLMillis :0 ,
1174
1174
AutostopRequirement :& template .AutostopRequirement ,
1175
1175
AllowUserCancelWorkspaceJobs :template .AllowUserCancelWorkspaceJobs ,
@@ -1202,9 +1202,9 @@ func TestPatchTemplateMeta(t *testing.T) {
1202
1202
1203
1203
got ,err := client .UpdateTemplateMeta (ctx ,template .ID , codersdk.UpdateTemplateMeta {
1204
1204
Name :template .Name ,
1205
- DisplayName :template .DisplayName ,
1206
- Description :template .Description ,
1207
- Icon :template .Icon ,
1205
+ DisplayName :& template .DisplayName ,
1206
+ Description :& template .Description ,
1207
+ Icon :& template .Icon ,
1208
1208
DefaultTTLMillis :template .DefaultTTLMillis ,
1209
1209
AutostopRequirement :& template .AutostopRequirement ,
1210
1210
AllowUserCancelWorkspaceJobs :template .AllowUserCancelWorkspaceJobs ,
@@ -1263,9 +1263,9 @@ func TestPatchTemplateMeta(t *testing.T) {
1263
1263
allowAutostop .Store (false )
1264
1264
got ,err := client .UpdateTemplateMeta (ctx ,template .ID , codersdk.UpdateTemplateMeta {
1265
1265
Name :template .Name ,
1266
- DisplayName :template .DisplayName ,
1267
- Description :template .Description ,
1268
- Icon :template .Icon ,
1266
+ DisplayName :& template .DisplayName ,
1267
+ Description :& template .Description ,
1268
+ Icon :& template .Icon ,
1269
1269
DefaultTTLMillis :template .DefaultTTLMillis ,
1270
1270
AutostopRequirement :& template .AutostopRequirement ,
1271
1271
AllowUserCancelWorkspaceJobs :template .AllowUserCancelWorkspaceJobs ,
@@ -1294,9 +1294,9 @@ func TestPatchTemplateMeta(t *testing.T) {
1294
1294
1295
1295
got ,err := client .UpdateTemplateMeta (ctx ,template .ID , codersdk.UpdateTemplateMeta {
1296
1296
Name :template .Name ,
1297
- DisplayName :template .DisplayName ,
1298
- Description :template .Description ,
1299
- Icon :template .Icon ,
1297
+ DisplayName :& template .DisplayName ,
1298
+ Description :& template .Description ,
1299
+ Icon :& template .Icon ,
1300
1300
// Increase the default TTL to avoid error "not modified".
1301
1301
DefaultTTLMillis :template .DefaultTTLMillis + 1 ,
1302
1302
AutostopRequirement :& template .AutostopRequirement ,
@@ -1326,8 +1326,8 @@ func TestPatchTemplateMeta(t *testing.T) {
1326
1326
1327
1327
req := codersdk.UpdateTemplateMeta {
1328
1328
Name :template .Name ,
1329
- Description :template .Description ,
1330
- Icon :template .Icon ,
1329
+ Description :& template .Description ,
1330
+ Icon :& template .Icon ,
1331
1331
DefaultTTLMillis :template .DefaultTTLMillis ,
1332
1332
ActivityBumpMillis :template .ActivityBumpMillis ,
1333
1333
AutostopRequirement :nil ,
@@ -1387,7 +1387,7 @@ func TestPatchTemplateMeta(t *testing.T) {
1387
1387
ctr .Icon = "/icon/code.png"
1388
1388
})
1389
1389
req := codersdk.UpdateTemplateMeta {
1390
- Icon :"" ,
1390
+ Icon :ptr . Ref ( "" ) ,
1391
1391
}
1392
1392
1393
1393
ctx := testutil .Context (t ,testutil .WaitLong )
@@ -1442,9 +1442,9 @@ func TestPatchTemplateMeta(t *testing.T) {
1442
1442
require .EqualValues (t ,1 ,template .AutostopRequirement .Weeks )
1443
1443
req := codersdk.UpdateTemplateMeta {
1444
1444
Name :template .Name ,
1445
- DisplayName :template .DisplayName ,
1446
- Description :template .Description ,
1447
- Icon :template .Icon ,
1445
+ DisplayName :& template .DisplayName ,
1446
+ Description :& template .Description ,
1447
+ Icon :& template .Icon ,
1448
1448
AllowUserCancelWorkspaceJobs :template .AllowUserCancelWorkspaceJobs ,
1449
1449
DefaultTTLMillis :time .Hour .Milliseconds (),
1450
1450
AutostopRequirement :& codersdk.TemplateAutostopRequirement {
@@ -1519,9 +1519,9 @@ func TestPatchTemplateMeta(t *testing.T) {
1519
1519
require .EqualValues (t ,2 ,template .AutostopRequirement .Weeks )
1520
1520
req := codersdk.UpdateTemplateMeta {
1521
1521
Name :template .Name ,
1522
- DisplayName :template .DisplayName ,
1523
- Description :template .Description ,
1524
- Icon :template .Icon ,
1522
+ DisplayName :& template .DisplayName ,
1523
+ Description :& template .Description ,
1524
+ Icon :& template .Icon ,
1525
1525
AllowUserCancelWorkspaceJobs :template .AllowUserCancelWorkspaceJobs ,
1526
1526
DefaultTTLMillis :time .Hour .Milliseconds (),
1527
1527
AutostopRequirement :& codersdk.TemplateAutostopRequirement {
@@ -1556,9 +1556,9 @@ func TestPatchTemplateMeta(t *testing.T) {
1556
1556
require .EqualValues (t ,1 ,template .AutostopRequirement .Weeks )
1557
1557
req := codersdk.UpdateTemplateMeta {
1558
1558
Name :template .Name ,
1559
- DisplayName :template .DisplayName ,
1560
- Description :template .Description ,
1561
- Icon :template .Icon ,
1559
+ DisplayName :& template .DisplayName ,
1560
+ Description :& template .Description ,
1561
+ Icon :& template .Icon ,
1562
1562
AllowUserCancelWorkspaceJobs :template .AllowUserCancelWorkspaceJobs ,
1563
1563
DefaultTTLMillis :time .Hour .Milliseconds (),
1564
1564
AutostopRequirement :& codersdk.TemplateAutostopRequirement {
@@ -1618,6 +1618,106 @@ func TestPatchTemplateMeta(t *testing.T) {
1618
1618
require .NoError (t ,err )
1619
1619
assert .False (t ,updated .UseClassicParameterFlow ,"expected false" )
1620
1620
})
1621
+
1622
+ t .Run ("SupportEmptyOrDefaultFields" ,func (t * testing.T ) {
1623
+ t .Parallel ()
1624
+
1625
+ client := coderdtest .New (t ,nil )
1626
+ user := coderdtest .CreateFirstUser (t ,client )
1627
+ version := coderdtest .CreateTemplateVersion (t ,client ,user .OrganizationID ,nil )
1628
+
1629
+ displayName := "Test Display Name"
1630
+ description := "test-description"
1631
+ icon := "/icon/icon.png"
1632
+ defaultTTLMillis := 10 * time .Hour .Milliseconds ()
1633
+
1634
+ reference := coderdtest .CreateTemplate (t ,client ,user .OrganizationID ,version .ID ,func (ctr * codersdk.CreateTemplateRequest ) {
1635
+ ctr .DisplayName = displayName
1636
+ ctr .Description = description
1637
+ ctr .Icon = icon
1638
+ ctr .DefaultTTLMillis = ptr .Ref (defaultTTLMillis )
1639
+ })
1640
+ require .Equal (t ,displayName ,reference .DisplayName )
1641
+ require .Equal (t ,description ,reference .Description )
1642
+ require .Equal (t ,icon ,reference .Icon )
1643
+
1644
+ restoreReq := codersdk.UpdateTemplateMeta {
1645
+ DisplayName :& displayName ,
1646
+ Description :& description ,
1647
+ Icon :& icon ,
1648
+ DefaultTTLMillis :defaultTTLMillis ,
1649
+ }
1650
+
1651
+ type expected struct {
1652
+ displayName string
1653
+ description string
1654
+ icon string
1655
+ defaultTTLMillis int64
1656
+ }
1657
+
1658
+ type testCase struct {
1659
+ name string
1660
+ req codersdk.UpdateTemplateMeta
1661
+ expected expected
1662
+ }
1663
+
1664
+ tests := []testCase {
1665
+ {
1666
+ name :"Only update default_ttl_ms" ,
1667
+ req : codersdk.UpdateTemplateMeta {DefaultTTLMillis :99 * time .Hour .Milliseconds ()},
1668
+ expected :expected {displayName :reference .DisplayName ,description :reference .Description ,icon :reference .Icon ,defaultTTLMillis :99 * time .Hour .Milliseconds ()},
1669
+ },
1670
+ {
1671
+ name :"Clear display name" ,
1672
+ req : codersdk.UpdateTemplateMeta {DisplayName :ptr .Ref ("" )},
1673
+ expected :expected {displayName :"" ,description :reference .Description ,icon :reference .Icon ,defaultTTLMillis :0 },
1674
+ },
1675
+ {
1676
+ name :"Clear description" ,
1677
+ req : codersdk.UpdateTemplateMeta {Description :ptr .Ref ("" )},
1678
+ expected :expected {displayName :reference .DisplayName ,description :"" ,icon :reference .Icon ,defaultTTLMillis :0 },
1679
+ },
1680
+ {
1681
+ name :"Clear icon" ,
1682
+ req : codersdk.UpdateTemplateMeta {Icon :ptr .Ref ("" )},
1683
+ expected :expected {displayName :reference .DisplayName ,description :reference .Description ,icon :"" ,defaultTTLMillis :0 },
1684
+ },
1685
+ {
1686
+ name :"Nil display name defaults to reference display name" ,
1687
+ req : codersdk.UpdateTemplateMeta {DisplayName :nil },
1688
+ expected :expected {displayName :reference .DisplayName ,description :reference .Description ,icon :reference .Icon ,defaultTTLMillis :0 },
1689
+ },
1690
+ {
1691
+ name :"Nil description defaults to reference description" ,
1692
+ req : codersdk.UpdateTemplateMeta {Description :nil },
1693
+ expected :expected {displayName :reference .DisplayName ,description :reference .Description ,icon :reference .Icon ,defaultTTLMillis :0 },
1694
+ },
1695
+ {
1696
+ name :"Nil icon defaults to reference icon" ,
1697
+ req : codersdk.UpdateTemplateMeta {Icon :nil },
1698
+ expected :expected {displayName :reference .DisplayName ,description :reference .Description ,icon :reference .Icon ,defaultTTLMillis :0 },
1699
+ },
1700
+ }
1701
+
1702
+ for _ ,tc := range tests {
1703
+ //nolint:tparallel,paralleltest
1704
+ t .Run (tc .name ,func (t * testing.T ) {
1705
+ defer func () {
1706
+ ctx := testutil .Context (t ,testutil .WaitLong )
1707
+ // Restore reference after each test case
1708
+ _ ,err := client .UpdateTemplateMeta (ctx ,reference .ID ,restoreReq )
1709
+ require .NoError (t ,err )
1710
+ }()
1711
+ ctx := testutil .Context (t ,testutil .WaitLong )
1712
+ updated ,err := client .UpdateTemplateMeta (ctx ,reference .ID ,tc .req )
1713
+ require .NoError (t ,err )
1714
+ assert .Equal (t ,tc .expected .displayName ,updated .DisplayName )
1715
+ assert .Equal (t ,tc .expected .description ,updated .Description )
1716
+ assert .Equal (t ,tc .expected .icon ,updated .Icon )
1717
+ assert .Equal (t ,tc .expected .defaultTTLMillis ,updated .DefaultTTLMillis )
1718
+ })
1719
+ }
1720
+ })
1621
1721
}
1622
1722
1623
1723
func TestDeleteTemplate (t * testing.T ) {