Add expected length validation to gabbi functional tests

This PS adds expected length validations to gabbi functional tests
in order for there to be more robust response body validations
for theses tests.

This is done via

  $.`len`: 1

under the attribute "response_multidoc_jsonpaths", which validates
that the returned list of items (we coerce everything into a list
for these tests, such that a {} is coerced into [{}]) is of expected
length 1.

Also break up static query parameters into dynamically generated ones
[0] to make the code more readable.

[0] Search for "query_parameters" in http://gabbi.readthedocs.io/en/latest/example.html

Change-Id: I8b1efc9a3a0276d7b383d0960f45b485bf89a234
This commit is contained in:
Felipe Monteiro 2017-11-24 21:05:21 +00:00
parent 8cc63164d2
commit 779374ce9c
12 changed files with 113 additions and 15 deletions

View File

@ -37,6 +37,7 @@ tests:
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 3
$.[*].metadata.name:
- layering-policy
- abstract-1234
@ -61,6 +62,7 @@ tests:
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- abstract-1234
@ -82,6 +84,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['create_a'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 3
$.[*].metadata.name:
- layering-policy
- abstract-1234

View File

@ -56,6 +56,7 @@ tests:
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234
@ -83,6 +84,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234
@ -110,6 +112,7 @@ tests:
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234
@ -132,6 +135,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234
@ -160,6 +164,7 @@ tests:
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 3
$.[*].status.revision:
- "$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']"
- "$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']"
@ -179,6 +184,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234
@ -201,6 +207,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['update_single_document'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234

View File

@ -32,9 +32,12 @@ tests:
- name: verify_substitutions
desc: Check for expected substitutions
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/rendered-documents?schema=armada/Chart/v1
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/rendered-documents
query_parameters:
schema: armada/Chart/v1
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[*].metadata.name: example-chart-01
$.[*].data:
chart:

View File

@ -25,9 +25,12 @@ tests:
- name: verify_substitutions
desc: Check for expected substitutions
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/rendered-documents?schema=armada/Chart/v1
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/rendered-documents
query_parameters:
schema: armada/Chart/v1
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[*].metadata.name: example-chart-01
$.[*].data:
chart:

View File

@ -38,6 +38,7 @@ tests:
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].id: $HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
$.[0].buckets: [mop]
$.[0].tags: {}
@ -49,6 +50,7 @@ tests:
GET: /api/v1.0/revisions
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: $HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
$.[0].results[0].buckets: [mop]

View File

@ -101,6 +101,7 @@ tests:
GET: /api/v1.0/revisions/0/diff/$HISTORY['create_a'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: created
@ -109,6 +110,7 @@ tests:
GET: /api/v1.0/revisions/0/diff/$HISTORY['create_b'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: created
bucket_b: created
@ -118,6 +120,7 @@ tests:
GET: /api/v1.0/revisions/0/diff/$HISTORY['create_c'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: created
bucket_b: created
@ -128,6 +131,7 @@ tests:
GET: /api/v1.0/revisions/0/diff/$HISTORY['create_d'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: created
bucket_b: created
@ -139,6 +143,7 @@ tests:
GET: /api/v1.0/revisions/0/diff/0
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]: {}
- name: update_c
@ -163,6 +168,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['create_d'].$RESPONSE['$.[0].status.revision']/diff/$HISTORY['update_c'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: unmodified
bucket_b: unmodified
@ -200,6 +206,7 @@ tests:
# Verification for whether a bucket_name was returned even though all the
# documents for this bucket were deleted.
response_multidoc_jsonpaths:
$.`len`: 1
$.[*].status.bucket: bucket_mistake
- name: verify_diff_between_created_and_deleted_mistake
@ -207,6 +214,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['create_mistake'].$RESPONSE['$.[0].status.revision']/diff/$HISTORY['delete_mistake'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: unmodified
bucket_c: unmodified
@ -235,6 +243,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['create_d'].$RESPONSE['$.[0].status.revision']/diff/$HISTORY['create_e'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: unmodified
bucket_b: deleted
@ -247,6 +256,7 @@ tests:
GET: /api/v1.0/revisions/0/diff/$HISTORY['create_e'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0]:
bucket_a: created
bucket_c: created

View File

@ -27,24 +27,33 @@ tests:
- name: filter_by_schema
desc: Verify revision documents filtered by schema
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?schema=deckhand/LayeringPolicy/v1
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
schema: deckhand/LayeringPolicy/v1
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].metadata.name: layering-policy
$.[0].schema: deckhand/LayeringPolicy/v1
- name: filter_by_metadata_name
desc: Verify revision documents filtered by metadata.name
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.name=layering-policy
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.name: layering-policy
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].metadata.name: layering-policy
- name: filter_by_metadata_label
desc: Verify revision documents filtered by metadata.name
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.label=key1=value1
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.label: key1=value1
status: 200
response_multidoc_jsonpaths:
$.`len`: 2
$.[*].metadata.name:
- global-1234
- region-1234
@ -54,9 +63,12 @@ tests:
- name: filter_by_metadata_layeringdefinition_abstract
desc: Verify revision documents filtered by metadata.layeringDefinition.abstract
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.layeringDefinition.abstract=true
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.layeringDefinition.abstract: true
status: 200
response_multidoc_jsonpaths:
$.`len`: 2
$.[*].metadata.name:
- global-1234
- region-1234
@ -66,17 +78,23 @@ tests:
- name: filter_by_metadata_layeringdefinition_layer
desc: Verify revision documents filtered by metadata.layeringDefinition.layer
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?metadata.layeringDefinition.layer=site
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.layeringDefinition.layer: site
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].metadata.name: site-1234
$.[0].metadata.layeringDefinition.layer: site
- name: filter_by_bucket_name
desc: Verify revision documents filtered by status.bucket
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents?status.bucket=mop
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
status.bucket: mop
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234

View File

@ -27,27 +27,40 @@ tests:
- 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
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.layeringDefinition.layer: site
metadata.layeringDefinition.abstract: false
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[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
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.layeringDefinition.layer: region
metadata.layeringDefinition.abstract: true
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[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
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.layeringDefinition.layer:
- site
- region
status: 200
response_multidoc_jsonpaths:
$.`len`: 2
$.[*].metadata.name:
- region-1234
- site-1234
@ -57,9 +70,14 @@ tests:
- 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
GET: /api/v1.0/revisions/$RESPONSE['$.[0].status.revision']/documents
query_parameters:
metadata.label:
- foo=bar
- baz=qux
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].metadata.name: site-1234
$.[0].metadata.labels:
foo: bar

View File

@ -34,9 +34,12 @@ tests:
- name: verify_revision_list_for_one_valid_filter
desc: Verify that revision is returned for filter tag="foo"
GET: /api/v1.0/revisions?tag=foo
GET: /api/v1.0/revisions
query_parameters:
tag: foo
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: $HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
$.[0].results[0].buckets: [mop]
@ -47,9 +50,14 @@ tests:
- name: verify_revision_list_for_many_valid_filters
desc: Verify that revision is returned for filter tag="foo" or tag="bar"
GET: /api/v1.0/revisions?tag=foo&tag=bar
GET: /api/v1.0/revisions
query_parameters:
tag:
- foo
- bar
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: $HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
$.[0].results[0].buckets: [mop]
@ -59,8 +67,11 @@ tests:
- name: verify_revision_list_for_invalid_filter
desc: Verify that no revisions are returned for tag="baz"
GET: /api/v1.0/revisions?tag=baz
GET: /api/v1.0/revisions
query_parameters:
tag: baz
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 0
$.[0].results: []

View File

@ -49,6 +49,7 @@ tests:
status: 201
response_multidoc_jsonpaths:
$.`len`: 1
$[0].data: {}
$[0].tag: foo
@ -58,6 +59,7 @@ tests:
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$[0].data: {}
$[0].tag: foo
@ -66,6 +68,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].tags.foo.name: foo
- name: verify_revision_list_foo
@ -73,6 +76,7 @@ tests:
GET: /api/v1.0/revisions
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].results[0].tags: [foo]
- name: create_tag_with_data
@ -82,6 +86,7 @@ tests:
data: <@resources/sample-tag-data.yaml
response_multidoc_jsonpaths:
$.`len`: 1
$[0].tag: bar
$[0].data.last: good
$[0].data.random: data
@ -92,6 +97,7 @@ tests:
status: 200
response_multidoc_jsonpaths:
$.`len`: 2
$.[0].tag: bar
$.[0].data.last: good
$.[0].data.random: data
@ -103,6 +109,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].tags.bar.name: bar
$.[0].tags.foo.name: foo
@ -111,6 +118,7 @@ tests:
GET: /api/v1.0/revisions
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].results[0].tags: [bar, foo]
- name: delete_tag
@ -125,6 +133,7 @@ tests:
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].tag: bar
$.[0].data.last: good
$.[0].data.random: data
@ -134,6 +143,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].tags.bar.name: bar
- name: verify_revision_list_deleted_foo
@ -141,6 +151,7 @@ tests:
GET: /api/v1.0/revisions
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].results[0].tags: [bar]
- name: delete_all_tags
@ -154,6 +165,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].tags: {}
- name: verify_revision_list_deleted_all
@ -161,6 +173,7 @@ tests:
GET: /api/v1.0/revisions
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].results[0].tags: []
- name: verify_tag_delete_all

