Commit Graph

111 Commits

Author SHA1 Message Date
Andy Wilkinson
cdcddcf91b Update the samples to use Spring Boot 1.2.4.RELEASE 2015-06-24 14:36:47 +01:00
Andy Wilkinson
f705656595 Polishing
- Make inner classes static where possible
 - Declare classes as final where appropriate
 - Use try-with-resources
 - Improve readability by breaking up some large methods
 - Do not throw Throwable where possible
2015-06-24 14:25:31 +01:00
Andy Wilkinson
8a0b07576d Update README and reference docs to avoid duplication of content 2015-06-24 11:45:30 +01:00
Andy Wilkinson
1ae014dc53 Update build script examples in docs to use dynamic dependency version 2015-06-24 09:38:58 +01:00
Andy Wilkinson
9824e8a198 Include the version in the documentation's header 2015-06-23 18:00:37 +01:00
Andy Wilkinson
b6c64dfd26 Update the samples to build against correct version of main project
This should have been done as part of 0e5151e91.
2015-06-23 14:05:07 +01:00
Andy Wilkinson
7cdbf0cea9 Add a section to the docs that provides tips on working with Asciidoctor
Closes gh-75
2015-06-23 14:02:18 +01:00
Andy Wilkinson
ba5ed62605 Merge branch 'gh-74' 2015-06-17 13:47:09 +01:00
Andy Wilkinson
aeb88eb313 Update the documentation to reflect that links can now be optional
Closes gh-74
2015-06-17 13:44:26 +01:00
Kellen Dye
0699cdd068 Allow links to be optional
Previously, if a link was documented then it had to be present in the
response payload for the test to pass. This was unnecessarily
restrictive and caused problems when a link was omitted due to the
application's current state.

This commit allows a link to be declared as optional. If a link is
optional then the test will pass irrespective of the link's presence
in the response.

See gh-74
2015-06-17 13:40:04 +01:00
Andy Wilkinson
0e5151e91b Bump the version to 1.0.0.BUILD-SNAPSHOT 2015-06-16 19:55:41 +01:00
Andy Wilkinson
e5840cd48f Set the group on the root project so the docs are published correctly
See gh-37
2015-06-16 17:30:09 +01:00
Andy Wilkinson
833f0eabb8 Polishing: replace spaces with tabs in doc examples
See gh-37
2015-06-16 17:21:43 +01:00
Andy Wilkinson
8307fb5428 Add reference documentation and create docs zip
Add reference documentation for the project and add a docs artifact
that contains both the reference documentation and the javadoc.

See gh-37
2015-06-16 17:14:31 +01:00
Andy Wilkinson
f98bec317e Add support for documenting fields in array payloads
764daf7 added support for documenting fields in payloads that contain
arrays, but the array had to be nested within a map. This commit builds
on that support to allow fields in an array payload to be
documented. The fields in the payload:

[
    {
        "a": {
            "b": 5
        }
    },
    {
        "a": {
            "c": "charlie"
        }
    }
]

Can be documented using:

[]a.b
[]a.c
[]a

A dot separator can, optionally, be used between the [] and the map key:

[].a.b
[].a.c
[].a

Closes gh-69
2015-05-15 21:05:13 +01:00
Andy Wilkinson
0c0d3b89bd Default snippet encoding to UTF-8 and make it configurable
Previously, snippets were written to disk using the JVM’s default
encoding. While this could be controlled by the file.encoding system
property it was not ideal as, if the proper was not always set, it could
lead to platform-dependent output being generated. Furthermore,
Asciidoctor uses UTF-8 encoding by default so there was a risk of the
snippets being generated in a different encoding to the encoding
expected by Asciidoctor.

This commit updates the configuration so that, by default, snippets are
encoded as UTF-8. The RestDocumentationConfigurer API has been enhanced
to allow this default to be configured as part of building the
MockMvc instance. This enhancement as brought with it a more fluent
configuration API that separates configuration that is related to URIs
from configuration that is related to snippets.

Closes gh-67
2015-05-13 11:18:56 +01:00
Andy Wilkinson
68198b3145 Increase MaxPermSize so that the build passes when using Java 7 2015-05-05 13:16:21 +01:00
Andy Wilkinson
90bbb5ab9e Update samples to make them compatible with Java 7
The main project supports Java 7 or later, but, prior to this commit,
the Spring HATEOAS sample required Java 8. This commit updates updates
the Spring HATEOAS sample to make it compatible with Java 7 and
updates the build configuration of both samples to specify Java 7.

