Commit Graph

118 Commits

Author SHA1 Message Date
Johnny Lim
aeb12673ae Polish tests
Closes gh-436
2017-10-20 09:39:59 +01:00
Andy Wilkinson
47bcc45e45 Upgrade dependencies 2017-09-23 18:00:17 +01:00
Andy Wilkinson
d22dc1e211 Include filename in Content-Disposition header when available
Closes gh-425
2017-09-23 17:40:22 +01:00
Andy Wilkinson
7c6c2e7523 Polish 2017-09-23 17:20:03 +01:00
Andy Wilkinson
a084175afd Fix field extraction and type resolution beneath arrays and wildcards
Fixes gh-422
Fixes gh-423
2017-09-23 16:40:12 +01:00
Andy Wilkinson
4854bc949f Fix type resolution for fields with null and non-null values
Closes gh-398
2017-09-23 16:40:07 +01:00
Andy Wilkinson
a38a512033 Require occasionally null or absent field in array to be marked optional
Closes gh-402
2017-07-02 10:29:27 +01:00
Andy Wilkinson
a84bb0c569 Make new snippet relaxed when adding descriptors to relaxed snippet
Closes gh-400
2017-07-01 16:27:40 +01:00
Andy Wilkinson
6bf1edcd09 Improve handling of null fields beneath an array
Previously, if an array contained objects where a field was sometimes
null and sometimes had a value of a consistent type, the type inferred
type was varies. Furthermore, it was not possible for the user to
specify a type other than varies as a mismatch would be detected.

This commit updates JsonFieldTypeResolver so that, when dealing with
an imprecise field path (i.e. a path for a field within an array),
null values that don't match the common type for the field are
ignored. This produces the following behavior when nulls are involved:

- All null fields results in the null type
- A mixture of nulls and a particular type results in the particular
  type
- A mixture of nulls and two or more other types results in the varies
  type

Closes gh-398
2017-07-01 11:07:38 +01:00
Andy Wilkinson
5cef4745f7 Polish new response fields test and add equivalent for request fields
See gh-399
2017-07-01 10:57:26 +01:00
Nakul Chaudhari
288ebf771a Add a test that shows problem with sometimes null field within an array
Closes gh-399
2017-07-01 10:52:26 +01:00
Andy Wilkinson
113976f2d9 Support documenting fields in XML payloads with any content type
Previously, the document fields in an XML payload, the request or
response had to have an application/xml content type. This prevented
documenting standard XML content types such as text/xml and
application/rss+xml as well as payloads with custom XML content types.

This commit updates the logic that sets up the ContentHandler to
first attempt to parse the content as JSON. If that fails it then
parses it as XML. If that fails an exception is thrown. This allows
any JSON or XML content, irrespective of the actual content type, to
be documented.

Closes gh-393
2017-05-12 12:35:15 +01:00
Andy Wilkinson
ab1613ed63 Add support for using a wildcard when documenting a payload field
Closes gh-265
2017-03-23 11:05:48 +00:00
Andy Wilkinson
a6d322007b Polish "Provide more control of formatting of curl and HTTPie commands"
See gh-348
Closes gh-260
2017-03-20 20:11:31 +00:00
Tomasz Kopczynski
2cb9d36ef1 Line breaks in cURL and HTTPie snippets
Closes gh-260
2017-03-20 20:11:31 +00:00
Andy Wilkinson
539cc1756e Merge branch '1.1.x' 2017-03-08 12:38:11 +00:00
Andy Wilkinson
81c2816693 Relax field type validation when marked as optional and value is null
Previously, if a field was marked as optional and it appeared in a
payload with a null value a failure would occur if the field's type
was configured to be a JsonFieldType other than NULL.

This commit relaxes this restriction so that a null value is tolerated
when a field has been marked as optional.

Closes gh-365
2017-03-08 12:38:03 +00:00
Andy Wilkinson
722048e20f Introduce RequestCookie to avoid core depending on the Servlet API
Closes gh-345
2017-02-03 14:55:18 +00:00
Andy Wilkinson
a9c1e04081 Polish "Include cookies in request snippets"
See gh-336

Closes gh-302
Closes gh-303
Closes gh-304
2017-02-02 14:50:22 +00:00
Tomasz Kopczynski
25bc6c37da Include cookies in request snippets
Closes gh-336
See gh-302, gh-303, gh-304
2017-02-02 14:49:45 +00:00
Andy Wilkinson
dec3727da1 Add support for documenting body of a request, response or request part
Closes gh-318
Closes gh-319
2016-10-31 16:34:08 +00:00
Andy Wilkinson
cbd96f301d Update field snippets to no longer document whole subsection by default
Previously, when a field was documented it would implicitly document
the whole subsection of the payload identified by that field. This
could lead to users inadvertently failing to document part of the
payload. Arguably, this was a bug as it violated REST Docs' principle
of producing accurate, detail documentation. However, fixing it
requires a breaking change as people may also be relying on this
behaviour. A balance needed to be struck so the fix is being made in
a minor release.

