brine-dsl 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|