brine-dsl 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.ruby-version +1 -0
- data/.travis.yml +11 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +123 -0
- data/Guardfile +12 -0
- data/LICENSE +21 -0
- data/README.md +137 -0
- data/Rakefile +32 -0
- data/brine-dsl.gemspec +32 -0
- data/config/cucumber.yml +2 -0
- data/docs/build.gradle +19 -0
- data/docs/cookbook.html +567 -0
- data/docs/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/docs/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/docs/gradlew +172 -0
- data/docs/gradlew.bat +84 -0
- data/docs/guide.html +1149 -0
- data/docs/index.html +472 -0
- data/docs/specs.html +1672 -0
- data/docs/src/cookbook.adoc +87 -0
- data/docs/src/guide.adoc +427 -0
- data/docs/src/index.adoc +16 -0
- data/docs/src/spec.erb +121 -0
- data/docs/src/specs.adoc +24 -0
- data/features/argument_transforms/boolean.feature +37 -0
- data/features/argument_transforms/datetime.feature +45 -0
- data/features/argument_transforms/integer.feature +41 -0
- data/features/argument_transforms/list.feature +46 -0
- data/features/argument_transforms/object.feature +66 -0
- data/features/argument_transforms/quoted.feature +41 -0
- data/features/argument_transforms/regex.feature +40 -0
- data/features/argument_transforms/template.feature +46 -0
- data/features/argument_transforms/whitespace.feature +51 -0
- data/features/assertions/is_a_valid.feature +184 -0
- data/features/assertions/is_equal_to.feature +60 -0
- data/features/assertions/is_including.feature +29 -0
- data/features/assertions/is_matching.feature +35 -0
- data/features/deprecations/replaced_with.feature +35 -0
- data/features/request_construction/basic.feature +29 -0
- data/features/request_construction/body.feature +26 -0
- data/features/request_construction/clearing.feature +46 -0
- data/features/request_construction/headers.feature +94 -0
- data/features/request_construction/params.feature +60 -0
- data/features/resource_cleanup/cleanup.feature +86 -0
- data/features/selectors/all.feature +55 -0
- data/features/selectors/any.feature +48 -0
- data/features/step_definitions/test_steps.rb +5 -0
- data/features/support/env.rb +10 -0
- data/lib/brine/cleaner_upper.rb +62 -0
- data/lib/brine/coercer.rb +18 -0
- data/lib/brine/hooks.rb +4 -0
- data/lib/brine/mustache_binder.rb +25 -0
- data/lib/brine/requester.rb +125 -0
- data/lib/brine/rest_steps.rb +138 -0
- data/lib/brine/selector.rb +66 -0
- data/lib/brine/step_definitions/assertions.rb +37 -0
- data/lib/brine/step_definitions/assignment.rb +13 -0
- data/lib/brine/step_definitions/cleanup.rb +4 -0
- data/lib/brine/step_definitions/request_construction.rb +19 -0
- data/lib/brine/step_definitions/selection.rb +37 -0
- data/lib/brine/test_steps.rb +138 -0
- data/lib/brine/transforms.rb +81 -0
- data/lib/brine/type_checks.rb +35 -0
- data/lib/brine/util.rb +35 -0
- data/lib/brine.rb +39 -0
- data/tutorial/missing.feature +5 -0
- data/tutorial/post_matching.feature +12 -0
- data/tutorial/post_status.feature +10 -0
- data/tutorial/support/env.rb +2 -0
- metadata +306 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
Feature: An argument that could represent a boolean value will be
|
2
|
+
transformed into a boolean type.
|
3
|
+
|
4
|
+
Scenario Outline: Assorted basic inputs are provided.
|
5
|
+
Given a file named "features/transform_boolean.feature" with:
|
6
|
+
"""
|
7
|
+
|
8
|
+
Feature: Transform boolean arguments.
|
9
|
+
Scenario: Docstring simple value.
|
10
|
+
When the response body is assigned:
|
11
|
+
\"\"\"
|
12
|
+
<input>
|
13
|
+
\"\"\"
|
14
|
+
Then the response body as JSON is:
|
15
|
+
\"\"\"
|
16
|
+
'<expected>'
|
17
|
+
\"\"\"
|
18
|
+
|
19
|
+
Scenario: Inline simple value.
|
20
|
+
When the response body is assigned `<input>`
|
21
|
+
Then the response body as JSON is:
|
22
|
+
\"\"\"
|
23
|
+
'<expected>'
|
24
|
+
\"\"\"
|
25
|
+
|
26
|
+
"""
|
27
|
+
When I run `cucumber --strict features/transform_boolean.feature`
|
28
|
+
Then the output should contain:
|
29
|
+
"""
|
30
|
+
2 passed
|
31
|
+
"""
|
32
|
+
And it should pass
|
33
|
+
|
34
|
+
Examples:
|
35
|
+
| input | expected |
|
36
|
+
| true | true |
|
37
|
+
| false | false |
|
@@ -0,0 +1,45 @@
|
|
1
|
+
Feature: An argument that could represent a date/time value will be
|
2
|
+
transformed into a time type.
|
3
|
+
|
4
|
+
Scenario: Assorted basic inputs are provided.
|
5
|
+
Given a file named "features/transform_datetime.feature" with:
|
6
|
+
"""
|
7
|
+
|
8
|
+
Feature: Transform date/time arguments.
|
9
|
+
Scenario: Docstring datetime is serialized properly.
|
10
|
+
When the response body is assigned:
|
11
|
+
\"\"\"
|
12
|
+
2017-01-01T09:00:00Z
|
13
|
+
\"\"\"
|
14
|
+
Then the response body as JSON is:
|
15
|
+
\"\"\"
|
16
|
+
'"2017-01-01 09:00:00 UTC"'
|
17
|
+
\"\"\"
|
18
|
+
|
19
|
+
Scenario: Inline datetime is serialized properly.
|
20
|
+
When the response body is assigned `2017-01-01T09:00:00Z`
|
21
|
+
Then the response body as JSON is:
|
22
|
+
\"\"\"
|
23
|
+
'"2017-01-01 09:00:00 UTC"'
|
24
|
+
\"\"\"
|
25
|
+
|
26
|
+
Scenario: Value Comparison
|
27
|
+
When `now` is assigned a timestamp
|
28
|
+
And `then` is assigned `2017-01-01T12:00:00Z`
|
29
|
+
Then the value of `{{then}}` is less than `{{now}}`
|
30
|
+
|
31
|
+
Scenario: Child Comparison
|
32
|
+
When `now` is assigned a timestamp
|
33
|
+
And the response body is assigned:
|
34
|
+
\"\"\"
|
35
|
+
{"my_timestamp": "{{now}}"}
|
36
|
+
\"\"\"
|
37
|
+
Then the value of the response body child `my_timestamp` is greater than `2017-01-01T12:00:00Z`
|
38
|
+
|
39
|
+
"""
|
40
|
+
When I run `cucumber --strict features/transform_datetime.feature`
|
41
|
+
Then the output should contain:
|
42
|
+
"""
|
43
|
+
4 passed
|
44
|
+
"""
|
45
|
+
And it should pass
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: An argument that could represent an integer will be
|
2
|
+
transformed into an integer type.
|
3
|
+
|
4
|
+
Scenario Outline: Assorted basic inputs are provided.
|
5
|
+
Given a file named "features/transform_integer.feature" with:
|
6
|
+
"""
|
7
|
+
|
8
|
+
Feature: Transform integer arguments.
|
9
|
+
Scenario: Docstring simple value.
|
10
|
+
When the response body is assigned:
|
11
|
+
\"\"\"
|
12
|
+
<input>
|
13
|
+
\"\"\"
|
14
|
+
Then the response body as JSON is:
|
15
|
+
\"\"\"
|
16
|
+
'<expected>'
|
17
|
+
\"\"\"
|
18
|
+
|
19
|
+
Scenario: Inline simple value.
|
20
|
+
When the response body is assigned `<input>`
|
21
|
+
Then the response body as JSON is:
|
22
|
+
\"\"\"
|
23
|
+
'<expected>'
|
24
|
+
\"\"\"
|
25
|
+
|
26
|
+
"""
|
27
|
+
When I run `cucumber --strict features/transform_integer.feature`
|
28
|
+
Then the output should contain:
|
29
|
+
"""ar
|
30
|
+
2 passed
|
31
|
+
"""
|
32
|
+
And it should pass
|
33
|
+
|
34
|
+
Examples:
|
35
|
+
| input | expected |
|
36
|
+
| 0 | 0 |
|
37
|
+
| -0 | 0 |
|
38
|
+
| 10 | 10 |
|
39
|
+
| -10 | -10 |
|
40
|
+
| 123456789123456789 | 123456789123456789 |
|
41
|
+
| -123456789123456789 | -123456789123456789 |
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: An argument that could represent a JSON list will be
|
2
|
+
transformed into a list whose elements will be also be transformed.
|
3
|
+
|
4
|
+
Scenario Outline: Assorted basic inputs are provided.
|
5
|
+
Given a file named "features/transform_list.feature" with:
|
6
|
+
"""
|
7
|
+
|
8
|
+
Feature: Transform list arguments.
|
9
|
+
Scenario: Docstring simple list.
|
10
|
+
When the response body is assigned:
|
11
|
+
\"\"\"
|
12
|
+
<input>
|
13
|
+
\"\"\"
|
14
|
+
Then the response body as JSON is:
|
15
|
+
\"\"\"
|
16
|
+
'<expected>'
|
17
|
+
\"\"\"
|
18
|
+
|
19
|
+
Scenario: Inline simple list.
|
20
|
+
When the response body is assigned `<input>`
|
21
|
+
Then the response body as JSON is:
|
22
|
+
\"\"\"
|
23
|
+
'<expected>'
|
24
|
+
\"\"\"
|
25
|
+
|
26
|
+
"""
|
27
|
+
When I run `cucumber --strict features/transform_list.feature`
|
28
|
+
Then the output should contain:
|
29
|
+
"""
|
30
|
+
2 passed
|
31
|
+
"""
|
32
|
+
And it should pass
|
33
|
+
|
34
|
+
Examples:
|
35
|
+
| input | expected |
|
36
|
+
| [] | [] |
|
37
|
+
| ["a", "b"] | ["a","b"] |
|
38
|
+
| ["a" , "b" ] | ["a","b"] |
|
39
|
+
| [" a", " b "] | [" a"," b "] |
|
40
|
+
| [true, "false"] | [true,"false"] |
|
41
|
+
| [1,-3,"-5"] | [1,-3,"-5"] |
|
42
|
+
| ["foo,bar","baz"] | ["foo,bar","baz"] |
|
43
|
+
| ["foo,bar,baz"] | ["foo,bar,baz"] |
|
44
|
+
| ["foo\\"","bar"] | ["foo\\"","bar"] |
|
45
|
+
| ["fo\\"o\\",bar","baz"] | ["fo\\"o\\",bar","baz"] |
|
46
|
+
| [{"i":1},{"i":2}, "h"] | [{"i":1},{"i":2},"h"] |
|
@@ -0,0 +1,66 @@
|
|
1
|
+
Feature: An argument that could represent a JSON object will be
|
2
|
+
transformed into an object whose elements will also be transformed.
|
3
|
+
|
4
|
+
Scenario Outline: Assorted basic inputs are provided.
|
5
|
+
Given a file named "features/transform_object.feature" with:
|
6
|
+
"""
|
7
|
+
|
8
|
+
Feature: Transform object arguments.
|
9
|
+
Scenario: Docstring simple object.
|
10
|
+
When the response body is assigned:
|
11
|
+
\"\"\"
|
12
|
+
<input>
|
13
|
+
\"\"\"
|
14
|
+
Then the response body as JSON is:
|
15
|
+
\"\"\"
|
16
|
+
'<expected>'
|
17
|
+
\"\"\"
|
18
|
+
|
19
|
+
Scenario: Inline simple object.
|
20
|
+
When the response body is assigned `<input>`
|
21
|
+
Then the response body as JSON is:
|
22
|
+
\"\"\"
|
23
|
+
'<expected>'
|
24
|
+
\"\"\"
|
25
|
+
|
26
|
+
"""
|
27
|
+
When I run `cucumber features/transform_object.feature`
|
28
|
+
Then the output should contain:
|
29
|
+
"""
|
30
|
+
2 passed
|
31
|
+
"""
|
32
|
+
And it should pass
|
33
|
+
|
34
|
+
Examples:
|
35
|
+
| input | expected |
|
36
|
+
| {} | {} |
|
37
|
+
| {"a":1} | {"a":1} |
|
38
|
+
| {"foo":"bar", "num":1, "list": ["1", 2, true]} | {"foo":"bar","num":1,"list":["1",2,true]} |
|
39
|
+
| {"foo": {"bar":{ "num":1, "list": ["1", 2, true]}}} | {"foo":{"bar":{"num":1,"list":["1",2,true]}}} |
|
40
|
+
| {"foo": "\"list\": [\"1\", 2, true]"} | {"foo":"\\"list\\": [\\"1\\", 2, true]"} |
|
41
|
+
|
42
|
+
Scenario: Passed an Object split over multiple lines
|
43
|
+
Given a file named "features/transform_object_splitline.feature" with:
|
44
|
+
"""
|
45
|
+
|
46
|
+
Feature: Using an object argument split over multiple lines
|
47
|
+
Scenario: Object split over lines
|
48
|
+
When the response body is assigned:
|
49
|
+
\"\"\"
|
50
|
+
{
|
51
|
+
"foo":"bar"
|
52
|
+
}
|
53
|
+
\"\"\"
|
54
|
+
Then the value of the response body is equal to:
|
55
|
+
\"\"\"
|
56
|
+
{"foo":"bar"}
|
57
|
+
\"\"\"
|
58
|
+
|
59
|
+
"""
|
60
|
+
When I run `cucumber --strict features/transform_object_splitline.feature`
|
61
|
+
Then the output should contain:
|
62
|
+
"""
|
63
|
+
1 passed
|
64
|
+
"""
|
65
|
+
And it should pass
|
66
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: An argument that is quoted will be (not) transformed into
|
2
|
+
into a string, regardless of any more specific data type the
|
3
|
+
quoted value may resemble.
|
4
|
+
|
5
|
+
Scenario Outline: Assorted basic inputs are provided.
|
6
|
+
Given a file named "features/transform_quoted.feature" with:
|
7
|
+
"""
|
8
|
+
|
9
|
+
Feature: Transform quoted arguments.
|
10
|
+
Scenario: Docstring simple value.
|
11
|
+
When the response body is assigned:
|
12
|
+
\"\"\"
|
13
|
+
<input>
|
14
|
+
\"\"\"
|
15
|
+
Then the response body as JSON is:
|
16
|
+
\"\"\"
|
17
|
+
'<expected>'
|
18
|
+
\"\"\"
|
19
|
+
|
20
|
+
Scenario: Inline simple value.
|
21
|
+
When the response body is assigned `<input>`
|
22
|
+
Then the response body as JSON is:
|
23
|
+
\"\"\"
|
24
|
+
'<expected>'
|
25
|
+
\"\"\"
|
26
|
+
|
27
|
+
"""
|
28
|
+
When I run `cucumber --strict features/transform_quoted.feature`
|
29
|
+
Then the output should contain:
|
30
|
+
"""
|
31
|
+
2 passed
|
32
|
+
"""
|
33
|
+
And it should pass
|
34
|
+
|
35
|
+
Examples:
|
36
|
+
| input | expected |
|
37
|
+
| "true" | "true" |
|
38
|
+
| "123" | "123" |
|
39
|
+
| " -123 " | " -123 " |
|
40
|
+
| "["foo","bar"]" | "[\"foo\",\"bar\"]" |
|
41
|
+
| "{"foo":"bar"}" | "{\"foo\":\"bar\"}" |
|
@@ -0,0 +1,40 @@
|
|
1
|
+
Feature: An argument that is enclosed in slashes (/) will be transformed into a regex.
|
2
|
+
|
3
|
+
Scenario Outline: Assorted basic inputs are provided.
|
4
|
+
Given a file named "features/transform_regex.feature" with:
|
5
|
+
"""
|
6
|
+
|
7
|
+
Feature: Tranform regex arguments.
|
8
|
+
Scenario: Docstring simple value.
|
9
|
+
When the response body is assigned:
|
10
|
+
\"\"\"
|
11
|
+
<input>
|
12
|
+
\"\"\"
|
13
|
+
Then the response body as JSON is:
|
14
|
+
\"\"\"
|
15
|
+
'<expected>'
|
16
|
+
\"\"\"
|
17
|
+
|
18
|
+
Scenario: Inline simple value.
|
19
|
+
When the response body is assigned `<input>`
|
20
|
+
Then the response body as JSON is:
|
21
|
+
\"\"\"
|
22
|
+
'<expected>'
|
23
|
+
\"\"\"
|
24
|
+
|
25
|
+
"""
|
26
|
+
When I run `cucumber --strict features/transform_regex.feature`
|
27
|
+
Then the output should contain:
|
28
|
+
"""
|
29
|
+
2 passed
|
30
|
+
"""
|
31
|
+
And it should pass
|
32
|
+
|
33
|
+
#Expecting Ruby stringification and using painful escaping
|
34
|
+
Examples:
|
35
|
+
| input | expected |
|
36
|
+
| // | "(?-mix:)" |
|
37
|
+
| /\// | "(?-mix:\\\\\\\\/)" |
|
38
|
+
| /.*/ | "(?-mix:.*)" |
|
39
|
+
| /"[[:alpha:]]?"/ | "(?-mix:\\\\"[[:alpha:]]?\\\\")" |
|
40
|
+
| /foo bar/ | "(?-mix:foo bar)" |
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: An argument that includes {{ }} interpolation markers will be
|
2
|
+
treated as a template and transformed into an evaluated version of
|
3
|
+
that template using the current binding environment which will then
|
4
|
+
also be transformed.
|
5
|
+
|
6
|
+
Scenario Outline: A single value template is expanded
|
7
|
+
using a simple bound value.
|
8
|
+
Given a file named "features/transform_template.feature" with:
|
9
|
+
"""
|
10
|
+
|
11
|
+
Feature: Transform template arguments.
|
12
|
+
Background:
|
13
|
+
When `bound` is assigned `<binding>`
|
14
|
+
|
15
|
+
Scenario: Docstring single value template.
|
16
|
+
When the response body is assigned:
|
17
|
+
\"\"\"
|
18
|
+
{{{bound}}}
|
19
|
+
\"\"\"
|
20
|
+
Then the response body as JSON is:
|
21
|
+
\"\"\"
|
22
|
+
'<expected>'
|
23
|
+
\"\"\"
|
24
|
+
Scenario: Inline single value template.
|
25
|
+
When the response body is assigned `{{{bound}}}`
|
26
|
+
Then the response body as JSON is:
|
27
|
+
\"\"\"
|
28
|
+
'<expected>'
|
29
|
+
\"\"\"
|
30
|
+
|
31
|
+
"""
|
32
|
+
When I run `cucumber --strict features/transform_template.feature`
|
33
|
+
Then the output should contain:
|
34
|
+
"""
|
35
|
+
6 passed
|
36
|
+
"""
|
37
|
+
And it should pass
|
38
|
+
|
39
|
+
# Double quotes for quoted because it will be transformed on binding also
|
40
|
+
Examples:
|
41
|
+
| binding | expected |
|
42
|
+
| true | true |
|
43
|
+
| -452 | -452 |
|
44
|
+
| ""-452"" | "-452" |
|
45
|
+
| ["a", 1] | ["a",1] |
|
46
|
+
| ""["a", 1]"" | "[\\"a\\", 1]" |
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Feature: An argument that includes leading or trailing whitespace
|
2
|
+
will be transformed so that such whitespace is removed
|
3
|
+
and that value will also be transformed.
|
4
|
+
|
5
|
+
Scenario Outline: Assorted basic inputs are provided.
|
6
|
+
Given a file named "features/transform_whitespace.feature" with:
|
7
|
+
"""
|
8
|
+
|
9
|
+
Feature: Transform arguments with leading and/or trailing whitespace.
|
10
|
+
Scenario: Docstring simple value.
|
11
|
+
When the response body is assigned:
|
12
|
+
\"\"\"
|
13
|
+
<input>
|
14
|
+
\"\"\"
|
15
|
+
Then the response body as JSON is:
|
16
|
+
\"\"\"
|
17
|
+
'<expected>'
|
18
|
+
\"\"\"
|
19
|
+
|
20
|
+
Scenario: Inline simple value.
|
21
|
+
When the response body is assigned `<input>`
|
22
|
+
Then the response body as JSON is:
|
23
|
+
\"\"\"
|
24
|
+
'<expected>'
|
25
|
+
\"\"\"
|
26
|
+
|
27
|
+
Scenario: Docstring value with a leading and trailing line.
|
28
|
+
When the response body is assigned:
|
29
|
+
\"\"\"
|
30
|
+
|
31
|
+
<input>
|
32
|
+
|
33
|
+
\"\"\"
|
34
|
+
Then the response body as JSON is:
|
35
|
+
\"\"\"
|
36
|
+
'<expected>'
|
37
|
+
\"\"\"
|
38
|
+
|
39
|
+
"""
|
40
|
+
When I run `cucumber --strict features/transform_whitespace.feature`
|
41
|
+
Then the output should contain:
|
42
|
+
"""
|
43
|
+
3 passed
|
44
|
+
"""
|
45
|
+
And it should pass
|
46
|
+
|
47
|
+
Examples:
|
48
|
+
| input | expected |
|
49
|
+
| true | true |
|
50
|
+
| 123 | 123 |
|
51
|
+
| ["a"] | ["a"] |
|
@@ -0,0 +1,184 @@
|
|
1
|
+
Feature: A valid ...
|
2
|
+
|
3
|
+
Scenario: Positive and negative assertions for JSON types.
|
4
|
+
Given a file named "features/is_a_valid.feature" with:
|
5
|
+
"""
|
6
|
+
|
7
|
+
Feature: Assert type validity
|
8
|
+
Scenario: String in response body is only a valid String.
|
9
|
+
When the response body is assigned:
|
10
|
+
\"\"\"
|
11
|
+
foo
|
12
|
+
\"\"\"
|
13
|
+
Then the value of the response body is a valid `String`
|
14
|
+
And the value of the response body is not a valid `Number`
|
15
|
+
And the value of the response body is not a valid `Integer`
|
16
|
+
And the value of the response body is not a valid `Object`
|
17
|
+
And the value of the response body is not a valid `Array`
|
18
|
+
And the value of the response body is not a valid `Boolean`
|
19
|
+
|
20
|
+
Scenario: Integer in response body is a valid Integer and Number.
|
21
|
+
When the response body is assigned:
|
22
|
+
\"\"\"
|
23
|
+
1
|
24
|
+
\"\"\"
|
25
|
+
Then the value of the response body is not a valid `String`
|
26
|
+
And the value of the response body is a valid `Number`
|
27
|
+
And the value of the response body is a valid `Integer`
|
28
|
+
And the value of the response body is not a valid `Object`
|
29
|
+
And the value of the response body is not a valid `Array`
|
30
|
+
And the value of the response body is not a valid `Boolean`
|
31
|
+
|
32
|
+
Scenario: Quoted Number in response body is only a valid String.
|
33
|
+
When the response body is assigned:
|
34
|
+
\"\"\"
|
35
|
+
"1"
|
36
|
+
\"\"\"
|
37
|
+
Then the value of the response body is a valid `String`
|
38
|
+
And the value of the response body is not a valid `Number`
|
39
|
+
And the value of the response body is not a valid `Integer`
|
40
|
+
And the value of the response body is not a valid `Object`
|
41
|
+
And the value of the response body is not a valid `Array`
|
42
|
+
And the value of the response body is not a valid `Boolean`
|
43
|
+
|
44
|
+
Scenario: Empty Object in response body is only a valid Object.
|
45
|
+
When the response body is assigned:
|
46
|
+
\"\"\"
|
47
|
+
{}
|
48
|
+
\"\"\"
|
49
|
+
Then the value of the response body is not a valid `String`
|
50
|
+
And the value of the response body is not a valid `Number`
|
51
|
+
And the value of the response body is not a valid `Integer`
|
52
|
+
And the value of the response body is a valid `Object`
|
53
|
+
And the value of the response body is not a valid `Array`
|
54
|
+
And the value of the response body is not a valid `Boolean`
|
55
|
+
|
56
|
+
Scenario: Object in response body is only a valid Object.
|
57
|
+
When the response body is assigned:
|
58
|
+
\"\"\"
|
59
|
+
{"foo": 1}
|
60
|
+
\"\"\"
|
61
|
+
Then the value of the response body is not a valid `String`
|
62
|
+
And the value of the response body is not a valid `Number`
|
63
|
+
And the value of the response body is not a valid `Integer`
|
64
|
+
And the value of the response body is a valid `Object`
|
65
|
+
And the value of the response body is not a valid `Array`
|
66
|
+
And the value of the response body is not a valid `Boolean`
|
67
|
+
|
68
|
+
Scenario: Quoted Object in response body is only a valid String.
|
69
|
+
When the response body is assigned:
|
70
|
+
\"\"\"
|
71
|
+
"{"foo": 1}"
|
72
|
+
\"\"\"
|
73
|
+
Then the value of the response body is a valid `String`
|
74
|
+
And the value of the response body is not a valid `Number`
|
75
|
+
And the value of the response body is not a valid `Integer`
|
76
|
+
And the value of the response body is not a valid `Object`
|
77
|
+
And the value of the response body is not a valid `Array`
|
78
|
+
And the value of the response body is not a valid `Boolean`
|
79
|
+
|
80
|
+
|
81
|
+
Scenario: Empty Array in response body is only a valid Array.
|
82
|
+
When the response body is assigned:
|
83
|
+
\"\"\"
|
84
|
+
[]
|
85
|
+
\"\"\"
|
86
|
+
Then the value of the response body is not a valid `String`
|
87
|
+
And the value of the response body is not a valid `Number`
|
88
|
+
And the value of the response body is not a valid `Integer`
|
89
|
+
And the value of the response body is not a valid `Object`
|
90
|
+
And the value of the response body is a valid `Array`
|
91
|
+
And the value of the response body is not a valid `Boolean`
|
92
|
+
|
93
|
+
Scenario: Array in response body is only a valid Array.
|
94
|
+
When the response body is assigned:
|
95
|
+
\"\"\"
|
96
|
+
[1, "foo"]
|
97
|
+
\"\"\"
|
98
|
+
Then the value of the response body is not a valid `String`
|
99
|
+
And the value of the response body is not a valid `Number`
|
100
|
+
And the value of the response body is not a valid `Integer`
|
101
|
+
And the value of the response body is not a valid `Object`
|
102
|
+
And the value of the response body is a valid `Array`
|
103
|
+
And the value of the response body is not a valid `Boolean`
|
104
|
+
|
105
|
+
Scenario: true in response body is only a valid Boolean.
|
106
|
+
When the response body is assigned:
|
107
|
+
\"\"\"
|
108
|
+
true
|
109
|
+
\"\"\"
|
110
|
+
Then the value of the response body is not a valid `String`
|
111
|
+
And the value of the response body is not a valid `Number`
|
112
|
+
And the value of the response body is not a valid `Integer`
|
113
|
+
And the value of the response body is not a valid `Object`
|
114
|
+
And the value of the response body is not a valid `Array`
|
115
|
+
And the value of the response body is a valid `Boolean`
|
116
|
+
|
117
|
+
Scenario: false in response body is only a valid Boolean.
|
118
|
+
When the response body is assigned:
|
119
|
+
\"\"\"
|
120
|
+
false
|
121
|
+
\"\"\"
|
122
|
+
Then the value of the response body is not a valid `String`
|
123
|
+
And the value of the response body is not a valid `Number`
|
124
|
+
And the value of the response body is not a valid `Integer`
|
125
|
+
And the value of the response body is not a valid `Object`
|
126
|
+
And the value of the response body is not a valid `Array`
|
127
|
+
And the value of the response body is a valid `Boolean`
|
128
|
+
|
129
|
+
Scenario: null in response body is not any valid type.
|
130
|
+
When the response body is assigned:
|
131
|
+
\"\"\"
|
132
|
+
[null]
|
133
|
+
\"\"\"
|
134
|
+
Then the value of the response body child `[0]` is not a valid `String`
|
135
|
+
And the value of the response body child `[0]` is not a valid `Number`
|
136
|
+
And the value of the response body child `[0]` is not a valid `Integer`
|
137
|
+
And the value of the response body child `[0]` is not a valid `Object`
|
138
|
+
And the value of the response body child `[0]` is not a valid `Array`
|
139
|
+
And the value of the response body child `[0]` is not a valid `Boolean`
|
140
|
+
|
141
|
+
Scenario: Selected Array child is a valid Array.
|
142
|
+
When the response body is assigned:
|
143
|
+
\"\"\"
|
144
|
+
{"val": [1, 2, 3]}
|
145
|
+
\"\"\"
|
146
|
+
Then the value of the response body child `val` is a valid `Array`
|
147
|
+
|
148
|
+
Scenario: Selected Array child member is a valid String.
|
149
|
+
When the response body is assigned:
|
150
|
+
\"\"\"
|
151
|
+
{"val": [1, 2, 3]}
|
152
|
+
\"\"\"
|
153
|
+
Then the value of the response body child `val[0]` is a valid `Number`
|
154
|
+
Then the value of the response body child `val[0]` is a valid `Integer`
|
155
|
+
|
156
|
+
Scenario: Selected nested children are a valid Array.
|
157
|
+
When the response body is assigned:
|
158
|
+
\"\"\"
|
159
|
+
[{"val": 1},{"val": 2}]
|
160
|
+
\"\"\"
|
161
|
+
Then the value of the response body children `.val` is a valid `Array`
|
162
|
+
|
163
|
+
Scenario: Selected nested children can be tested for type.
|
164
|
+
When the response body is assigned:
|
165
|
+
\"\"\"
|
166
|
+
[{"val": 1},{"val": 2}]
|
167
|
+
\"\"\"
|
168
|
+
Then the value of the response body children `.val` has elements which are all a valid `Number`
|
169
|
+
Then the value of the response body children `.val` has elements which are all a valid `Integer`
|
170
|
+
|
171
|
+
Scenario: Selected nested children can be tested for type when Arrays.
|
172
|
+
When the response body is assigned:
|
173
|
+
\"\"\"
|
174
|
+
[{"val": [1]},{"val": [2]}]
|
175
|
+
\"\"\"
|
176
|
+
Then the value of the response body children `.val` has elements which are all a valid `Array`
|
177
|
+
|
178
|
+
"""
|
179
|
+
When I run `cucumber --strict features/is_a_valid.feature`
|
180
|
+
Then the output should contain:
|
181
|
+
"""
|
182
|
+
16 passed
|
183
|
+
"""
|
184
|
+
And it should pass
|
@@ -0,0 +1,60 @@
|
|
1
|
+
Feature: Equal to
|
2
|
+
It can be asserted that a value is equal to another value
|
3
|
+
|
4
|
+
Scenario: Assorted positive and negative assertions.
|
5
|
+
Given a file named "features/is_equal_to.feature" with:
|
6
|
+
"""
|
7
|
+
|
8
|
+
Feature: Assert value equality
|
9
|
+
Scenario: String in response body
|
10
|
+
When the response body is assigned:
|
11
|
+
\"\"\"
|
12
|
+
foo
|
13
|
+
\"\"\"
|
14
|
+
Then the value of the response body is equal to `foo`
|
15
|
+
And the value of the response body is not equal to `foot`
|
16
|
+
|
17
|
+
Scenario: Response Status
|
18
|
+
When the response status is assigned `404`
|
19
|
+
Then the value of the response status is equal to `404`
|
20
|
+
And the value of the response status is not equal to `200`
|
21
|
+
|
22
|
+
Scenario: Object in response body
|
23
|
+
When the response body is assigned:
|
24
|
+
\"\"\"
|
25
|
+
{
|
26
|
+
"foo": "bar"
|
27
|
+
}
|
28
|
+
\"\"\"
|
29
|
+
Then the value of the response body is equal to:
|
30
|
+
\"\"\"
|
31
|
+
{"foo":"bar"}
|
32
|
+
\"\"\"
|
33
|
+
And the value of the response body is not equal to:
|
34
|
+
\"\"\"
|
35
|
+
{"foo": "baz"}
|
36
|
+
\"\"\"
|
37
|
+
|
38
|
+
Scenario: List in response body
|
39
|
+
When the response body is assigned `[1, "foo", true]`
|
40
|
+
Then the value of the response body is equal to `[1, "foo", true]`
|
41
|
+
And the value of the response body is not equal to `[1, "bar", true]`
|
42
|
+
|
43
|
+
Scenario Outline: Objects must match completely
|
44
|
+
When the response body is assigned `{"foo": "bar", "baz": 1}`
|
45
|
+
Then the value of the response body is not equal to `<comparison>`
|
46
|
+
|
47
|
+
Examples:
|
48
|
+
| comparison |
|
49
|
+
| {} |
|
50
|
+
| {"foo": "bar"} |
|
51
|
+
| {"foo": "bar", "baz": 1, "extra": 2} |
|
52
|
+
| {"foo": "bar", "baz": 2} |
|
53
|
+
|
54
|
+
"""
|
55
|
+
When I run `cucumber --strict features/is_equal_to.feature`
|
56
|
+
Then the output should contain:
|
57
|
+
"""
|
58
|
+
8 passed
|
59
|
+
"""
|
60
|
+
And it should pass
|