Closes gh-51
2015-05-05 12:09:45 +01:00
Dewet Diener
84fe379f64 Add a response post processor that performs generic pattern replacement
This commit introduces a new ResponsePostProcessor,
PatternReplacingResponsePostProcessor, that modifies the content of the
response by replacing occurrences of a regular expression with a
configurable replacement. The existing LinkMaskingResponsePostProcessor,
which was already performing pattern replacement, has been updated to
subclass PatternReplacingResponsePostProcessor.

Closes gh-65
2015-05-05 11:39:13 +01:00
Jonathan Pearlin
ca375c919c Improve support for documenting PUT requests
Previously, no special consideration was given to PUT requests. This
meant that curl and HTTP request snippets would not include the
request’s parameters/query string and that HTTP request snippets would
not set the content type to application/x-www-form-urlencoded.

This commit addresses these limitations by updating both
HttpDocumentation and CurlDocumentation to treat PUT requests in the
same way as POST requests.

Closes gh-62
2015-04-30 14:50:44 +01:00
Andy Wilkinson
e5f35c98f3 Add support for post-processing a response before it is documented
This commit adds support for post-processing a response before it is
documented. Post-processors are provided to pretty-print JSON and XML
responses, remove headers from the response, and mask the hrefs of
Atom- and HAL-formatted links in JSON responses.

Response post-processing is configured prior to configuring the
documentation. For example,

mockMvc.perform(get("/").accept(MediaType.APPLICATION_JSON))
        .andExpect(status().isOk())
		.andDo(modifyResponseTo(prettyPrintContent(), removeHeaders("a"),
				maskLinks()).andDocument("post-processed"));

Closes gh-61
Closes gh-31
Closes gh-54
2015-04-30 14:06:40 +01:00
Andy Wilkinson
b3eee08b5d Add support for documenting a request’s query parameters
This commit adds support for documenting a request's query parameters.
For example:

mockMvc.perform(
        get("/issues").param("page", "2").param("limit", "20"))
                .andDo(documentQueryParameters("list-issues",
                        parameterWithName("page")
                                .description("Page number to return"),
                        parameterWithName("limit")
                                .description("Maximum page size")));

Closes gh-39
2015-04-29 10:31:04 +01:00
Andy Wilkinson
b362c493ff Use HttpHeaders to simplify HTTP request documentation 2015-04-29 10:21:41 +01:00
Andy Wilkinson
bff26b1cab Order documented links use the order of the provided descriptors 2015-04-29 10:18:29 +01:00
Andy Wilkinson
9749ec18eb Remove package tangle caused by RestDocumentationException 2015-04-29 10:09:21 +01:00
Andy Wilkinson
37f9f02580 Make the ordering of extracted links match the ordering in the payload
Closes gh-63
2015-04-29 10:05:42 +01:00
Andy Wilkinson
bad5bdabaa Improve test failure output to ease diagnosis of Travis CI failures 2015-04-29 09:34:52 +01:00
Andy Wilkinson
da7efa3e3a Improve testing of the generated documentation snippets 2015-04-28 18:17:39 +01:00
Andy Wilkinson
764daf7c99 Add support for documenting fields in payloads that contain arrays
Previously the path used to document a field had to be dot-separated,
with each segment of the path being used as a key in a map. This made
it impossible to document fields in a payload within an array.

This commit adds support for using [] in a field’s path to represent an
array. For example, the fields in following JSON payload:

{
    "id": 67,
    “date”: "2015-01-20",
    "assets": [
        {
            "id":356,
            "name": "sample"
        }
    ]
}

Can now be documented using the following paths:

 - id
 - date
 - assets[].id
 - assets[].name

Closes gh-60
2015-04-27 16:43:50 +01:00
Andy Wilkinson
8166c5e3e7 Add a task that verifies the includes in a sample’s .adoc files
Enhance buildSamples such that, once a sample has been built, it looks
at the generated HTML files and checks that they do not contain any
output that's indicative of a malformed include in a source .adoc
file.

This additional verification found another malformed include which
this commit corrects.
2015-04-21 12:32:31 +01:00
Esko Luontola
0e597e9498 Fix broken include in Spring HATEOAS sample's API guide
Closes gh-59
2015-04-21 11:17:31 +01:00
Andy Wilkinson
8e4e9385be Merge branch 'gh-57' 2015-04-21 11:04:07 +01:00
Andy Wilkinson
474796d15e Polish changes to Content-Type handling in LinkExtractors
- If the request has no Content-Type (null or an empty string), a
   null extractor is returned rather than an exception being thrown.
   This is consistent with the old behaviour.
 - Tests have been reworked a little bit to separate out the new normal
   unit tests from the existing parameterised tests.

