webtrap 0.0.0 → 0.0.1
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 +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +60 -0
- data/.travis.yml +16 -0
- data/CONTRIBUTING.md +45 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +16 -0
- data/README.md +193 -3
- data/Rakefile +15 -0
- data/bin/deploy +19 -0
- data/bin/setup +40 -0
- data/cucumber.yml +1 -0
- data/lib/webtrap/rspec/matchers/send_request.rb +34 -4
- data/lib/webtrap/rspec/matchers/send_request_with_xml.rb +24 -0
- data/lib/webtrap/rspec/matchers.rb +8 -0
- data/lib/webtrap/rspec.rb +11 -0
- data/lib/webtrap/server.rb +23 -8
- data/lib/webtrap/version.rb +4 -1
- data/lib/webtrap.rb +6 -0
- data/webtrap.gemspec +2 -2
- metadata +28 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6588474ffa8dde283728eb5f92c5eff22fe4dcba
|
|
4
|
+
data.tar.gz: 6bbd81d456fb3a44a72c95a570c2b24dfb5df1a1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: de34495dfafe249c736524599a365bd9ad3e5dce325fa1421dadd04d65e5f248a8b20ec0f5e664d7d25b74ce73fc5f55165742ee8fe18accecd11d2b7dd2032a
|
|
7
|
+
data.tar.gz: 98a88a5212a5769ce493862ae11db94f4a54f7b273c0f2880dc081a6cb84dc300b092f52a6d5ecd63970b845dd11437905da019b964b770578fb8a67795ee81a
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
Include:
|
|
3
|
+
- "**/Rakefile"
|
|
4
|
+
- "**/config.ru"
|
|
5
|
+
Exclude:
|
|
6
|
+
- "db/**/*"
|
|
7
|
+
- "config/**/*"
|
|
8
|
+
- "script/**/*"
|
|
9
|
+
- "bin/**/*"
|
|
10
|
+
- "vendor/**/*"
|
|
11
|
+
- "node_modules/**/*"
|
|
12
|
+
- "spec/factories.rb"
|
|
13
|
+
TargetRubyVersion: 2.3
|
|
14
|
+
|
|
15
|
+
Metrics/LineLength:
|
|
16
|
+
Enabled: false
|
|
17
|
+
|
|
18
|
+
Style/AlignParameters:
|
|
19
|
+
EnforcedStyle: with_fixed_indentation
|
|
20
|
+
|
|
21
|
+
Style/ClassAndModuleChildren:
|
|
22
|
+
Enabled: false
|
|
23
|
+
|
|
24
|
+
Style/Documentation:
|
|
25
|
+
Enabled: false
|
|
26
|
+
|
|
27
|
+
Style/DotPosition:
|
|
28
|
+
EnforcedStyle: trailing
|
|
29
|
+
|
|
30
|
+
Style/IfUnlessModifier:
|
|
31
|
+
Enabled: false
|
|
32
|
+
|
|
33
|
+
Style/PredicateName:
|
|
34
|
+
NamePrefixBlacklist:
|
|
35
|
+
- is_
|
|
36
|
+
- have_
|
|
37
|
+
|
|
38
|
+
Style/StringLiterals:
|
|
39
|
+
EnforcedStyle: double_quotes
|
|
40
|
+
|
|
41
|
+
Style/NumericLiterals:
|
|
42
|
+
Enabled: false
|
|
43
|
+
|
|
44
|
+
Style/SingleLineBlockParams:
|
|
45
|
+
Enabled: false
|
|
46
|
+
|
|
47
|
+
Style/MultilineOperationIndentation:
|
|
48
|
+
EnforcedStyle: indented
|
|
49
|
+
|
|
50
|
+
Style/MultilineMethodCallIndentation:
|
|
51
|
+
EnforcedStyle: indented
|
|
52
|
+
|
|
53
|
+
Style/TrailingCommaInArguments:
|
|
54
|
+
EnforcedStyleForMultiline: comma
|
|
55
|
+
|
|
56
|
+
Style/TrailingCommaInLiteral:
|
|
57
|
+
EnforcedStyleForMultiline: comma
|
|
58
|
+
|
|
59
|
+
Style/FrozenStringLiteralComment:
|
|
60
|
+
Enabled: false
|
data/.travis.yml
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
language: ruby
|
|
2
|
+
sudo: false
|
|
3
|
+
cache:
|
|
4
|
+
directories:
|
|
5
|
+
- ../bundle
|
|
6
|
+
bundler_args: "--standalone --path ../bundle"
|
|
7
|
+
rvm:
|
|
8
|
+
- 2.0.0
|
|
9
|
+
- 2.1
|
|
10
|
+
- 2.2.5
|
|
11
|
+
- 2.3.3
|
|
12
|
+
- 2.4.0
|
|
13
|
+
- ruby-head
|
|
14
|
+
before_install: gem install bundler -v 1.13.6
|
|
15
|
+
script:
|
|
16
|
+
- bundle exec cucumber
|
data/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Contributing
|
|
2
|
+
============
|
|
3
|
+
|
|
4
|
+
We welcome all kinds of contributions whether it is a bug, a new feature,
|
|
5
|
+
documentation, etc.
|
|
6
|
+
|
|
7
|
+
Please follow these guidelines when contributing to this project.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## Bug Reporting
|
|
11
|
+
|
|
12
|
+
If anything feels like a bug, it is probably a bug. But if it isn't, we're happy
|
|
13
|
+
to let you know why :smile:. When submitting your issue, follow these tips:
|
|
14
|
+
|
|
15
|
+
* Include an thorough environment description:
|
|
16
|
+
- Operating System;
|
|
17
|
+
- Ruby version;
|
|
18
|
+
- Gem versions (include your `Gemfile.lock` when not sure);
|
|
19
|
+
* Describe the bug as well as possible so that we can reproduce it;
|
|
20
|
+
* If possible, provide a code sample that showcases the issue.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## Pull Requests
|
|
24
|
+
|
|
25
|
+
Pull requests are **always** welcome. After that we'll review it and get back to
|
|
26
|
+
you on it. To increase the chance of your PR being accepted, follow these tips:
|
|
27
|
+
|
|
28
|
+
* Your changes **must** pass in the [CI][ci];
|
|
29
|
+
* If your changes include code, it **must** be tested (if not sure how, we're
|
|
30
|
+
here to help);
|
|
31
|
+
* **Avoid** breaking the conventions set by existing code unless you have a very
|
|
32
|
+
good reason for it (just because there isn't a linter to catch it, doesn't
|
|
33
|
+
mean it's ok);
|
|
34
|
+
* After your changes get approved, you **must** squash all your commits to the
|
|
35
|
+
minimal logical set (which is _one_, unless instructed otherwise);
|
|
36
|
+
* **It's ok to ask for help**: if you're struggling to finish implementing your
|
|
37
|
+
idea, reach out to us and we'll try to point you in the right direction.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
## Thank you
|
|
41
|
+
|
|
42
|
+
Thank you for even considering helping out. You're awesome! :heart:
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
[ci]: https://travis-ci.org/pfac/webtrap
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -12,6 +12,7 @@ GEM
|
|
|
12
12
|
specs:
|
|
13
13
|
addressable (2.5.0)
|
|
14
14
|
public_suffix (~> 2.0, >= 2.0.2)
|
|
15
|
+
ast (2.3.0)
|
|
15
16
|
builder (3.2.3)
|
|
16
17
|
crack (0.4.3)
|
|
17
18
|
safe_yaml (~> 1.0.0)
|
|
@@ -36,10 +37,14 @@ GEM
|
|
|
36
37
|
multi_test (0.1.2)
|
|
37
38
|
nokogiri (1.6.8.1)
|
|
38
39
|
mini_portile2 (~> 2.1.0)
|
|
40
|
+
parser (2.4.0.0)
|
|
41
|
+
ast (~> 2.2)
|
|
42
|
+
powerpack (0.1.1)
|
|
39
43
|
public_suffix (2.0.5)
|
|
40
44
|
rack (1.6.5)
|
|
41
45
|
rack-protection (1.5.3)
|
|
42
46
|
rack
|
|
47
|
+
rainbow (2.2.1)
|
|
43
48
|
rake (10.4.2)
|
|
44
49
|
rspec (3.5.0)
|
|
45
50
|
rspec-core (~> 3.5.0)
|
|
@@ -54,16 +59,25 @@ GEM
|
|
|
54
59
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
55
60
|
rspec-support (~> 3.5.0)
|
|
56
61
|
rspec-support (3.5.0)
|
|
62
|
+
rubocop (0.47.1)
|
|
63
|
+
parser (>= 2.3.3.1, < 3.0)
|
|
64
|
+
powerpack (~> 0.1)
|
|
65
|
+
rainbow (>= 1.99.1, < 3.0)
|
|
66
|
+
ruby-progressbar (~> 1.7)
|
|
67
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
68
|
+
ruby-progressbar (1.8.1)
|
|
57
69
|
safe_yaml (1.0.4)
|
|
58
70
|
sinatra (1.4.8)
|
|
59
71
|
rack (~> 1.5)
|
|
60
72
|
rack-protection (~> 1.4)
|
|
61
73
|
tilt (>= 1.3, < 3)
|
|
62
74
|
tilt (2.0.6)
|
|
75
|
+
unicode-display_width (1.1.3)
|
|
63
76
|
webmock (2.3.2)
|
|
64
77
|
addressable (>= 2.3.6)
|
|
65
78
|
crack (>= 0.3.2)
|
|
66
79
|
hashdiff
|
|
80
|
+
yard (0.9.8)
|
|
67
81
|
|
|
68
82
|
PLATFORMS
|
|
69
83
|
ruby
|
|
@@ -72,7 +86,9 @@ DEPENDENCIES
|
|
|
72
86
|
bundler (~> 1.13)
|
|
73
87
|
cucumber (~> 2.0)
|
|
74
88
|
rake (~> 10.0)
|
|
89
|
+
rubocop (~> 0.47.1)
|
|
75
90
|
webtrap!
|
|
91
|
+
yard (~> 0.9.8)
|
|
76
92
|
|
|
77
93
|
BUNDLED WITH
|
|
78
94
|
1.13.6
|
data/README.md
CHANGED
|
@@ -1,4 +1,194 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
WebTrap
|
|
2
|
+
=======
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
[](https://badge.fury.io/rb/webtrap)
|
|
5
|
+
[](https://travis-ci.org/pfac/webtrap)
|
|
6
|
+
[](https://gemnasium.com/github.com/pfac/webtrap)
|
|
7
|
+
[](https://codeclimate.com/github/pfac/webtrap)
|
|
8
|
+
[](https://inch-ci.org/github/pfac/webtrap)
|
|
9
|
+
|
|
10
|
+
WebTrap allows you to write tests that assert on outgoing requests. This allows
|
|
11
|
+
you to verify that such requests match the documentation of external services
|
|
12
|
+
without actually having to hit them.
|
|
13
|
+
|
|
14
|
+
## Install
|
|
15
|
+
|
|
16
|
+
To install this library, just run the following command on your shell:
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
#!/bin/sh
|
|
20
|
+
gem install webtrap
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or, if you're using [Bundler][bundler], add the following to your project's
|
|
24
|
+
`Gemfile`:
|
|
25
|
+
|
|
26
|
+
```ruby
|
|
27
|
+
# Gemfile
|
|
28
|
+
gem "webtrap", group: :test
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
33
|
+
|
|
34
|
+
WebTrap consists on a set of matchers that given a block where an HTTP request
|
|
35
|
+
is sent provide the ability to assert over on the outgoing request.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### Configuration
|
|
39
|
+
|
|
40
|
+
In order to use WebTrap matchers, make sure you require the correct file into
|
|
41
|
+
your configuration:
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
#### RSpec
|
|
45
|
+
|
|
46
|
+
```ruby
|
|
47
|
+
require "webtrap/rspec"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Include this line in the specs where you wish to use these matchers. If you
|
|
51
|
+
prefer to make WebTrap matchers available to all specs add this line to
|
|
52
|
+
`specs/spec_helper.rb`, or, if you are using `rspec-rails`, add it to
|
|
53
|
+
`specs/support/webtrap.rb`.
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
### Examples
|
|
57
|
+
|
|
58
|
+
* Verify that a request is sent anywhere:
|
|
59
|
+
```ruby
|
|
60
|
+
expect do
|
|
61
|
+
# ...
|
|
62
|
+
end.to send_request
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
* Verify that a request is send with a specific XML body (or [equivalent][equivalent-xml]):
|
|
66
|
+
```ruby
|
|
67
|
+
expect do
|
|
68
|
+
# ...
|
|
69
|
+
end.to send_request.with_xml(xml)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
## Contributing
|
|
74
|
+
|
|
75
|
+
If you find a problem, have an idea or a suggestion, but don't know how to
|
|
76
|
+
implement it, or if you simply have a question regarding this project,
|
|
77
|
+
[please create an issue on GitHub][github-issue]. Your issue will be reviewed by
|
|
78
|
+
one of the main contributors and taken into consideration in the development of
|
|
79
|
+
the project.
|
|
80
|
+
|
|
81
|
+
On the other hand, if you are able to take action on the issue
|
|
82
|
+
[please submit a pull request][github-pull-request] instead. Development will go
|
|
83
|
+
a lot faster with contributions from the community, be it in code, documentation
|
|
84
|
+
or any other form.
|
|
85
|
+
|
|
86
|
+
Any contribution is more than welcome.
|
|
87
|
+
|
|
88
|
+
### Setup
|
|
89
|
+
|
|
90
|
+
Start by cloning the project into your system and running the bootstrapping
|
|
91
|
+
script included to set up your development environment:
|
|
92
|
+
|
|
93
|
+
```sh
|
|
94
|
+
#!/bin/sh
|
|
95
|
+
git clone https://github.com/pfac/webtrap.git
|
|
96
|
+
cd webtrap
|
|
97
|
+
./bin/setup
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Here's what the script does:
|
|
101
|
+
|
|
102
|
+
1. Checks the existence of a compatible Ruby environment (MRI 2.0+);
|
|
103
|
+
2. Checks the presence of [Bundler][bundler], and installs it if missing;
|
|
104
|
+
3. Installs all dependencies.
|
|
105
|
+
|
|
106
|
+
Feel free to check the script before running it. To check if everything is
|
|
107
|
+
correctly set up run:
|
|
108
|
+
|
|
109
|
+
```sh
|
|
110
|
+
#!/bin/sh
|
|
111
|
+
bundle exec rake
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
That will run the linters and acceptance tests. If the tests fail please check
|
|
115
|
+
the [build status][travis-ci] for the branch you checked out. Unless the build
|
|
116
|
+
status is already failing, please investigate the issue on your environment. If
|
|
117
|
+
you found a defect in the bootstraping script, please file an issue to let us
|
|
118
|
+
know (be as detailed as possible).
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
### Development
|
|
122
|
+
|
|
123
|
+
In this project we use BDD with Cucumber. Ideally you should start with a
|
|
124
|
+
successful build, which you can check by running:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
#!/bin/sh
|
|
128
|
+
bundle exec rake
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
It may happen that the branch where you started (usually `master`) is already
|
|
132
|
+
broken on [the CI][travis-ci]. If that is the case try to focus only on the scenarios you
|
|
133
|
+
are working on, by running instead:
|
|
134
|
+
|
|
135
|
+
```sh
|
|
136
|
+
#!/bin/sh
|
|
137
|
+
cucumber features/<path-to-file>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Start by describing your idea in either a new scenario or a whole new feature
|
|
141
|
+
file. If you are not sure which one to go for, create a new feature file and
|
|
142
|
+
someone will point you in the right direction during code revision. Make sure
|
|
143
|
+
your scenario fails before proceeding.
|
|
144
|
+
|
|
145
|
+
After that, implement the necessary code required to make your scenario pass. If
|
|
146
|
+
you find yourself in trouble feel free to [create an issue][github-issue]
|
|
147
|
+
pointing to your changes and someone will try to help you.
|
|
148
|
+
|
|
149
|
+
Once your scenario passes, refactor as required. Make sure your code gets
|
|
150
|
+
properly checked by the linters. When you feel your changes are ready,
|
|
151
|
+
[submit a pull request][github-pull-request]. We'll review it in the nicest way
|
|
152
|
+
possible. :smile:
|
|
153
|
+
|
|
154
|
+
For a short-list to follow before submitting your pull request, see
|
|
155
|
+
[CONTRIBUTING](./CONTRIBUTING.md).
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
### Deployment
|
|
159
|
+
|
|
160
|
+
Any main contributor can deploy a new version. To do so, update the version
|
|
161
|
+
number as appropriate according to [Semantic Versioning][semver] and run the
|
|
162
|
+
deployment script:
|
|
163
|
+
|
|
164
|
+
```sh
|
|
165
|
+
#!/bin/sh
|
|
166
|
+
./bin/deploy
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
On the other hand, if you are not a main contributor with deployment
|
|
170
|
+
permissions your idea will have to wait for a new version release to become
|
|
171
|
+
available in [RubyGems][rubygems] once it gets accepted.
|
|
172
|
+
|
|
173
|
+
At the moment there is no need for a release schedule, so new versions will be
|
|
174
|
+
released at the discretion of the main contributors team. Should you require
|
|
175
|
+
a pending feature to be released, feel free to mention it in your pull request
|
|
176
|
+
once it gets merged, or to open a new issue. We'll try to honor such requests
|
|
177
|
+
as much as possible when reasonable.
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
## About
|
|
181
|
+
|
|
182
|
+
WebTrap was originally designed by and is currently maintained by
|
|
183
|
+
[Pedro Costa][pfac]. All artifacts in this project are released under the
|
|
184
|
+
[MIT license](./LICENSE.txt).
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
[bundler]: http://bundler.io/
|
|
188
|
+
[equivalent-xml]: https://github.com/mbklein/equivalent-xml
|
|
189
|
+
[github-issue]: https://github.com/pfac/webtrap/issues/new
|
|
190
|
+
[github-pull-request]: https://github.com/pfac/webtrap/pull/new
|
|
191
|
+
[pfac]: https://github.com/pfac
|
|
192
|
+
[rubygems]: https://rubygems.org/gems/webtrap
|
|
193
|
+
[semver]: http://semver.org/
|
|
194
|
+
[travis-ci]: https://travis-ci.org/pfac/webtrap
|
data/Rakefile
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
namespace :lint do
|
|
4
|
+
require "rubocop/rake_task"
|
|
5
|
+
RuboCop::RakeTask.new(:ruby)
|
|
6
|
+
end
|
|
7
|
+
task lint: %i(lint:ruby)
|
|
8
|
+
|
|
9
|
+
namespace :test do
|
|
10
|
+
require "cucumber/rake/task"
|
|
11
|
+
Cucumber::Rake::Task.new(:acceptance)
|
|
12
|
+
end
|
|
13
|
+
task test: %i(test:acceptance)
|
|
14
|
+
|
|
15
|
+
task default: %i(lint test)
|
data/bin/deploy
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
_webtrap_has_gem () {
|
|
6
|
+
type gem > /dev/null 2>&1
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
_webtrap_deploy () {
|
|
10
|
+
if ! _webtrap_has_gem; then
|
|
11
|
+
echo '* Compatible Ruby environment not found' >&2
|
|
12
|
+
echo 'WebTrap Setup error: this project requires a compatible Ruby environment.' >&2
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
gem push "$(gem build webtrap.gemspec | grep "File:" | cut -d\ -f4)"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
_webtrap_deploy "$@"
|
data/bin/setup
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env sh
|
|
2
|
+
|
|
3
|
+
_webtrap_has_compatible_ruby () {
|
|
4
|
+
if ! type ruby > /dev/null 2>&1; then
|
|
5
|
+
return 1
|
|
6
|
+
fi
|
|
7
|
+
|
|
8
|
+
local major_version=`ruby --version | cut -d\ -f2 | cut -dp -f1 | cut -d. -f1`
|
|
9
|
+
|
|
10
|
+
[ "$major_version" -ge "2" ]
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
_webtrap_has_gem () {
|
|
14
|
+
type gem > /dev/null 2>&1
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
_webtrap_has_bundler () {
|
|
18
|
+
type bundler > /dev/null 2>&1
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
_webtrap_setup () {
|
|
22
|
+
if ! _webtrap_has_compatible_ruby || ! _webtrap_has_gem; then
|
|
23
|
+
echo '* Compatible Ruby environment not found' >&2
|
|
24
|
+
echo 'WebTrap Setup error: this project requires MRI 2.0+ to be available.' >&2
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
if ! _webtrap_has_bundler; then
|
|
29
|
+
echo '* Bundler not found.'
|
|
30
|
+
echo 'WebTrap Setup error: this project requires Bundler to be available.' >&2
|
|
31
|
+
exit 2
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
echo '* Checking dependencies'
|
|
35
|
+
(bundle check || bundle install) > /dev/null
|
|
36
|
+
|
|
37
|
+
echo '* All done'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
_webtrap_setup "$@"
|
data/cucumber.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
default: --format progress
|
|
@@ -1,26 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "webmock/rspec"
|
|
2
4
|
|
|
3
5
|
module WebTrap
|
|
4
6
|
module RSpec
|
|
5
7
|
module Matchers
|
|
8
|
+
# @api private
|
|
9
|
+
# Provides the implementation for `send_request`.
|
|
10
|
+
# Not intended to be instantiated directly.
|
|
6
11
|
class SendRequest
|
|
12
|
+
# @api public
|
|
13
|
+
# Specifies the XML payload of the request.
|
|
14
|
+
#
|
|
15
|
+
# The expectation will pass only if a request is sent with a payload
|
|
16
|
+
# that is considered equivalent to the reference. For further details
|
|
17
|
+
# see the {https://github.com/mbklein/equivalent-xml equivalent-xml}
|
|
18
|
+
# gem.
|
|
19
|
+
#
|
|
20
|
+
# @param xml [] The reference XML payload.
|
|
21
|
+
# @return [SendRequestWithXml]
|
|
22
|
+
# The matcher to verify that a request is with a payload equivalent
|
|
23
|
+
# to the reference.
|
|
24
|
+
def with_xml(xml)
|
|
25
|
+
SendRequestWithXml.new(xml)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @api private
|
|
29
|
+
# Checks if the provided Proc sends an HTTP request.
|
|
30
|
+
# @param transmission_proc [Proc]
|
|
31
|
+
# The proc that should send an HTTP request.
|
|
32
|
+
# @return
|
|
33
|
+
# Whether an HTTP request was sent.
|
|
34
|
+
# @see {RSpec::Matchers::MatcherProtocol#matches?}
|
|
7
35
|
def matches?(transmission_proc)
|
|
8
36
|
perform_transmission(transmission_proc)
|
|
9
37
|
request_sent?
|
|
10
38
|
end
|
|
11
39
|
|
|
40
|
+
# @api private
|
|
41
|
+
# Message to be shown if the expectation fails to pass.
|
|
42
|
+
# @return [String]
|
|
12
43
|
def failure_message
|
|
13
44
|
"expected block to send an HTTP request, but nothing was sent out"
|
|
14
45
|
end
|
|
15
46
|
|
|
47
|
+
# @api private
|
|
48
|
+
# Allows the matcher to be used with block expectations.
|
|
49
|
+
# @return [TrueClass]
|
|
16
50
|
def supports_block_expectations?
|
|
17
51
|
true
|
|
18
52
|
end
|
|
19
53
|
|
|
20
|
-
def with_xml(xml)
|
|
21
|
-
SendRequestWithXml.new(xml)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
54
|
private
|
|
25
55
|
|
|
26
56
|
def perform_transmission(transmission_proc)
|
|
@@ -1,27 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "equivalent-xml"
|
|
2
4
|
require "webmock/rspec"
|
|
3
5
|
|
|
4
6
|
module WebTrap
|
|
5
7
|
module RSpec
|
|
6
8
|
module Matchers
|
|
9
|
+
# @api private
|
|
10
|
+
# Used to specify the XML payload of the request.
|
|
7
11
|
class SendRequestWithXml < SendRequest
|
|
12
|
+
# Reference to be compared with the payload of outgoing XML requests.
|
|
8
13
|
attr_reader :expected_payload
|
|
9
14
|
|
|
15
|
+
# Allows the parameterization of the matcher with the reference payload.
|
|
16
|
+
# @param expected_payload []
|
|
17
|
+
# Reference to be compared with the payload of outgoing XML requests.
|
|
10
18
|
def initialize(expected_payload)
|
|
11
19
|
@expected_payload = expected_payload
|
|
12
20
|
end
|
|
13
21
|
|
|
22
|
+
# @api private
|
|
23
|
+
# Checks if the provided Proc sends a request with an XML payload
|
|
24
|
+
# equivalent to the expected reference.
|
|
25
|
+
# @param transmission_proc [Proc]
|
|
26
|
+
# The proc that should send a valid request.
|
|
27
|
+
# @return
|
|
28
|
+
# Whether a request was sent with an equivalent XML payload.
|
|
29
|
+
# @see {RSpec::Matchers::MatcherProtocol#matches?}
|
|
14
30
|
def matches?(transmission_proc)
|
|
15
31
|
perform_transmission(transmission_proc)
|
|
16
32
|
request_sent? && valid_payload?
|
|
17
33
|
end
|
|
18
34
|
|
|
35
|
+
# @api private
|
|
36
|
+
# Message to be shown if the expectation fails to pass.
|
|
37
|
+
# @return [String]
|
|
38
|
+
# @see {RSpec::Matchers::MatcherProtocol#failure_message}
|
|
19
39
|
def failure_message
|
|
20
40
|
return super unless request_sent?
|
|
21
41
|
|
|
22
42
|
"expected block to send an HTTP request with XML body, but payload was not equivalent"
|
|
23
43
|
end
|
|
24
44
|
|
|
45
|
+
# @api private
|
|
46
|
+
# Allows the matcher to be used with block expectations.
|
|
47
|
+
# @return [TrueClass]
|
|
48
|
+
# @see {RSpec::Matchers::MatcherProtocol#supports_block_expectations?}
|
|
25
49
|
def supports_block_expectations?
|
|
26
50
|
true
|
|
27
51
|
end
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "webtrap/rspec/matchers/send_request"
|
|
2
4
|
require "webtrap/rspec/matchers/send_request_with_xml"
|
|
3
5
|
|
|
4
6
|
module WebTrap
|
|
5
7
|
module RSpec
|
|
8
|
+
# WebTrap::RSpec::Matchers provides the set of matchers available to define
|
|
9
|
+
# expections about outgoing requests.
|
|
6
10
|
module Matchers
|
|
11
|
+
# Passes if the block sends any HTTP request.
|
|
12
|
+
#
|
|
13
|
+
# @return [SendRequest]
|
|
14
|
+
# The matcher to verify that the request is sent.
|
|
7
15
|
def send_request
|
|
8
16
|
SendRequest.new
|
|
9
17
|
end
|
data/lib/webtrap/rspec.rb
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "webtrap/server"
|
|
2
4
|
|
|
3
5
|
require "webtrap/rspec/matchers"
|
|
6
|
+
|
|
7
|
+
module WebTrap
|
|
8
|
+
# Implementation of the WebTrap features for the RSpec testing tool.
|
|
9
|
+
#
|
|
10
|
+
# @example
|
|
11
|
+
# require "webtrap/rspec"
|
|
12
|
+
module RSpec
|
|
13
|
+
end
|
|
14
|
+
end
|
data/lib/webtrap/server.rb
CHANGED
|
@@ -1,24 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "sinatra"
|
|
2
4
|
|
|
3
5
|
module WebTrap
|
|
6
|
+
# Base class for creating fake web application to capture outgoing web
|
|
7
|
+
# requests and assert on them.
|
|
8
|
+
#
|
|
9
|
+
# Descendants of this class are in charge of setting the required rules to
|
|
10
|
+
# correctly intercept the target requests.
|
|
11
|
+
#
|
|
12
|
+
# Currently it is only used by SendRequestWithXml.
|
|
4
13
|
class Server < Sinatra::Base
|
|
5
14
|
@payload_was_valid = false
|
|
6
15
|
@request_received = false
|
|
7
16
|
|
|
8
|
-
|
|
9
|
-
|
|
17
|
+
class << self
|
|
18
|
+
# Set whether the payload met the matcher constraints.
|
|
19
|
+
# @param value [Boolean]
|
|
20
|
+
attr_writer :payload_was_valid
|
|
21
|
+
|
|
22
|
+
# Set whether a request was received at all.
|
|
23
|
+
# @param value [Boolean]
|
|
24
|
+
attr_writer :request_received
|
|
10
25
|
end
|
|
11
26
|
|
|
12
|
-
|
|
13
|
-
|
|
27
|
+
# Whether the payload met the matcher constraints.
|
|
28
|
+
# @return [Boolean] `false` by default.
|
|
29
|
+
def self.payload_was_valid?
|
|
30
|
+
@payload_was_valid
|
|
14
31
|
end
|
|
15
32
|
|
|
33
|
+
# Whether a request was received at all.
|
|
34
|
+
# @return [Boolean] `false` by default.
|
|
16
35
|
def self.request_received?
|
|
17
36
|
@request_received
|
|
18
37
|
end
|
|
19
|
-
|
|
20
|
-
def self.request_received=(request_received)
|
|
21
|
-
@request_received = request_received
|
|
22
|
-
end
|
|
23
38
|
end
|
|
24
39
|
end
|
data/lib/webtrap/version.rb
CHANGED
data/lib/webtrap.rb
ADDED
data/webtrap.gemspec
CHANGED
|
@@ -41,7 +41,7 @@ Gem::Specification.new do |spec|
|
|
|
41
41
|
spec.add_dependency "webmock", "~> 2.0"
|
|
42
42
|
|
|
43
43
|
spec.add_development_dependency "bundler", "~> 1.13"
|
|
44
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
|
45
44
|
spec.add_development_dependency "cucumber", "~> 2.0"
|
|
45
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
46
|
+
spec.add_development_dependency "rubocop", "~> 0.47.1"
|
|
46
47
|
end
|
|
47
|
-
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: webtrap
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pedro Costa
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-02-
|
|
11
|
+
date: 2017-02-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: equivalent-xml
|
|
@@ -80,6 +80,20 @@ dependencies:
|
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '1.13'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: cucumber
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '2.0'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '2.0'
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: rake
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -95,19 +109,19 @@ dependencies:
|
|
|
95
109
|
- !ruby/object:Gem::Version
|
|
96
110
|
version: '10.0'
|
|
97
111
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
112
|
+
name: rubocop
|
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
|
100
114
|
requirements:
|
|
101
115
|
- - "~>"
|
|
102
116
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
117
|
+
version: 0.47.1
|
|
104
118
|
type: :development
|
|
105
119
|
prerelease: false
|
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
121
|
requirements:
|
|
108
122
|
- - "~>"
|
|
109
123
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
124
|
+
version: 0.47.1
|
|
111
125
|
description: |2
|
|
112
126
|
WebTrap allows you to write tests that assert on outgoing requests. This
|
|
113
127
|
allows you to verify that such requests match the documentation of external
|
|
@@ -118,11 +132,20 @@ executables: []
|
|
|
118
132
|
extensions: []
|
|
119
133
|
extra_rdoc_files: []
|
|
120
134
|
files:
|
|
135
|
+
- ".gitignore"
|
|
136
|
+
- ".rubocop.yml"
|
|
121
137
|
- ".ruby-version"
|
|
138
|
+
- ".travis.yml"
|
|
139
|
+
- CONTRIBUTING.md
|
|
122
140
|
- Gemfile
|
|
123
141
|
- Gemfile.lock
|
|
124
142
|
- LICENSE.txt
|
|
125
143
|
- README.md
|
|
144
|
+
- Rakefile
|
|
145
|
+
- bin/deploy
|
|
146
|
+
- bin/setup
|
|
147
|
+
- cucumber.yml
|
|
148
|
+
- lib/webtrap.rb
|
|
126
149
|
- lib/webtrap/rspec.rb
|
|
127
150
|
- lib/webtrap/rspec/matchers.rb
|
|
128
151
|
- lib/webtrap/rspec/matchers/send_request.rb
|