This commit introduces a new subsectionWithPath method which returns a
SubsectionDescriptor; a specialisation of FieldDescriptor. Users
that were intentionally relying on the old behaviour will have to
replace some usage of fieldWithPath with subsectionWithPath instead.
Users who were unintentionally relying on the old behaviour will have
to add some additional descriptors produced using fieldWithPath and
will receive more accurate documentation in return.

Closes gh-274
2016-10-28 16:12:07 +01:00
Andy Wilkinson
7bcfbd9e35 Add support for documenting a portion of a request or response payload
Closes gh-312
2016-10-27 10:26:46 +01:00
Andy Wilkinson
d2a5b38c83 Polish "Add support for documenting request part payload fields"
- Rebase on latest code, and make use of new support for the same
  TemplatedSnippet producing multiple snippets with different names
  from the same template
- Expand the documentation
- Apply code formatting
- Add support for relaxed documentation of a request part's fields

Closes gh-270
2016-10-25 15:56:47 +01:00
Mathieu POUSSE
13e745a9a9 Add support for documenting request part payload fields
See gh-270
2016-10-25 15:56:43 +01:00
Andy Wilkinson
4f19294220 Allow a TemplatedSnippet to produce multiple snippets from same template
Previously a TemplatedSnippet could only write snippets with the
same name as its template. This meant that the same template could
not be used to produce multiple snippets with different names.

This commit separates the snippet name from the template name, thereby
allowing the snippet name to vary while the template name remains the
same. For backwards compatibility, the default behaviour is for the
template name and snippet name to remain the same. The new overloaded
constructor can be used when the names need to differ.

Closes gh-320
2016-10-25 15:35:20 +01:00
Andy Wilkinson
7487f41363 Polish "Copy attributes when applying path prefix to field descriptors"
- Apply code formatting
 - Test copying of attributes (and other parts of a field descriptor)
   in new PayloadDocumentationTests

Closes gh-314
2016-10-25 11:34:09 +01:00
Andy Wilkinson
0f1f84e6a6 Fix JSON field type resolution for top-level and nested array fields
Previously, the logic that determined the field’s type would incorrectly
look at the contents of the array. For example, if the array contained
one or more objects, the field’s type would be resolved as Object rather
than Array.

This commit updates JsonFieldPath to record when a path explicitly
identifies an array so that the array itself is used to determine the
field’s type rather than its contents.

Closes gh-292
2016-08-24 13:02:21 +01:00
Andy Wilkinson
4e4d01a459 Consolidate logic in test rules for getting output dir and operation name 2016-08-24 12:49:51 +01:00
Andy Wilkinson
21567e0ffa Simply dealing with operation names in REST Docs' own tests 2016-08-24 10:05:17 +01:00
Andy Wilkinson
14dcdb61d0 Fix package tangle between cli and operation packages
QueryStringParser has been moved into the operation page. In the
unlikely event that there were any external users of the class, a
deprecated version remains in the cli package for backwards
compatibility. It will be removed in 1.2.

Closes gh-286
2016-08-19 20:14:20 +01:00
Andy Wilkinson
a0faebdb0a Ignore query string when extracting path parameters
Closes gh-285
2016-08-19 19:52:23 +01:00
Andy Wilkinson
9ba0a9b6be Stop field snippets requiring a type for missing, optional, ignored field
Missing optional fields require a type to be explicitly provided as
it cannot be inferred from the payload. Ignored fields are not
included in the documentation, yet, previously, a field that was
missing, optional, and ignored would still require a type to be
provided otherwise the test would fail. This was pointless as the
field wasn't going to appear in the documentation.

This commit updates the fields snippets so that a type is no longer
required for a field that is missing, optional and ignored.

Closes gh-289
2016-08-19 19:52:14 +01:00
Andy Wilkinson
ec3a05926e Merge branch '1.0.x' into 1.1.x 2016-08-10 17:22:58 +01:00
Andy Wilkinson
b430a88796 Polishing 2016-08-10 17:08:18 +01:00
Andy Wilkinson
bf9b0f2d64 Ensure that query string is not duplicated when parameters overlap
Closes gh-286
2016-07-29 21:10:21 +01:00
Andy Wilkinson
78318775e0 Cause a failure when field's documented and actual types do not match
Closes gh-276
2016-07-22 13:20:44 +01:00
Andy Wilkinson
86c2310b90 Improve message when fields cannot be documented due to empty body
Closes gh-278
2016-07-22 11:44:43 +01:00
Andy Wilkinson
8ca1dfa1ad Improve handling of requests with both parameters and content
Previously, if a MockMvc request was made with parameters and body
content, the parameters were omitted from the resulting curl, HTTPie
and HTTP request snippets.

