Stub Metadata
It is possible to attach arbitrary metadata to stub mappings, which can be later used to search or deletion, or simply retrieval.
Adding metadata to stubs
Data under the metadata
key is a JSON object (represented in Java by a Map<String, ?>
). It can be added to a stub mapping on creation.
Java:
stubFor(get("/with-metadata")
.withMetadata(metadata()
.attr("singleItem", 1234)
.list("listItem", 1, 2, 3, 4)
.attr("nestedObject", metadata()
.attr("innerItem", "Hello")
)
));
JSON:
{
"request": {
"url": "/with-metadata"
},
"response": {
"status": 200
},
"metadata": {
"singleItem": 1234,
"listItem": [1, 2, 3, 4],
"nestedObject": {
"innerItem": "Hello"
}
}
}
Search for stubs by metadata
Stubs can be found by matching against their metadata using the same matching strategies as when matching HTTP requests.
The most useful matcher for this is matchesJsonPath
:
Java:
List<StubMapping> stubs =
findStubsByMetadata(matchingJsonPath("$.singleItem", containing("123")));
API:
POST /__admin/mappings/find-by-metadata
{
"matchesJsonPath" : {
"expression" : "$.singleItem",
"contains" : "123"
}
}
Delete stubs by metadata
Similarly, stubs with matching metadata can be removed:
Java:
removeStubsByMetadata(matchingJsonPath("$.singleItem", containing("123")));
API:
POST /__admin/mappings/remove-by-metadata
{
"matchesJsonPath" : {
"expression" : "$.singleItem",
"contains" : "123"
}
}