Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3996ba1

Browse files
Add custom asserts for MockMvc.perform() result
1 parent 2e7f158 commit 3996ba1

File tree

4 files changed

+133
-1
lines changed

4 files changed

+133
-1
lines changed

‎utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/util/SpringModelUtils.kt‎

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ object SpringModelUtils {
2424
val dirtiesContextClassModeClassId = ClassId("org.springframework.test.annotation.DirtiesContext\$ClassMode")
2525
val transactionalClassId = ClassId("org.springframework.transaction.annotation.Transactional")
2626
val autoConfigureTestDbClassId = ClassId("org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase")
27+
val autoConfigureMockMvcClassId = ClassId("org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc")
2728

2829
val runWithClassId = ClassId("org.junit.runner.RunWith")
2930
val springRunnerClassId = ClassId("org.springframework.test.context.junit4.SpringRunner")
@@ -110,6 +111,13 @@ object SpringModelUtils {
110111
val resultActionsClassId = ClassId("org.springframework.test.web.servlet.ResultActions")
111112
private val mockMvcClassId = ClassId("org.springframework.test.web.servlet.MockMvc")
112113
private val mvcResultClassId = ClassId("org.springframework.test.web.servlet.MvcResult")
114+
private val resultHandlerClassId = ClassId("org.springframework.test.web.servlet.ResultHandler")
115+
val mockMvcResultHandlersClassId = ClassId("org.springframework.test.web.servlet.result.MockMvcResultHandlers")
116+
private val resultMatcherClassId = ClassId("org.springframework.test.web.servlet.ResultMatcher")
117+
val mockMvcResultMatchersClassId = ClassId("org.springframework.test.web.servlet.result.MockMvcResultMatchers")
118+
private val statusResultMatchersClassId = ClassId("org.springframework.test.web.servlet.result.StatusResultMatchers")
119+
private val contentResultMatchersClassId = ClassId("org.springframework.test.web.servlet.result.ContentResultMatchers")
120+
private val viewResultMatchersClassId = ClassId("org.springframework.test.web.servlet.result.ViewResultMatchers")
113121
private val mockHttpServletRequestBuilderClassId = ClassId("org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder")
114122
private val modelAndViewClassId = ClassId("org.springframework.web.servlet.ModelAndView")
115123

@@ -178,6 +186,69 @@ object SpringModelUtils {
178186
returnType = stringClassId
179187
)
180188

189+
val resultActionsAndDoMethodId = MethodId(
190+
classId = resultActionsClassId,
191+
name = "andDo",
192+
parameters = listOf(resultHandlerClassId),
193+
returnType = resultActionsClassId
194+
)
195+
196+
val resultHandlersPrintMethodId = MethodId(
197+
classId = mockMvcResultHandlersClassId,
198+
name = "print",
199+
parameters = listOf(),
200+
returnType = resultHandlerClassId
201+
)
202+
203+
val resultActionsAndExpectMethodId = MethodId(
204+
classId = resultActionsClassId,
205+
name = "andExpect",
206+
parameters = listOf(resultMatcherClassId),
207+
returnType = resultActionsClassId
208+
)
209+
210+
val resultMatchersStatusMethodId = MethodId(
211+
classId = mockMvcResultMatchersClassId,
212+
name = "status",
213+
parameters = listOf(),
214+
returnType = statusResultMatchersClassId
215+
)
216+
217+
val statusMatchersIsMethodId = MethodId(
218+
classId = statusResultMatchersClassId,
219+
name = "is",
220+
parameters = listOf(intClassId),
221+
returnType = resultMatcherClassId
222+
)
223+
224+
val resultMatchersContentMethodId = MethodId(
225+
classId = mockMvcResultMatchersClassId,
226+
name = "content",
227+
parameters = listOf(),
228+
returnType = contentResultMatchersClassId
229+
)
230+
231+
val contentMatchersStringMethodId = MethodId(
232+
classId = contentResultMatchersClassId,
233+
name = "string",
234+
parameters = listOf(stringClassId),
235+
returnType = resultMatcherClassId
236+
)
237+
238+
val resultMatchersViewMethodId = MethodId(
239+
classId = contentResultMatchersClassId,
240+
name = "view",
241+
parameters = listOf(),
242+
returnType = viewResultMatchersClassId
243+
)
244+
245+
val viewMatchersNameMethodId = MethodId(
246+
classId = viewResultMatchersClassId,
247+
name = "name",
248+
parameters = listOf(stringClassId),
249+
returnType = resultMatcherClassId
250+
)
251+
181252
fun createMockMvcModel(idGenerator: () -> Int) =
182253
createBeanModel("mockMvc", idGenerator(), mockMvcClassId)
183254

‎utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ class CgSingleArgAnnotation(
405405
* NOTE: use `StatementConstructor.addAnnotation`
406406
* instead of explicit constructor call.
407407
*/
408-
class CgMultipleArgsAnnotation(
408+
data class CgMultipleArgsAnnotation(
409409
override val classId: ClassId,
410410
val arguments: MutableList<CgNamedAnnotationArgument>,
411411
override val target: AnnotationTarget,

‎utbot-framework/src/main/kotlin/org/utbot/framework/codegen/generator/SpringCodeGenerator.kt‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ import org.utbot.framework.codegen.domain.context.CgContext
44
import org.utbot.framework.codegen.domain.models.CgMethodTestSet
55
import org.utbot.framework.codegen.domain.models.builders.SpringTestClassModelBuilder
66
import org.utbot.framework.codegen.services.language.CgLanguageAssistant
7+
import org.utbot.framework.codegen.tree.CgCustomAssertConstructor
78
import org.utbot.framework.codegen.tree.CgSpringIntegrationTestClassConstructor
89
import org.utbot.framework.codegen.tree.CgSpringUnitTestClassConstructor
910
import org.utbot.framework.codegen.tree.CgSpringVariableConstructor
1011
import org.utbot.framework.codegen.tree.CgVariableConstructor
1112
import org.utbot.framework.codegen.tree.ututils.UtilClassKind
13+
import org.utbot.framework.codegen.tree.withCustomAssertForMockMvcResultActions
1214
import org.utbot.framework.plugin.api.ClassId
1315
import org.utbot.framework.plugin.api.ConcreteContextLoadingResult
1416
import org.utbot.framework.plugin.api.SpringSettings
@@ -27,6 +29,10 @@ class SpringCodeGenerator(
2729
override fun getVariableConstructorBy(context: CgContext): CgVariableConstructor =
2830
// TODO decorate original `params.cgLanguageAssistant.getVariableConstructorBy(context)`
2931
CgSpringVariableConstructor(context)
32+
33+
override fun getCustomAssertConstructorBy(context: CgContext): CgCustomAssertConstructor =
34+
params.cgLanguageAssistant.getCustomAssertConstructorBy(context)
35+
.withCustomAssertForMockMvcResultActions()
3036
}
3137
)
3238
) {
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.utbot.framework.codegen.tree
2+
3+
import org.utbot.framework.codegen.domain.context.CgContext
4+
import org.utbot.framework.codegen.domain.context.CgContextOwner
5+
import org.utbot.framework.codegen.domain.models.AnnotationTarget
6+
import org.utbot.framework.codegen.domain.models.CgVariable
7+
import org.utbot.framework.codegen.services.access.CgCallableAccessManager
8+
import org.utbot.framework.codegen.services.access.CgCallableAccessManagerImpl
9+
import org.utbot.framework.codegen.tree.CgComponents.getStatementConstructorBy
10+
import org.utbot.framework.plugin.api.UtCustomModel
11+
import org.utbot.framework.plugin.api.UtSpringMockMvcResultActionsModel
12+
import org.utbot.framework.plugin.api.util.SpringModelUtils.autoConfigureMockMvcClassId
13+
import org.utbot.framework.plugin.api.util.SpringModelUtils.contentMatchersStringMethodId
14+
import org.utbot.framework.plugin.api.util.SpringModelUtils.mockMvcResultHandlersClassId
15+
import org.utbot.framework.plugin.api.util.SpringModelUtils.mockMvcResultMatchersClassId
16+
import org.utbot.framework.plugin.api.util.SpringModelUtils.resultActionsAndDoMethodId
17+
import org.utbot.framework.plugin.api.util.SpringModelUtils.resultActionsAndExpectMethodId
18+
import org.utbot.framework.plugin.api.util.SpringModelUtils.resultHandlersPrintMethodId
19+
import org.utbot.framework.plugin.api.util.SpringModelUtils.resultMatchersContentMethodId
20+
import org.utbot.framework.plugin.api.util.SpringModelUtils.resultMatchersStatusMethodId
21+
import org.utbot.framework.plugin.api.util.SpringModelUtils.resultMatchersViewMethodId
22+
import org.utbot.framework.plugin.api.util.SpringModelUtils.statusMatchersIsMethodId
23+
import org.utbot.framework.plugin.api.util.SpringModelUtils.viewMatchersNameMethodId
24+
25+
fun CgCustomAssertConstructor.withCustomAssertForMockMvcResultActions() =
26+
CgMockMvcResultActionsAssertConstructor(context, this)
27+
28+
class CgMockMvcResultActionsAssertConstructor(
29+
context: CgContext,
30+
private val delegateAssertConstructor: CgCustomAssertConstructor
31+
) : CgCustomAssertConstructor by delegateAssertConstructor,
32+
CgContextOwner by context,
33+
CgStatementConstructor by getStatementConstructorBy(context),
34+
CgCallableAccessManager by CgCallableAccessManagerImpl(context) {
35+
override fun tryConstructCustomAssert(expected: UtCustomModel, actual: CgVariable): Boolean {
36+
if (expected is UtSpringMockMvcResultActionsModel) {
37+
addAnnotation(autoConfigureMockMvcClassId, AnnotationTarget.Class)
38+
var expr = actual[resultActionsAndDoMethodId](mockMvcResultHandlersClassId[resultHandlersPrintMethodId]())
39+
expr = expr[resultActionsAndExpectMethodId](
40+
mockMvcResultMatchersClassId[resultMatchersStatusMethodId]()[statusMatchersIsMethodId](expected.status)
41+
)
42+
expected.viewName?.let { viewName ->
43+
expr = expr[resultActionsAndExpectMethodId](
44+
mockMvcResultMatchersClassId[resultMatchersViewMethodId]()[viewMatchersNameMethodId](viewName)
45+
)
46+
}
47+
expr = expr[resultActionsAndExpectMethodId](
48+
mockMvcResultMatchersClassId[resultMatchersContentMethodId]()[contentMatchersStringMethodId](expected.contentAsString)
49+
)
50+
+expr
51+
return true
52+
} else
53+
return delegateAssertConstructor.tryConstructCustomAssert(expected, actual)
54+
}
55+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /