@@ -14,38 +14,47 @@ import org.gradle.testkit.runner.TaskOutcome
1414class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTest {
1515 def " test setup works" () {
1616 when :
17- def result = gradleRunner(" generateTransportVersionDefinition" ). build()
17+ def result = gradleRunner(
18+ " :myserver:generateTransportVersionDefinition" ,
19+ " :myserver:validateTransportVersionDefinitions"
20+ ). build()
21+
1822 then :
1923 result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
24+ result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
2025 }
2126
22- def " A definition should be generated for the given branches " (List<String > branches) {
27+ def " A definition should be generated when specified by an arg but no code reference exists " (List<String > branches) {
2328 given :
2429 String tvName = " test_tv_patch_ids"
25- referencedTransportVersion(tvName)
2630 List<LatestFile > latestBranchesToOriginalIds = readLatestFiles(branches)
2731
28- when :
32+ when : " generation is run with a name specified and no code references "
2933 def result = gradleRunner(
30- " :myserver:validateTransportVersionDefinitions" ,
3134 " generateTransportVersionDefinition" ,
3235 " --name=" + tvName,
3336 " --branches=" + branches. join(" ," )
3437 ). build()
3538
36- then :
39+ then : " The generation task should succeed and create the definition file "
3740 result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
38- result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
3941 validateDefinitionFile(tvName, latestBranchesToOriginalIds)
4042
43+ when : " A reference is added"
44+ referencedTransportVersion(tvName)
45+ def validateResult = gradleRunner(" validateTransportVersionDefinitions" ). build()
46+
47+ then : " The full validation should succeed now that the reference exists"
48+ validateResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
49+
4150 where :
4251 branches << [
4352 [" 9.2" ],
4453 [" 9.2" , " 9.1" ]
4554 ]
4655 }
4756
48- def " A definition should be generated when the name isn't specified" () {
57+ def " A definition should be generated when the name arg isn't specified but a code reference exists " () {
4958 given :
5059 String tvName = " test_tv_patch_ids"
5160 referencedTransportVersion(tvName)
@@ -65,7 +74,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
6574 validateDefinitionFile(tvName, latestBranchesToOriginalIds)
6675 }
6776
68- def " Should fail if branches are omitted and state should remain unaltered" () {
77+ def " Generation should fail if the branches arg is omitted, the state should remain unaltered" () {
6978 when :
7079 def generateResult = gradleRunner(" generateTransportVersionDefinition" , " --name=no_branches" ). buildAndFail()
7180 def validateResult = gradleRunner(" validateTransportVersionDefinitions" ). build()
@@ -75,11 +84,91 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
7584 validateResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
7685 }
7786
87+ def " Latest file modifications should be reverted" (
88+ List<String > branchesParam,
89+ List<String > latestFilesModified,
90+ String name
91+ ) {
92+ given :
93+ def originalLatestFiles = latestFilesModified. stream(). map { readLatestFile(it) }. toList()
94+
95+ when : " The latest files are modified then generation is run without a name"
96+ originalLatestFiles. forEach {
97+ latestTransportVersion(it. branch, it. name + " _modification" , (it. id + 1 ). toString())
98+ }
99+ def args = [
100+ " :myserver:validateTransportVersionDefinitions" ,
101+ " :myserver:generateTransportVersionDefinition"
102+ ]
103+ if (branchesParam != null ) {
104+ args. add(" --branches=" + branchesParam. join(" ," ))
105+ }
106+ if (name != null ) {
107+ referencedTransportVersion(name)
108+ }
109+ def result = gradleRunner(args. toArray(new String [0 ])). build()
110+
111+ then : " The generation and validation tasks should succeed, and the latest files should be reverted"
112+ result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
113+ result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
114+ originalLatestFiles. forEach { originalLatest ->
115+ def latest = readLatestFile(originalLatest. branch)
116+ assert latest. branch == originalLatest. branch
117+ assert latest. id == originalLatest. id
118+ }
119+
120+ where :
121+ branchesParam | latestFilesModified | name
122+ null | [" 9.2" ] | null
123+ null | [" 9.2" , " 9.1" ] | null
124+ [" 9.2" , " 9.1" ] | [" 9.2" ] | null
125+ [" 9.2" ] | [" 9.1" ] | " test_tv" // TODO legitimate bug?
126+ }
127+
128+ // TODO this test is finding a legitimate bug
129+ def " definitions that are no longer referenced should be deleted" (List<String > branches) {
130+ given :
131+ String definitionName = " test_tv_patch_ids"
132+ referencedTransportVersion(definitionName)
133+ List<LatestFile > originalLatestFiles = readLatestFiles(branches)
134+
135+ when : " The definition is generated"
136+ def result = gradleRunner(
137+ " :myserver:validateTransportVersionDefinitions" ,
138+ " :myserver:generateTransportVersionDefinition" ,
139+ " --name=" + definitionName,
140+ " --branches=" + branches. join(" ," )
141+ ). build()
142+
143+ then : " The generation task should succeed and create the definition file"
144+ result. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
145+ result. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
146+ validateDefinitionFile(definitionName, originalLatestFiles)
147+
148+ when : " The reference is removed and the generation is run again"
149+ deleteTransportVersionReference(definitionName)
150+ def secondResult = gradleRunner(
151+ " :myserver:validateTransportVersionDefinitions" ,
152+ " :myserver:generateTransportVersionDefinition" ,
153+ " --branches=" + branches. join(" ," )
154+ ). build()
155+
156+ then : " The generation task should succeed and the definition file should be deleted"
157+ ! file(" myserver/src/main/resources/transport/definitions/named/${ definitionName} .csv" ). exists()
158+ secondResult. task(" :myserver:generateTransportVersionDefinition" ). outcome == TaskOutcome . SUCCESS
159+ secondResult. task(" :myserver:validateTransportVersionDefinitions" ). outcome == TaskOutcome . SUCCESS
160+
161+ where :
162+ branches << [
163+ [" 9.2" ],
164+ [" 9.2" , " 9.1" ]
165+ ]
166+ }
167+
78168
79169 /*
80170 TODO: Add tests that check that:
81- - TVs added ontop of main in git, but are no longer referenced, are deleted
82- - name without branches param should fail
171+ -
83172 - a latest file without a corresponding definition file should be reverted to main
84173 - a merge conflict should be resolved, resulting in regeneration of the latest file.
85174 -
0 commit comments