Commit Graph

641 Commits

Author SHA1 Message Date
Rossen Stoyanchev
24358200c3 Assertion errors with request and response details
Issue: SPR-15249
2017-02-19 21:14:48 -05:00
Rossen Stoyanchev
d1a64e1122 Refactor ExchangeResult
Clearly separate how the result of an exchange is represented before
the response body has been read (e.g. assertions on status and headers
only) vs later after the body is extracted to a representation
(assertions on the extracted body) or is decoded to Flux<T> (e.g. for
use with a StepVerifier).
2017-02-19 21:14:48 -05:00
Rossen Stoyanchev
20be40bf64 WebTestClient polish and minor refactoring 2017-02-19 21:14:48 -05:00
Rossen Stoyanchev
9829a62044 Refactor WebTestClient assertions take 3
WebTestClient now defines all the steps from setup to performing
an exchange and applying expectations.

The order of expectations now ensures the response status and headers
are verified first since that's available before the body is consumed
and also because it determines how the body is to be decoded, i.e.
error vs success scenarios.

There is now a built-in option for verifying the response as a Map
along with Map-specific assertions.

There are similar options for verifying the response as a List as well
as whether to "collect" the list or "take" the first N elements from
the response stream.
2017-02-17 23:10:34 -05:00
Rossen Stoyanchev
285ba7d391 Update WebTestClient builder 2017-02-15 20:10:47 -05:00
Rossen Stoyanchev
51f2042e97 Refactor WebTestClient assertions
Rather than returning ExchangeActions that contains ExchangeInfo and
applies a chain of assertions, the exchange operation in WebTestClient
now has an extra step to decode the response.

The outcome of that is ExchangeResult<T>, parameterized with the
decoded body type, and containing the request and response details,
also providing access to built-inassertions via an assertThat()
instance method.

This approach lends itself better to decoding and asserting response
body types with generecis. It is also more friendly to using any
assertion library such as AssertJ since you get the result first
and then deal with assertions.
2017-02-15 18:11:51 -05:00
Juergen Hoeller
599c1ba73e Polishing 2017-02-15 18:05:38 +01:00
Jan-Espen Oversand
5158207fe0 Passing the uri as a string to the MockMvc request builder will cause an encoded uri to become double encoded. 2017-02-14 09:37:49 +01:00
Rossen Stoyanchev
130598ffb2 Updates to ExchangeActions
Add assertEntity(Foo.class).map() -> Map<String, Foo>

Add assertBody().map() -> Map<String, String>

Rename andAssert(Consumer<?>) to "consume" in assertion classes

Remove andAssert + andDo from top-level ExchangeActions
2017-02-13 22:03:04 -05:00
Phillip Webb
656e7f801e Remove XmlExpectationsHelper hard XML Unit requirement
Update XmlExpectationsHelper to use an inner class for XML Unit calls
so that the XML Unit dependency remains optional.

Issue: SPR-15156
2017-02-13 16:17:21 -08:00
Brian Clozel
28e77fa68a Assert XML without considering order in XmlExpectationsHelper
This commit changes the `assertXmlEqual` implementation to compare
expected and actual XML documents without considering the order of XML
nodes.

Issue: SPR-15156
2017-02-13 21:07:35 +01:00
Rossen Stoyanchev
896e4db411 ExchangeActions update
Put assertBodyXyz options behind a common assertBody() entry point
currently including "isEmpty" and "asMap" but in the future others
related to JSON content or XPath for example.

Now that ExchangeActions provides method to access the ExchangeInfo
it has been removed from constructors of assertion classes that
already have ExchangeActions.
2017-02-13 09:29:17 -05:00
Juergen Hoeller
199aa776c9 Support for Servlet 4.0 (PushBuilder argument, MockServletContext)
Issue: SPR-12674
2017-02-13 15:06:59 +01:00
Rossen Stoyanchev
d513fe87f2 Refactor ExchangeActions 2017-02-11 16:25:22 -05:00
Rossen Stoyanchev
4b4201efa1 WebFlux test support for server endpoints
Issue: SPR-14590
2017-02-10 17:53:12 -05:00
Juergen Hoeller
ed85337901 MockHttpServletRequest exposes "HTTP/1.1" as default protocol
Issue: SPR-15232
2017-02-10 10:47:36 +01:00
Stephane Nicoll
75b18d7b7b Update copyright header 2017-02-09 16:05:57 +01:00
Masayasu Yamamoto
6aa300d733 Fix Javadoc in ContentResultMatchers
Closes gh-1322
2017-02-09 16:04:46 +01:00
Rossen Stoyanchev
f2967467e0 Improve writing in mock reactive request and response
Before this change the write Publisher was saved and Mono.empty()
returned from the write metohd which did not properly implement
the write contract since no writing ("consuming") was done.

This can be a problem in some cases. For example the request may appear
to succeed even if the publisher produces an error later when
subscribed to later after request handling completes.

This commit introduces a writeHandler function in the mock request and
response. By default it "writes" by consuming the content immediately,
which allows it to return a Mono<Void> that properly reflects when
writing is done, and it also caches the data so it may be replayed
later for test assertions.

For streaming scenario a custom writeHandler may be registered which
allows the custom handling to determine how long to stream before
cancelling so request handling may complete.