View File

@ -54,6 +54,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['initialize'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234
@ -76,6 +77,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['update_single_document'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234
@ -98,6 +100,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['delete_document'].$RESPONSE['$.[0].status.revision']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 3
$.[*].metadata.name:
- layering-policy
- global-1234
@ -117,6 +120,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['rollback'].$RESPONSE['$.[0].id']/documents
status: 200
response_multidoc_jsonpaths:
$.`len`: 4
$.[*].metadata.name:
- layering-policy
- global-1234

View File

@ -32,6 +32,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['create_schema'].$RESPONSE['$.[0].status.revision']/validations/deckhand-schema-validation
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: 0
$.[0].results[0].status: success
@ -41,6 +42,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['create_schema'].$RESPONSE['$.[0].status.revision']/validations
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].name: deckhand-schema-validation
$.[0].results[0].status: success
@ -66,6 +68,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['add_valid_document'].$RESPONSE['$.[0].status.revision']/validations/deckhand-schema-validation
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[0].id: 0
$.[0].results[0].status: success
@ -75,6 +78,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['add_valid_document'].$RESPONSE['$.[0].status.revision']/validations
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[*].name: deckhand-schema-validation
$.[0].results[*].status: success
@ -100,6 +104,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['add_invalid_document'].$RESPONSE['$.[0].status.revision']/validations/deckhand-schema-validation
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[*].status: failure
@ -108,6 +113,7 @@ tests:
GET: /api/v1.0/revisions/$HISTORY['add_invalid_document'].$RESPONSE['$.[0].status.revision']/validations
status: 200
response_multidoc_jsonpaths:
$.`len`: 1
$.[0].count: 1
$.[0].results[*].name: deckhand-schema-validation
$.[0].results[*].status: failure