Support filtering revision (documents) by any legal filter

This PS adds support for filtering revisions and
revision documents documents by any legal filter
(those enumerated in the design document).

Deckhand now supports the following filter arguments:
  * schema
  * metadata.name
  * metadata.label
  * metadata.layeringDefinition.abstract
  * metadata.layeringDefinition.layer
  * status.bucket

Deckhand now supports the following filter arguments for filtering
revisions:
  * tag

Deckhand now supports multiple filters, e.g.:
  * ?metdata.layeringDefinition.layer=site&metadata.name=foo

Deckhand now supports repeated filters, e.g.:
  * ?metadata.label=foo=bar&metadata.label=baz=qux

The following has yet to be implemented will be done in a future
follow-up PS:
  - support sorting by specific keywords as well
  - support query limit and offset filters

Change-Id: I8558481e075715fe7fab98140094d37782a986d9
This commit is contained in:
Felipe Monteiro
2017-09-29 20:15:10 +01:00
parent ddc6d40584
commit 3e62ace8ed
14 changed files with 458 additions and 87 deletions

View File

@@ -0,0 +1,65 @@
# 1. Test success paths for filtering revision documents using multiple filters
# for the following filters:
# * metadata.label
# * metadata.layeringDefinition.abstract
# * metadata.layeringDefinition.layer
# 2. Test success paths for multiple different-keyed filters.
# 3. Test success paths for multiple same-keyed filters.
defaults:
request_headers:
content-type: application/x-yaml
response_headers:
content-type: application/x-yaml
tests:
- name: purge
desc: Begin testing from known state.
DELETE: /api/v1.0/revisions
status: 204
- name: initialize
desc: Create initial documents
PUT: /api/v1.0/bucket/mop/documents
status: 200
data: <@resources/design-doc-layering-sample.yaml
- name: filter_by_multiple_different_filters_expect_site
desc: Verify revision documents filtered by multiple repeated keys that are different
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.layeringDefinition.layer=site&metadata.layeringDefinition.abstract=false
status: 200
response_multidoc_jsonpaths:
$.[0].metadata.name: site-1234
$.[0].metadata.layeringDefinition.layer: site
$.[0].metadata.layeringDefinition.abstract: false
- name: filter_by_multiple_different_filters_expect_region
desc: Verify revision documents filtered by multiple repeated keys that are different
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.layeringDefinition.layer=region&metadata.layeringDefinition.abstract=true
status: 200
response_multidoc_jsonpaths:
$.[0].metadata.name: region-1234
$.[0].metadata.layeringDefinition.layer: region
$.[0].metadata.layeringDefinition.abstract: true
- name: filter_by_repeated_metadata_layeringDefinition_layer
desc: Verify revision documents filtered by multiple repeated keys that are the same
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.layeringDefinition.layer=site&metadata.layeringDefinition.layer=region
status: 200
response_multidoc_jsonpaths:
$.[*].metadata.name:
- region-1234
- site-1234
$.[*].metadata.layeringDefinition.layer:
- region
- site
- name: filter_by_repeated_metadata_label
desc: Verify revision documents filtered by multiple repeated keys that are the same
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.label=foo=bar&metadata.label=baz=qux
status: 200
response_multidoc_jsonpaths:
$.[0].metadata.name: site-1234
$.[0].metadata.labels:
foo: bar
baz: qux