@@ -83,6 +83,65 @@ func Test_LatestVersion(t *testing.T) {
83
83
newTag , err := img .GetNewestVersionFromTags (& vc , tagList )
84
84
assert .NoError (t , err )
85
85
assert .NotNil (t , newTag )
86
+ assert .Equal (t , "2025.01.25" , newTag .TagName )
87
+ })
88
+
89
+ t .Run ("Find latest version with YYYY.MM calver format" , func (t * testing.T ) {
90
+ tagList := newImageTagList ([]string {"2021.01" , "2022.02" , "2023.05" , "2025.01" })
91
+ img := NewFromIdentifier ("jannfis/test:2021.01" )
92
+ vc := VersionConstraint {Constraint : "2022.01" , Strategy : StrategyCalVer , MatchArgs : "YYYY.MM" }
93
+ newTag , err := img .GetNewestVersionFromTags (& vc , tagList )
94
+ assert .NoError (t , err )
95
+ assert .NotNil (t , newTag )
96
+ assert .Equal (t , "2025.01" , newTag .TagName )
97
+ })
98
+
99
+ t .Run ("Find latest version with YY.MM.DD calver format" , func (t * testing.T ) {
100
+ tagList := newImageTagList ([]string {"21.01.01" , "22.02.02" , "23.05.01" , "25.01.25" })
101
+ img := NewFromIdentifier ("jannfis/test:21.01.01" )
102
+ vc := VersionConstraint {Constraint : "22.01.01" , Strategy : StrategyCalVer , MatchArgs : "YY.MM.DD" }
103
+ newTag , err := img .GetNewestVersionFromTags (& vc , tagList )
104
+ assert .NoError (t , err )
105
+ assert .NotNil (t , newTag )
106
+ assert .Equal (t , "25.01.25" , newTag .TagName )
107
+ })
108
+
109
+ t .Run ("Invalid calver format should return error" , func (t * testing.T ) {
110
+ tagList := newImageTagList ([]string {"2021.01.01" , "2022.02.02" })
111
+ img := NewFromIdentifier ("jannfis/test:2021.01.01" )
112
+ vc := VersionConstraint {Constraint : "2022.01.01" , Strategy : StrategyCalVer , MatchArgs : "invalid-format" }
113
+ newTag , err := img .GetNewestVersionFromTags (& vc , tagList )
114
+ assert .Error (t , err )
115
+ assert .Nil (t , newTag )
116
+ })
117
+
118
+ t .Run ("Tags not matching calver format should be ignored" , func (t * testing.T ) {
119
+ tagList := newImageTagList ([]string {"2021.01.01" , "invalid" , "2023.05.01" , "not-a-date" })
120
+ img := NewFromIdentifier ("jannfis/test:2021.01.01" )
121
+ vc := VersionConstraint {Constraint : "2022.01.01" , Strategy : StrategyCalVer , MatchArgs : "YYYY.MM.DD" }
122
+ newTag , err := img .GetNewestVersionFromTags (& vc , tagList )
123
+ assert .NoError (t , err )
124
+ assert .NotNil (t , newTag )
125
+ assert .Equal (t , "2023.05.01" , newTag .TagName )
126
+ })
127
+
128
+ t .Run ("Empty tag list with calver should return nil" , func (t * testing.T ) {
129
+ tagList := newImageTagList ([]string {})
130
+ img := NewFromIdentifier ("jannfis/test:2021.01.01" )
131
+ vc := VersionConstraint {Constraint : "2022.01.01" , Strategy : StrategyCalVer , MatchArgs : "YYYY.MM.DD" }
132
+ newTag , err := img .GetNewestVersionFromTags (& vc , tagList )
133
+ assert .NoError (t , err )
134
+ assert .Nil (t , newTag )
135
+ })
136
+
137
+ t .Run ("Missing constraint with calver should use current date" , func (t * testing.T ) {
138
+ tagList := newImageTagList ([]string {"2021.01.01" , "2022.02.02" , "2023.05.01" })
139
+ img := NewFromIdentifier ("jannfis/test:2021.01.01" )
140
+ vc := VersionConstraint {Strategy : StrategyCalVer , MatchArgs : "YYYY.MM.DD" }
141
+ newTag , err := img .GetNewestVersionFromTags (& vc , tagList )
142
+ assert .NoError (t , err )
143
+ assert .NotNil (t , newTag )
144
+ assert .Equal (t , "2023.05.01" , newTag .TagName )
86
145
})
87
146
88
147
t .Run ("Find the latest version with no tags" , func (t * testing.T ) {
@@ -149,6 +208,7 @@ func Test_UpdateStrategy_String(t *testing.T) {
149
208
{"StrategyNewestBuild" , StrategyNewestBuild , "newest-build" },
150
209
{"StrategyAlphabetical" , StrategyAlphabetical , "alphabetical" },
151
210
{"StrategyDigest" , StrategyDigest , "digest" },
211
+ {"StrategyCalVer" , StrategyCalVer , "calver" },
152
212
{"unknown" , UpdateStrategy (- 1 ), "unknown" },
153
213
}
154
214
for _ , tt := range tests {
@@ -180,26 +240,30 @@ func Test_UpdateStrategy_IsCacheable(t *testing.T) {
180
240
assert .True (t , StrategySemVer .IsCacheable ())
181
241
assert .True (t , StrategyNewestBuild .IsCacheable ())
182
242
assert .True (t , StrategyAlphabetical .IsCacheable ())
243
+ assert .True (t , StrategyCalVer .IsCacheable ())
183
244
assert .False (t , StrategyDigest .IsCacheable ())
184
245
}
185
246
186
247
func Test_UpdateStrategy_NeedsMetadata (t * testing.T ) {
187
248
assert .False (t , StrategySemVer .NeedsMetadata ())
188
249
assert .True (t , StrategyNewestBuild .NeedsMetadata ())
189
250
assert .False (t , StrategyAlphabetical .NeedsMetadata ())
251
+ assert .False (t , StrategyCalVer .NeedsMetadata ())
190
252
assert .False (t , StrategyDigest .NeedsMetadata ())
191
253
}
192
254
193
255
func Test_UpdateStrategy_NeedsVersionConstraint (t * testing.T ) {
194
256
assert .False (t , StrategySemVer .NeedsVersionConstraint ())
195
257
assert .False (t , StrategyNewestBuild .NeedsVersionConstraint ())
196
258
assert .False (t , StrategyAlphabetical .NeedsVersionConstraint ())
259
+ assert .True (t , StrategyCalVer .NeedsVersionConstraint ())
197
260
assert .True (t , StrategyDigest .NeedsVersionConstraint ())
198
261
}
199
262
200
263
func Test_UpdateStrategy_WantsOnlyConstraintTag (t * testing.T ) {
201
264
assert .False (t , StrategySemVer .WantsOnlyConstraintTag ())
202
265
assert .False (t , StrategyNewestBuild .WantsOnlyConstraintTag ())
203
266
assert .False (t , StrategyAlphabetical .WantsOnlyConstraintTag ())
267
+ assert .False (t , StrategyCalVer .WantsOnlyConstraintTag ())
204
268
assert .True (t , StrategyDigest .WantsOnlyConstraintTag ())
205
269
}
0 commit comments