From 132fbe228f22633915c909bcdcefa999705c3807 Mon Sep 17 00:00:00 2001 From: corby kim Date: Tue, 5 Mar 2024 11:11:24 +0900 Subject: [PATCH 1/2] Add query parameters to MockMvc Kotlin DSL See gh-32371 --- .../test/web/servlet/MockHttpServletRequestDsl.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt index d00d9fe6c9..fb1839ace0 100644 --- a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt +++ b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt @@ -115,6 +115,18 @@ open class MockHttpServletRequestDsl internal constructor (private val builder: */ var params: MultiValueMap? = null + /** + * @see [MockHttpServletRequestBuilder.queryParam] + */ + fun queryParam(name: String, vararg values: String) { + builder.queryParam(name, *values) + } + + /** + * @see [MockHttpServletRequestBuilder.queryParams] + */ + var queryParams: MultiValueMap? = null + /** * @see [MockHttpServletRequestBuilder.cookie] */ @@ -200,6 +212,7 @@ open class MockHttpServletRequestDsl internal constructor (private val builder: accept?.also { builder.accept(it) } contentType?.also { builder.contentType(it) } params?.also { builder.params(it) } + queryParams?.also { builder.queryParams(it) } sessionAttrs?.also { builder.sessionAttrs(it) } flashAttrs?.also { builder.flashAttrs(it) } session?.also { builder.session(it) } From cfd0aee4dbb939c29cb4f1816e0ee63085235186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Tue, 5 Mar 2024 10:59:12 +0100 Subject: [PATCH 2/2] Polish and add MockMvcExtensionsTests.queryParameter Closes gh-32371 --- .../test/web/servlet/MockHttpServletRequestDsl.kt | 3 ++- .../test/web/servlet/MockMvcExtensionsTests.kt | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt index fb1839ace0..3929811446 100644 --- a/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt +++ b/spring-test/src/main/kotlin/org/springframework/test/web/servlet/MockHttpServletRequestDsl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -116,6 +116,7 @@ open class MockHttpServletRequestDsl internal constructor (private val builder: var params: MultiValueMap? = null /** + * @since 6.1.5 * @see [MockHttpServletRequestBuilder.queryParam] */ fun queryParam(name: String, vararg values: String) { diff --git a/spring-test/src/test/kotlin/org/springframework/test/web/servlet/MockMvcExtensionsTests.kt b/spring-test/src/test/kotlin/org/springframework/test/web/servlet/MockMvcExtensionsTests.kt index 36f8f32f14..eea4afe9cf 100644 --- a/spring-test/src/test/kotlin/org/springframework/test/web/servlet/MockMvcExtensionsTests.kt +++ b/spring-test/src/test/kotlin/org/springframework/test/web/servlet/MockMvcExtensionsTests.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -219,6 +219,16 @@ class MockMvcExtensionsTests { "Content type expected: but was:") } + @Test + fun queryParameter() { + val result = mockMvc.get("/") { + queryParam("foo", "bar") + queryParam("foo", "baz") + }.andReturn() + assertThat(result.request.parameterMap["foo"]).containsExactly("bar", "baz") + assertThat(result.request.queryString).isEqualTo("foo=bar&foo=baz") + } + @RestController private class PersonController {