Closes gh-56
2015-04-21 11:01:54 +01:00
Heiko Scherrer
d0f0de537c Ignore parameters when finding a LinkExtractor for a Content-Type
Closes gh-57
2015-04-21 11:01:17 +01:00
Andy Wilkinson
d8151e7b03 Add configuration for building on Travis CI
This commit adds the necessary configuration to build the project
on Travis CI. First, the main project is built using Java 7 then the
samples are built using Java 8.

Closes gh-58
2015-04-20 20:17:09 +01:00
Andy Wilkinson
d1f57f530b Add the files that were accidentally excluded by .gitignore 2015-04-20 20:05:15 +01:00
Andy Wilkinson
c496cfc699 Extract the logic for building the samples into a plugin 2015-04-20 19:48:35 +01:00
Dewet Diener
7a8dfeabd7 Improve and simplify quoting for cURL commands
Single quotes are generally safer to use since shells won't try to
interpolate any strings or do variable substitution inside it. This
could be refined to do a check for [&%$] inside the URI/query string
before just blindly surrounding with quotes, but this is safe as it is.

Also, don't escape POST paylods since they are quoted already – this
doesn't work correctly right now.

Closes gh-55
2015-04-20 10:08:13 +01:00
Preben Asmussen
18c7799b8f Fix the artifact id in pom.xml of rest-notes-spring-data-rest
Closes gh-53
2015-04-20 09:50:36 +01:00
Andy Wilkinson
4cb5f228a9 Correct the javadoc on RestDocmentationConfigurer.withContextPath 2015-04-20 09:48:55 +01:00
Andy Wilkinson
9fe02fc62e Merge branch 'gh-49' 2015-04-20 09:38:45 +01:00
Andy Wilkinson
d686908b19 Ensure that a context path without a leading slash is handled correctly
A context path should either be an empty String, or a String that
begins with a slash. This commit updates both CurlDocumentation and
RestDocumentationConfigurer to prepend a / to the specified context
path when required.

See gh-49
2015-04-20 09:38:28 +01:00
Dmitriy Mayboroda
a5e26a57d8 Allow requests to be configured with a custom context path
Closes gh-49
Closes gh-27
2015-04-20 09:38:18 +01:00
Andy Wilkinson
bcda6fe459 Update the main project and Gradle samples to use Gradle 2.3 2015-04-16 12:34:28 +01:00
Andy Wilkinson
f93981fce2 Align with the Asciidoctor team's preferred file extension, .adoc
Closes gh-45
2015-04-16 12:31:29 +01:00
Andy Wilkinson
e00734d693 Add support for generating an HTTP request documentation snippet
Closes gh-13
2015-04-16 12:03:21 +01:00
Andy Wilkinson
86b431018d Apply custom host and port configuration correctly
Previously, a custom host was configured by setting the request’s
remote host. This is in correct as the remote host as the client’s host.
The custom port was also being configured by setting the request’s
remote port and server port. Only the latter is required.

This commit correct the logic by setting the request’s server name and
server port when configuring a custom host and custom port respectively.
The tests have been improved by introducing the use of Spring HATEOAS’s
BasicLinkBuilder to verify that the configured request produces the
expected scheme, host and port in any generated links.

Closes gh-44
2015-03-25 14:40:27 +00:00
Andy Wilkinson
976dd00365 Use TableWriter in LinkSnippetResultHandler
Closes gh-40
2015-03-24 17:31:04 +00:00
Andy Wilkinson
0d2d9cce73 Polishing 2015-03-24 17:06:36 +00:00
Andy Wilkinson
2b44452de1 Improve support for documenting fields in req and resp payloads
This commit improves the support for documenting the fields found
in request and response payloads. The improvements include:

 - Using the term "payload" rather than "state" as the latter is
   somewhat HAL-specific
 - Code simplification, including the removal of the Path abstraction
 - Automatically determining the type of a field based on the payload
   that's being tested
 - Updating the samples to use the new API

In addition to these improvements, support for documenting field
constraints has been removed as more thought is required. The
FieldDescriptor abstraction is used to describe both request and
response fields, however it's not clear that contraints apply to both
and they certainly don't apply in the same way. For the time being at
least, users who want to document a field's constraints can do so as
part of its description.

Closes gh-24
2015-03-24 16:31:52 +00:00