@@ -95,7 +95,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
9595
9696 when : " We modify the latest files"
9797 originalModifiedLatestFiles. forEach {
98- latestTransportVersion(it. branch, it. name + " _modification" , (it. id + 1 ). toString())
98+ latestTransportVersion(it. branch, it. name + " _modification" , (it. id + 7 ). toString())
9999 }
100100
101101 and : " We run the generation task"
@@ -106,10 +106,12 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
106106 if (branchesParam != null ) {
107107 args. add(" --branches=" + branchesParam. join(" ," ))
108108 }
109+ def result = gradleRunner(args. toArray(new String [0 ])). build()
110+
111+ and : " If a name is specified, we add a reference so validation succeeds"
109112 if (name != null ) {
110- referencedTransportVersion(name) // Ensure the definition file is referenced to allow validation to succeed
113+ referencedTransportVersion(name)
111114 }
112- def result = gradleRunner(args. toArray(new String [0 ])). build()
113115
114116 then : " The generation and validation tasks should succeed"
115117 result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
@@ -143,7 +145,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
143145 }
144146
145147 // TODO this test is finding a legitimate bug
146- def " definitions that are no longer referenced should be deleted and latest files reverted" (List<String > branches) {
148+ def " When a reference is removed after a definition is generated, the definition should be deleted and latest files reverted" (List<String > branches) {
147149 given :
148150 String definitionName = " test_tv_patch_ids"
149151 referencedTransportVersion(definitionName)
@@ -182,34 +184,190 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
182184 ]
183185 }
184186
185- def " unreferenced definition files should be deleted " ( ) {
187+ def " When a reference is renamed after a definition was generated, the original should be removed and latest files updated " ( List< String > branches ) {
186188 given :
187- namedTransportVersion(" old_name" , " 8124000" )
188- referencedTransportVersion(" new_name" )
189+ String firstName = " original_tv_name"
190+ referencedTransportVersion(firstName)
191+ List<LatestFile > originalLatestFiles1 = readLatestFiles(branches)
189192
190- when :
193+ when : " The definition is generated "
191194 def result = gradleRunner(
192195 " :myserver:validateTransportVersionDefinitions" ,
193196 " :myserver:generateTransportVersionDefinition" ,
194- " --name=new_name " ,
195- " --branches=9.2 "
197+ " --name=" + firstName ,
198+ " --branches=" + branches . join( " , " )
196199 ). build()
197200
198- then :
199- ! file(" myserver/src/main/resources/transport/definitions/named/old_name .csv" ). exists()
201+ then : " The generation task should succeed and create the definition file "
202+ file(" myserver/src/main/resources/transport/definitions/named/${ firstName } .csv" ). exists()
200203 result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
201204 result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
205+ validateDefinitionFile(firstName, originalLatestFiles1)
206+
207+ when : " The reference is renamed and the generation is run again"
208+ deleteTransportVersionReference(firstName)
209+ String secondName = " new_tv_name"
210+ referencedTransportVersion(secondName)
211+ List<LatestFile > originalLatestFiles2 = readLatestFiles(branches)
212+
213+ def secondResult = gradleRunner(
214+ " :myserver:validateTransportVersionDefinitions" ,
215+ " :myserver:generateTransportVersionDefinition" ,
216+ " --branches=" + branches. join(" ," )
217+ ). build()
218+
219+ then : " The generation task should succeed and the definition file should be deleted"
220+ ! file(" myserver/src/main/resources/transport/definitions/named/${ firstName} .csv" ). exists()
221+ file(" myserver/src/main/resources/transport/definitions/named/${ secondName} .csv" ). exists()
222+ secondResult. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
223+ secondResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
224+ validateDefinitionFile(secondName, originalLatestFiles2)
225+
226+ where :
227+ branches << [
228+ [" 9.2" ],
229+ [" 9.2" , " 9.1" ]
230+ ]
202231 }
203232
233+ def " when a definition file is deleted and the reference and latest files haven't been, the system should regenerate" (List<String > branches) {
234+ given :
235+ String definitionName = " test_tv"
236+ referencedTransportVersion(definitionName)
237+ List<LatestFile > originalLatestFiles = readLatestFiles(branches)
238+
239+ when : " The definition is generated"
240+ def result = gradleRunner(
241+ " :myserver:validateTransportVersionDefinitions" ,
242+ " :myserver:generateTransportVersionDefinition" ,
243+ " --name=" + definitionName,
244+ " --branches=" + branches. join(" ," )
245+ ). build()
246+
247+ then : " The generation task should succeed and create the definition file"
248+ result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
249+ result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
250+ validateDefinitionFile(definitionName, originalLatestFiles)
251+
252+ when : " The definition file is deleted"
253+ file(" myserver/src/main/resources/transport/definitions/named/${ definitionName} .csv" ). delete()
254+
255+ then : " The definition file should no longer exist"
256+ ! file(" myserver/src/main/resources/transport/definitions/named/${ definitionName} .csv" ). exists()
257+
258+ when : " Validation is run"
259+ def validationResult = gradleRunner(" :myserver:validateTransportVersionDefinitions" ). buildAndFail()
260+
261+ then : " The validation task should fail since the definition file is missing"
262+ validationResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . FAILED
263+
264+ when : " The generation task is run again"
265+ def secondResult = gradleRunner(
266+ " :myserver:validateTransportVersionDefinitions" ,
267+ " :myserver:generateTransportVersionDefinition" ,
268+ " --branches=" + branches. join(" ," )
269+ ). build()
270+
271+ then : " The generation task should succeed and the definition file should be recreated"
272+ secondResult. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
273+ secondResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
274+ validateDefinitionFile(definitionName, originalLatestFiles)
275+
276+ where :
277+ branches << [
278+ [" 9.2" ],
279+ [" 9.2" , " 9.1" ]
280+ ]
281+ }
204282
205- /*
206- TODO: Add tests that check that:
207- -
208- - a latest file without a corresponding definition file should be reverted to main
209- - a merge conflict should be resolved, resulting in regeneration of the latest file.
210- - add a reference, generate, remove the reference, add another reference, generate
211- -
212- */
283+ def " When a latest file is incorrectly changed and a referenced definition file exists, the latest file should be regenerated" (List<String > branches) {
284+ given :
285+ String definitionName = " test_tv"
286+ referencedTransportVersion(definitionName)
287+ List<LatestFile > originalLatestFiles = readLatestFiles(branches)
288+
289+ when : " The definition is generated"
290+ def result = gradleRunner(
291+ " :myserver:validateTransportVersionDefinitions" ,
292+ " :myserver:generateTransportVersionDefinition" ,
293+ " --name=" + definitionName,
294+ " --branches=" + branches. join(" ," )
295+ ). build()
296+
297+ then : " The generation task should succeed and create the definition file"
298+ result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
299+ result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
300+ validateDefinitionFile(definitionName, originalLatestFiles)
301+
302+ when : " The latest files are modified"
303+ originalLatestFiles. forEach {
304+ latestTransportVersion(it. branch, it. name + " _modification" , (it. id + 7 ). toString())
305+ }
306+
307+ and : " The generation task is run again"
308+ def secondResult = gradleRunner(
309+ " :myserver:validateTransportVersionDefinitions" ,
310+ " :myserver:generateTransportVersionDefinition" ,
311+ " --branches=" + branches. join(" ," )
312+ ). build()
313+
314+ then : " The generation task should succeed and the latest files should be reverted and incremented correctly"
315+ secondResult. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
316+ secondResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
317+ validateDefinitionFile(definitionName, originalLatestFiles)
318+
319+ where :
320+ branches << [
321+ [" 9.2" ],
322+ [" 9.2" , " 9.1" ]
323+ ]
324+ }
325+
326+ // TODO legitimate bug, need to always clean up latest for patch versions
327+ def " When a definition is created with a patch version, then generation is called without the patch version, the state should be updated" () {
328+ given :
329+ String definitionName = " test_tv"
330+ referencedTransportVersion(definitionName)
331+ List<String > branches = [" 9.2" , " 9.1" ]
332+ List<String > mainBranch = [" 9.2" ]
333+ List<LatestFile > originalLatestFilesWithPatch = readLatestFiles(branches)
334+ List<LatestFile > originalLatestMainFile = readLatestFiles(mainBranch)
335+ String originalLatestPatchText = file(" myserver/src/main/resources/transport/latest/9.1.csv" ). text. strip()
336+
337+ when : " The definition is generated with a patch version"
338+ def result = gradleRunner(
339+ " :myserver:validateTransportVersionDefinitions" ,
340+ " :myserver:generateTransportVersionDefinition" ,
341+ " --name=" + definitionName,
342+ " --branches=" + branches. join(" ," )
343+ ). build()
344+
345+ then : " The generation task should succeed and create the definition file"
346+ result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
347+ result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
348+ validateDefinitionFile(definitionName, originalLatestFilesWithPatch)
349+
350+ when : " The generation is called again without the patch version"
351+ def secondResult = gradleRunner(
352+ " :myserver:validateTransportVersionDefinitions" ,
353+ " :myserver:generateTransportVersionDefinition" ,
354+ " --branches=" + mainBranch. join(" ," )
355+ ). build()
356+
357+ then : " The generation task should succeed and the definition file should be updated"
358+ secondResult. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
359+ secondResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
360+ validateDefinitionFile(definitionName, originalLatestMainFile)
361+ originalLatestPatchText == file(" myserver/src/main/resources/transport/latest/9.1.csv" ). text. strip()
362+ }
363+
364+ def " Latest files mangled by a merge conflict should be regenerated, and the most recent definition file should be updated" () {
365+
366+ }
367+
368+ def " When a reference is deleted, the system should revert to the original state" () {
369+
370+ }
213371
214372 List<LatestFile > readLatestFiles (List<String > branches ) {
215373 return branches. stream()
0 commit comments