Skip to content

Commit 51ee63f

Browse files
committed
Added update action specification tests
Also provided index to body parameters
1 parent bf2800d commit 51ee63f

File tree

8 files changed

+75
-7
lines changed

8 files changed

+75
-7
lines changed

springfox-grails/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ apply plugin: 'groovy'
2828
apply plugin: 'idea'
2929
apply plugin: 'maven-publish'
3030
apply plugin: 'com.jfrog.bintray'
31+
apply plugin: 'jacoco'
3132
apply from: 'gradle/publishing.gradle'
3233

3334
description = 'Springfox Grails module that produces grails specific documentation'
@@ -91,3 +92,12 @@ jar {
9192
)
9293
}
9394
}
95+
96+
jacocoTestReport {
97+
reports {
98+
xml.enabled true
99+
html.enabled false
100+
}
101+
}
102+
103+

springfox-grails/src/main/java/springfox/documentation/grails/ActionSpecificationFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ default ResolvedMethodParameter queryParameter(
3535
resolvedType);
3636
}
3737

38-
default ResolvedMethodParameter bodyParameter(ResolvedType resolvedType) {
38+
default ResolvedMethodParameter bodyParameter(int parameterIndex, ResolvedType resolvedType) {
3939
return new ResolvedMethodParameter(
40-
1,
40+
parameterIndex,
4141
"body",
4242
singletonList(SynthesizedAnnotations.REQUEST_BODY_ANNOTATION), resolvedType);
4343
}

springfox-grails/src/main/java/springfox/documentation/grails/CreateActionSpecificationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public ActionSpecification create(GrailsActionContext context) {
3030
new HashSet<>(Collections.singletonList(MediaType.APPLICATION_JSON)),
3131
handlerMethod,
3232
new ArrayList<>(Collections.singletonList(
33-
bodyParameter(resolver.resolve(domainClass(context.getDomainClass()))))),
33+
bodyParameter(1, resolver.resolve(domainClass(context.getDomainClass()))))),
3434
resolver.resolve(domainClass(context.getDomainClass())));
3535
}
3636
}

springfox-grails/src/main/java/springfox/documentation/grails/EditActionSpecificationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ActionSpecification create(GrailsActionContext context) {
3131
handlerMethod,
3232
new ArrayList<>(Arrays.asList(
3333
pathParameter(1, "id", resolver.resolve(idType(context.getDomainClass()))),
34-
bodyParameter(resolver.resolve(domainClass(context.getDomainClass()))))),
34+
bodyParameter(1, resolver.resolve(domainClass(context.getDomainClass()))))),
3535
resolver.resolve(domainClass(context.getDomainClass())));
3636

3737
}

springfox-grails/src/main/java/springfox/documentation/grails/PatchActionSpecificationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ActionSpecification create(GrailsActionContext context) {
3131
handlerMethod,
3232
new ArrayList<>(Arrays.asList(
3333
pathParameter(1, "id", resolver.resolve(idType(context.getDomainClass()))),
34-
bodyParameter(resolver.resolve(domainClass(context.getDomainClass()))))),
34+
bodyParameter(1, resolver.resolve(domainClass(context.getDomainClass()))))),
3535
resolver.resolve(domainClass(context.getDomainClass())));
3636

3737
}

springfox-grails/src/main/java/springfox/documentation/grails/SaveActionSpecificationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ActionSpecification create(GrailsActionContext context) {
3131
handlerMethod,
3232
new ArrayList<>(Arrays.asList(
3333
pathParameter(1, "id", resolver.resolve(idType(context.getDomainClass()))),
34-
bodyParameter(resolver.resolve(domainClass(context.getDomainClass()))))),
34+
bodyParameter(1, resolver.resolve(domainClass(context.getDomainClass()))))),
3535
resolver.resolve(domainClass(context.getDomainClass())));
3636

3737
}

springfox-grails/src/main/java/springfox/documentation/grails/UpdateActionSpecificationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ActionSpecification create(GrailsActionContext context) {
3131
handlerMethod,
3232
new ArrayList<>(Arrays.asList(
3333
pathParameter(1, "id", resolver.resolve(idType(context.getDomainClass()))),
34-
bodyParameter(resolver.resolve(domainClass(context.getDomainClass()))))),
34+
bodyParameter(2, resolver.resolve(domainClass(context.getDomainClass()))))),
3535
resolver.resolve(domainClass(context.getDomainClass())));
3636

3737
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package springfox.documentation.grails
2+
3+
import com.fasterxml.classmate.TypeResolver
4+
import grails.core.GrailsControllerClass
5+
import grails.core.GrailsDomainClass
6+
import grails.core.GrailsDomainClassProperty
7+
import org.springframework.http.MediaType
8+
import org.springframework.web.bind.annotation.RequestMethod
9+
import spock.lang.Specification
10+
11+
class UpdateActionSpecificationFactorySpec extends Specification {
12+
def controller = Mock(GrailsControllerClass)
13+
def domain = Mock(GrailsDomainClass)
14+
def identifierProperty = Mock(GrailsDomainClassProperty)
15+
16+
def setup() {
17+
controller.clazz >> AController
18+
domain.clazz >> ADomain
19+
domain.identifier >> identifierProperty
20+
domain.identifier.type >> Integer
21+
}
22+
23+
def "Create action produces action specification" () {
24+
given:
25+
def resolver = new TypeResolver()
26+
def sut = new UpdateActionSpecificationFactory(resolver)
27+
when:
28+
def spec = sut.create(new GrailsActionContext(controller, domain, "update"))
29+
then:
30+
spec.consumes == [MediaType.APPLICATION_JSON] as Set
31+
spec.produces == [MediaType.APPLICATION_JSON] as Set
32+
spec.supportedMethods == [RequestMethod.PUT, RequestMethod.POST] as Set
33+
spec.parameters.size() == 2
34+
spec.parameters[0].parameterType == resolver.resolve(Integer)
35+
spec.parameters[0].parameterIndex == 1
36+
spec.parameters[0].defaultName().isPresent()
37+
spec.parameters[0].defaultName().get() == "id"
38+
39+
spec.parameters[1].parameterType == resolver.resolve(ADomain)
40+
spec.parameters[1].parameterIndex == 2
41+
spec.parameters[1].defaultName().isPresent()
42+
spec.parameters[1].defaultName().get() == "body"
43+
44+
spec.returnType == resolver.resolve(ADomain)
45+
spec.handlerMethod.method == AController.methods.find {it.name == "update" }
46+
}
47+
48+
def "Index action throws exception when action is not found" () {
49+
given:
50+
def resolver = new TypeResolver()
51+
def sut = new UpdateActionSpecificationFactory(resolver)
52+
when:
53+
sut.create(new GrailsActionContext(controller, domain, "unknown"))
54+
then:
55+
def exception = thrown(NullPointerException)
56+
exception.message.contains("Handler method is null")
57+
}
58+
}

0 commit comments

Comments
 (0)