Issue: SPR-14590
2017-02-07 21:57:38 -05:00
Juergen Hoeller
0da964f0a7 MockHttpServletRequest returns empty BufferedReader in case of no content
Issue: SPR-15215
2017-02-02 19:55:42 +01:00
Rossen Stoyanchev
1fb0b0b786 Expose remoteAddress from ServerHttpRequest
Issue: SPR-15200
2017-01-31 15:04:24 -05:00
Juergen Hoeller
1b2dc3638f Revisit Assert to avoid single-arg assert methods (with refined messages)
Issue: SPR-15196
2017-01-30 22:15:55 +01:00
Rossen Stoyanchev
eabd8a2964 Support Servlet Part in Spring MVC Test
Issue: SPR-14253
2017-01-25 17:05:30 -05:00
Rossen Stoyanchev
c8f98ecd8d Add MockPart to spring-test
Issue: SPR-14252
2017-01-25 17:05:25 -05:00
Rossen Stoyanchev
f5d2b88e3f "sharedHttpSession" shortcut for MockMvc builders
Issue: SPR-13820
2017-01-25 12:33:11 -05:00
Rossen Stoyanchev
1d35c7c55a Polish MockMvc setup classes 2017-01-25 12:33:11 -05:00
Rossen Stoyanchev
bc884023e4 Add ExpectedCount#never()
Issue: SPR-15168
2017-01-20 17:12:13 -05:00
Rossen Stoyanchev
6e508f70d3 Add locking to AbstractRequestExpectationManager
This commit ensures that verifying a request, which includes finding
and updating expectations, is done synchronously to avoid concurrent
modification exceptions.

Technically SimpleRequestExpectationManager is not even expected to see
concurrent requests by definition but with
UnorderedRequestExpectationManager it can happen.

Issue: SPR-15029
2017-01-17 16:49:25 -05:00
Juergen Hoeller
e88e8f1d09 MockHttpServletRequestBuilder reliably detects form body content type again
Issue: SPR-15116
2017-01-16 11:49:07 +01:00
Sam Brannen
c9835f0f6c Clean up warnings spring-test 2017-01-16 03:21:43 +01:00
Vedran Pavić
83beb9d57d Set MockSessionCookieConfig#maxAge default to -1
Issue: SPR-15142
2017-01-16 03:17:54 +01:00
Rossen Stoyanchev
ba3cc535f1 Refactor reactive mock request and response support
MockServerHttpRequest and MockServerHttpResponse now extend the same
abstract base classes that server-specific implementations do and
therefore approximate their behavior more closely.

As an immediate consequence MockServerHttpRequest is read-only after
it is created. Instead it now exposes static builder methods similar
to those found in RequestEntity. This enforces more strictness as well
as recycling of requests in tests and provides nicer builder methods.

To simplify tests DefaultServerWebExchange now offers a constructor
with just a request and response, and automatically creating a
DefaultWebSessionManager.

The spring-test module now also contains client-side reactive mock
request and response implementations. The mock client request extends
the same AbstractClientHttpRequest as client-specific implementations
do. There is no abstract base class for client responses.

Issue: SPR-14590
2017-01-13 15:23:06 -05:00
Juergen Hoeller
743ce2cda6 Polishing 2017-01-12 23:30:38 +01:00
Juergen Hoeller
e19dff179e Polishing 2017-01-12 21:18:01 +01:00
Juergen Hoeller
02d727fd7c MockHttpServletRequestBuilder supports multiple locales
Includes revised content type handling.

Issue: SPR-15116
2017-01-12 21:17:54 +01:00
Sam Brannen
055da43e30 Clean up warnings in spring-test 2017-01-07 00:57:17 +01:00
Rossen Stoyanchev
c66dd01724 Equal MockServerHttpResponse in spring-test and -web 2016-12-14 05:54:53 -05:00
Sebastien Deleuze
b9892cc5d4 Add missing overrides to MockServerHttpResponse 2016-12-14 03:13:44 +01:00
Rossen Stoyanchev
128a1f8eed Polish MockRestRequestMatchers query param support
Issue: SPR-14995
2016-12-13 16:00:46 -05:00
schjan79
ba826f1026 MockRestRequestMatchers can match query params
Issue: SPR-14995
2016-12-13 16:00:46 -05:00
Drummond Dawson
c9abd99f44 Add twice() to ExpectedCount as convenience method 2016-12-02 16:27:57 -05:00
Juergen Hoeller
f6fc0a86b3 Polishing
(cherry picked from commit 0028b29)
2016-12-01 20:11:47 +01:00
Juergen Hoeller
7a8ec4f6eb Consistent use of "URI variables" terminology
Issue: SPR-14969
2016-12-01 12:30:10 +01:00
Rossen Stoyanchev
38b6746d3d HtmlUnitRequestBuilder detects form encoding type
Issue: SPR-14916
2016-11-28 18:07:40 -05:00
Sebastien Deleuze
0fcae5d2c5 Polishing
Issue: SPR-14952
2016-11-25 12:54:48 +01:00
Sebastien Deleuze
8d26c738a0 Polishing
This commit polishes previous one by also accepting
generic types explicitly declared with a class that
extends DataBuffer allowing to write Flux<DefaultDataBuffer>
for example.

Issue: SPR-14952
2016-11-25 10:33:13 +01:00
Daniel Fernández
a98be035a3 Make the signature of RHOM#writeAndFlush() more flexible
This modifies the signature of
ReactiveHttpOutputMessage#writeAndFlush(...) in order to
be able to use Flux<Flux<DataBuffer>> objects as arguments of
this method.

Issue: SPR-14952
2016-11-25 09:59:33 +01:00
Stephane Nicoll
e3f6b61743 Polish 2016-10-29 11:15:26 +02:00
Stephane Nicoll
30291a8cd7 Allow to customize TestDispatcherServlet
This commit introduces the `DispatcherServletCustomizer` callback
interface that can be used to customize the `DispatcherServlet` that a
`MockMvc` is using.

Previously, only the `dispatchOptions` flag can be customized. This
commit allows to customize any property of `DispatcherServlet` before it
is initialized.

Issue: SPR-14277
2016-10-29 10:58:29 +02:00
Sam Brannen
d59caaa2a7 Polishing 2016-10-28 16:37:33 +02:00