Skip to content

Commit 4fac5bf

Browse files
Working on improving context path handling in GebSpec tests
This should generate a method like this: @Autowired public void configureGebBaseUrl(@value("${server.contextPath:/}") String serverContextPath, @value("${local.server.port}") int serverPort) { System.setProperty('geb.build.baseUrl', "http://localhost:${serverPort}${serverContextPath}") } Working on #10306
1 parent 5c606da commit 4fac5bf

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

grails-plugin-testing/src/main/groovy/org/grails/compiler/injection/test/IntegrationTestMixinTransformation.groovy

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import org.grails.io.support.MainClassFinder
1616
import org.grails.test.context.junit4.GrailsJunit4ClassRunner
1717
import org.grails.test.context.junit4.GrailsTestConfiguration
1818
import org.junit.runner.RunWith
19+
import org.springframework.beans.factory.annotation.Autowired
1920
import org.springframework.beans.factory.annotation.Value
2021
import org.springframework.beans.factory.config.AutowireCapableBeanFactory
2122
import org.springframework.boot.test.IntegrationTest
@@ -168,20 +169,26 @@ class IntegrationTestMixinTransformation implements ASTTransformation {
168169

169170
protected void enhanceGebSpecWithPort(ClassNode classNode) {
170171
if (GrailsASTUtils.isSubclassOf(classNode, "geb.spock.GebSpec")) {
171-
def integerClassNode = ClassHelper.make(Integer)
172-
def param = new Parameter(integerClassNode, "port")
172+
def contextPathParameter = new Parameter(ClassHelper.make(String), 'serverContextPath')
173+
def cpValueAnnotation = new AnnotationNode(ClassHelper.make(Value))
174+
cpValueAnnotation.setMember('value', new ConstantExpression('${server.contextPath:/}'))
175+
contextPathParameter.addAnnotation(cpValueAnnotation)
176+
177+
def serverPortParameter = new Parameter(ClassHelper.make(Integer.TYPE), 'serverPort')
178+
def spValueAnnotation = new AnnotationNode(ClassHelper.make(Value))
179+
spValueAnnotation.setMember('value', new ConstantExpression('${local.server.port}'))
180+
serverPortParameter.addAnnotation(spValueAnnotation)
181+
173182
def setterBody = new BlockStatement()
174183
def systemClassExpression = new ClassExpression(ClassHelper.make(System))
175184
def args = new ArgumentListExpression()
176185
args.addExpression(new ConstantExpression("geb.build.baseUrl"))
177-
args.addExpression(new GStringExpression('http://localhost:${port}', [new ConstantExpression("http://localhost:"), new ConstantExpression("")], [new VariableExpression(param)] as List<Expression>))
186+
args.addExpression(new GStringExpression('http://localhost:${serverPort}${serverContextPath}', [new ConstantExpression('http://localhost:'), new ConstantExpression(""), new ConstantExpression("")], [new VariableExpression('serverPort'), new VariableExpression('serverContextPath')] as List<Expression>))
178187
setterBody.addStatement(new ExpressionStatement(new MethodCallExpression(systemClassExpression, "setProperty", args)))
179-
def method = new MethodNode("setGebPort", Modifier.PUBLIC, ClassHelper.VOID_TYPE, [param] as Parameter[], null, setterBody)
180-
def valueAnnotation = new AnnotationNode(ClassHelper.make(Value))
181-
valueAnnotation.setMember("value", new ConstantExpression('${local.server.port}'))
182-
method.addAnnotation(valueAnnotation)
188+
def method = new MethodNode("configureGebBaseUrl", Modifier.PUBLIC, ClassHelper.VOID_TYPE, [contextPathParameter, serverPortParameter] as Parameter[], null, setterBody)
189+
method.addAnnotation(new AnnotationNode(ClassHelper.make(CompileStatic)))
190+
method.addAnnotation(new AnnotationNode(ClassHelper.make(Autowired)))
183191
classNode.addMethod(method)
184192
}
185193
}
186-
187194
}

0 commit comments

Comments
 (0)