This commit updates the affected snippets to ensure that the
parameters are included. The user-provided content is interpreted
as indicating that the parameters should be sent in the query string
rather than as form-encoded content.

Closes gh-239
2016-06-23 17:53:32 +01:00
Andy Wilkinson
37519398c7 Include customized Host header in curl and HTTPie request snippets
Previously, the curl and HTTPie request snippets always excluded the
Host header, relying on the Host header that’s auto-generated by curl
and HTTPie instead. This worked well for the most part, but meant that
incorrect snippets were generated when the request was being sent with
a custom host header that did not match the header that would be
auto-generated.

This commit updates CliOperationRequest to only filter out the Host
header if it’s the same as the header that would be auto-generated
by curl or HTTPie.

Closes gh-258
2016-06-23 15:52:30 +01:00
Andy Wilkinson
a4298b29e7 Include request URI’s port, if any, in default Host header
Previously, OperationRequestFactory would add a Host header if one did
not already exist in the request’s headers, however it did not include
the port. This meant that when the request was being made to a
non-standard port (a port other than 80 for an HTTP request and 443 for
an HTTPS request) the Host header was incorrect.

This commit updates OperationRequestFactory to check the URI for a port
and, if it has one, include it in the Host header.
UriModifyingOperationPreprocessor has also been updated to correctly
include the port in the Host header.

Closes gh-269
2016-06-23 15:45:11 +01:00
Andy Wilkinson
0446c99a10 Polishing
- Correct copyright years
- Add `@since` to javadoc of new public classes
- Make new classes final where appropriate
2016-05-25 11:26:02 +01:00
Andy Wilkinson
42353a0b5f Improve the API for generating additional snippets
Previously, if alwaysDo was used and the user wanted to generate
one or more additional snippets when calling perform a separate call
to `snippets` was made prior to calling `perform`. This had two
problems:

 - it required the result handler to be stateful (see gh-243)
 - it wasn't clear that the additional snippets would be produced when
   a subsequent call to perform was made

This commit introduces a new API that allows the additional snippets
to be specified within the MockMvc call. The old API has been
deprecated and will be removed in 2.0.

Closes gh-249
2016-05-25 11:01:48 +01:00
Andy Wilkinson
cb1f98c601 Improve handling of parameters with null values
Closes gh-199
2016-05-24 16:39:57 +01:00
Andy Wilkinson
6935f603f2 Polish ResourceBundleConstraintDescriptionResolver and related tests
Closes gh-234
2016-05-24 16:27:37 +01:00
Andy Wilkinson
4715351cce Make it easier to provide a placeholder resolver that uses the context
Closes gh-235
2016-05-24 15:42:22 +01:00
Andy Wilkinson
3c80176e66 Merge branch '1.0.x' 2016-05-24 11:42:31 +01:00
Andy Wilkinson
404b99b0a4 Avoid problems caused by | characters in table cell content
Previously, a | character in a cell of an Asciidoctor table would
break that table's formatting as it would be interpretted as a
delimiter for the cell. The problem also affects Markdown tables where
the | character is not within backticks.

This commit addresses the problem with Asciidoctor tables by
introducing a JMustache Lambda that escapes | characters by prefixing
them with a backslash.

Unfortunately, a complete solution to the problem when using Markdown
is not as straightforward. Markdown only requires a | character to be
espaced when it is not within backticks. Determing this isn't
straightforward as the text would have to be parsed, taking into
account the possibility of backticks themselves being escaped.
Instead, this commit attempts to avoid the problem in a different way.

The most likely source of a | character is when documenting a
`@Pattern` constraint that uses a | character in its regular
expression. To improve the readability of the regular expression this
commit wraps it in backticks, thereby formatting it in a monospaced
font in both Asciidoctor and Markdown and also avoiding any escaping
problems with the latter.

Closes gh-232
See gh-230
2016-05-24 10:50:32 +01:00
Andy Wilkinson
117e8ec096 Provide an API for configuring additional default snippets
Previously, the default snippets could only be configured by
replacing those that are configured out of the box. This commit adds
a method, withAdditionalDefaults, that can be used to add one or more
snippets to those that are configured out of the box.

Closes gh-237
2016-05-23 15:51:17 +01:00
Andy Wilkinson
fc3ae3b4a2 Add support for documenting the parts of a multipart request
Closes gh-161
2016-05-12 16:30:36 +01:00