lurker 0.5.6 → 0.5.7
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
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +0 -0
- data/README.md +60 -24
- data/Rakefile +1 -1
- data/certs/razum2um.pem +21 -0
- data/features/controller_nested_schema_scaffolding.feature +5 -9
- data/features/controller_schema_scaffolding.feature +5 -9
- data/features/html_generation.feature +1 -1
- data/features/minitest.feature +140 -0
- data/features/multidomain_support.feature +1 -1
- data/features/partials.feature +3 -3
- data/features/request_nested_schema_scaffolding.feature +3 -3
- data/features/request_schema_scaffolding.feature +2 -2
- data/features/schema_suffixes.feature +4 -4
- data/features/step_definitions/additional_cli_steps.rb +9 -0
- data/features/support/env.rb +1 -1
- data/features/test_endpoint.feature +5 -5
- data/lib/lurker.rb +15 -0
- data/lib/lurker/cli.rb +2 -3
- data/lib/lurker/presenters/endpoint_presenter.rb +10 -4
- data/lib/lurker/request.rb +41 -0
- data/lib/lurker/response.rb +16 -0
- data/lib/lurker/schema.rb +0 -8
- data/lib/lurker/service.rb +2 -2
- data/lib/lurker/spec_helper.rb +2 -0
- data/lib/lurker/spec_helper/rails.rb +40 -0
- data/lib/lurker/spec_helper/rspec.rb +66 -0
- data/lib/lurker/spy.rb +88 -0
- data/lib/lurker/version.rb +1 -1
- data/lurker.gemspec +12 -9
- data/templates/generate_stuff.rb +29 -2
- data/templates/lurker_app.rb +27 -4
- data/templates/rails32_http_patch_support.rb +125 -0
- metadata +119 -57
- metadata.gz.sig +3 -0
- checksums.yaml.gz.asc +0 -12
- data.tar.gz.asc +0 -12
- data/lib/lurker/controller_spec_watcher.rb +0 -70
- data/lib/lurker/request_spec_watcher.rb +0 -80
- data/lib/lurker/spec_watcher.rb +0 -124
- metadata.gz.asc +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0812edbd0dea8fa5b7e25895f2247af7ae966e4c
|
4
|
+
data.tar.gz: 08abda5c9954e5e59554deb6ca9e38db84bbb71a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53ba7f03739d9b9f7dc35f3a0b727122677b2724699cf7bda2697d00f49d448317e53414fe99895ffd4283b93172e8c4141bf832320b1c80f1b42bd0eaa64d0c
|
7
|
+
data.tar.gz: 4531e95b5c5a0bcdfd632f614c8c908b40304686028c11ae4f23b4126ab0fe921c12133fd51d735df560b7f2d5b62f4bad705d73916846a47b374103b7996e33
|
checksums.yaml.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<H�;"y���ϊ����ר�h�E3eL�d�8��&���wl�@��,M��D��9������1���l 4[d��T��\�����[���.Yd����Dž�-;���ZQ�BC����v�(��&��X�-sֱ�������ω������t�,>��Ʒ$�@�J��{����Aj{� ��V����J�/�} s������>E�8�.��O�Q5���NՔ��X�Y��,W���Āg>u��W������`
|
data.tar.gz.sig
ADDED
Binary file
|
data/README.md
CHANGED
@@ -10,19 +10,53 @@ Works on Rails 3.2, 4.0, 4.1 & Ruby 1.9.3, 2.0.0, 2.1.1.
|
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
13
|
-
Add
|
13
|
+
Add my public key:
|
14
|
+
|
15
|
+
gem cert --add <(curl -Ls https://raw.github.com/razum2um/lurker/master/certs/razum2um.pem)
|
16
|
+
|
17
|
+
$ gem install lurker # without key
|
18
|
+
$ gem install lurker -P HighSecurity # secure, with key added
|
19
|
+
|
20
|
+
Or this line to your application's Gemfile:
|
14
21
|
|
15
22
|
gem 'lurker'
|
16
23
|
|
24
|
+
Inject into `test_helper.rb` or `spec_helper.rb`:
|
25
|
+
|
26
|
+
require 'lurker/spec_helper'
|
27
|
+
|
17
28
|
## Usage
|
18
29
|
|
19
|
-
|
30
|
+
Wrap your intergation test code, which does request like this
|
31
|
+
|
32
|
+
Lurker::Spy.on do
|
33
|
+
get "/api/v1/users.json"
|
34
|
+
end
|
35
|
+
|
36
|
+
And run the specs and commit your schemas. That's all, easy!
|
37
|
+
|
38
|
+
## RSpec usage
|
39
|
+
|
40
|
+
Write your RSpec [controller][rspec_controller_spec] or [request][rspec_request_spec] specs as usual,
|
20
41
|
but add `:lurker` mark (like documented [controller example][controler_spec_example] or [request spec example][request_spec_example]).
|
21
42
|
|
22
|
-
|
23
|
-
|
43
|
+
it "lists users", :lurker do
|
44
|
+
get "/api/v1/users.json"
|
45
|
+
end
|
46
|
+
|
47
|
+
## Minitest usage
|
48
|
+
|
49
|
+
You can use [minitest-around][minitest_around] to wrap your test classes like this:
|
50
|
+
|
51
|
+
class DestroyRepoTest < ActionDispatch::IntegrationTest
|
52
|
+
def around(&block)
|
53
|
+
Lurker::Spy.on(&block)
|
54
|
+
end
|
55
|
+
end
|
24
56
|
|
25
|
-
|
57
|
+
You also can wrap any block with api requests [manually][minitest_example].
|
58
|
+
|
59
|
+
## Schemas
|
26
60
|
|
27
61
|
Please, commit your files under `Rails.root/lurker` directory.
|
28
62
|
Feel free to edit them according to [json-schema][json_schema] standart.
|
@@ -55,6 +89,20 @@ Let's run your `rails s` and visit [http://localhost:3000/lurker/](http://localh
|
|
55
89
|
|
56
90
|
Now, you can test your API on-line (for real)
|
57
91
|
|
92
|
+
## [Demo application][demo_app3]
|
93
|
+
|
94
|
+
You can clone the repo & run `rake build_example_docs && cd tmp/lurker_app && bin/rails s`
|
95
|
+
to get your running demo.
|
96
|
+
|
97
|
+
Lurker supports multiple domains (usually `staging` and `production`) and can be deployed
|
98
|
+
statically everywhere as well as be served by current `Rails` instance.
|
99
|
+
|
100
|
+
For example:
|
101
|
+
|
102
|
+
- [Github Pages][demo_app3] is deployed statically; no api endpoint
|
103
|
+
- [Custom domain][demo_app2] html deployed under nginx; passenger serves demo api production endpoint
|
104
|
+
- [Heroku][demo_app] html is served by unicorn as well as staging api endpoint in `Sandbox` mode
|
105
|
+
|
58
106
|
## Features
|
59
107
|
|
60
108
|
- [Autoscaffolding for non-covered API endpoints][controler_spec_example]
|
@@ -72,6 +120,7 @@ Now, you can test your API on-line (for real)
|
|
72
120
|
- JSON-Schema draft-v4 support
|
73
121
|
- Static site deploy and milti-domain support
|
74
122
|
- Builtin Rack middlware `Lurker::Server.to_rack` serves cached digested assets
|
123
|
+
- [RSpec][failed_spec_example] & [Minitest][minitest_example] support
|
75
124
|
|
76
125
|
## Token authentication with sandbox
|
77
126
|
|
@@ -90,20 +139,6 @@ are increasing notwithstanding ROLLBACK is called. As such:
|
|
90
139
|
- ensure the same token to be accepted on your demo application
|
91
140
|
- insert `Lurker::Sandbox` and the recorded examples should be ok to submit again
|
92
141
|
|
93
|
-
## [Demo application][demo_app3]
|
94
|
-
|
95
|
-
You can clone the repo & run `rake build_example_docs && cd tmp/lurker_app && bin/rails s`
|
96
|
-
to get your running demo.
|
97
|
-
|
98
|
-
Lurker supports multiple domains (usually `staging` and `production`) and can be deployed
|
99
|
-
statically everywhere as well as be served by current `Rails` instance.
|
100
|
-
|
101
|
-
For example:
|
102
|
-
|
103
|
-
- [Github Pages][demo_app3] is deployed statically; no api endpoint
|
104
|
-
- [Custom domain][demo_app2] html deployed under nginx; passenger serves demo api production endpoint
|
105
|
-
- [Heroku][demo_app] html is served by unicorn as well as staging api endpoint in `Sandbox` mode
|
106
|
-
|
107
142
|
## Contributions
|
108
143
|
|
109
144
|
[![Code Climate][CC img]][Code Climate]
|
@@ -140,7 +175,7 @@ so there are `<label htmlFor` instead of `<label for>` and `<div className` inst
|
|
140
175
|
|
141
176
|
Sponsored by [Evil Martians][evil_martians], thanks!
|
142
177
|
|
143
|
-
This gem is quite opinionated and relies on rails
|
178
|
+
This gem is quite opinionated and relies on rails - if you're
|
144
179
|
interested in anything else, please take a look at [api_taster][api_taster] or [fdoc][fdoc],
|
145
180
|
This gem is heavily inspirated by them. Thanks, @square & @fredwu
|
146
181
|
|
@@ -154,16 +189,16 @@ Also thanks to
|
|
154
189
|
[hljs]: http://highlightjs.org/
|
155
190
|
[waffle]: https://waffle.io/razum2um/lurker
|
156
191
|
[gh_api]: https://developer.github.com/v3/meta/
|
157
|
-
[rspec]: https://github.com/rspec/rspec-rails
|
158
192
|
[api_taster]: https://github.com/fredwu/api_taster
|
159
193
|
[reactjs]: http://facebook.github.io/react/
|
160
194
|
[fdoc]: https://github.com/square/fdoc
|
161
|
-
[rspec_controller_spec]: https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs
|
162
|
-
[rspec_request_spec]: https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec
|
163
195
|
[json_schema]: http://json-schema.org/
|
164
196
|
[json_schema_example]: http://json-schema.org/example2.html
|
165
197
|
[json_schema_book]: http://spacetelescope.github.io/understanding-json-schema/
|
166
198
|
[evil_martians]: http://evilmartians.com/
|
199
|
+
[rspec_controller_spec]: https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs
|
200
|
+
[rspec_request_spec]: https://www.relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec
|
201
|
+
[minitest_around]: https://github.com/splattael/minitest-around
|
167
202
|
|
168
203
|
[failed_spec_example]: https://www.relishapp.com/razum2um/lurker/docs/test-endpoint
|
169
204
|
[controler_spec_example]: https://www.relishapp.com/razum2um/lurker/docs/controller-schema-scaffolding
|
@@ -172,12 +207,13 @@ Also thanks to
|
|
172
207
|
[html_generation_example]: https://www.relishapp.com/razum2um/lurker/docs/html-generation
|
173
208
|
[partial_example]: https://www.relishapp.com/razum2um/lurker/docs/partials
|
174
209
|
[suffixes_example]: https://www.relishapp.com/razum2um/lurker/docs/request-schema-suffixes
|
210
|
+
[minitest_example]: https://www.relishapp.com/razum2um/lurker/docs/minitest
|
175
211
|
|
176
212
|
[demo_app]: http://lurker-app.herokuapp.com
|
177
213
|
[demo_app2]: http://lurker.razum2um.me
|
178
214
|
[demo_app3]: http://razum2um.github.io/lurker/
|
179
215
|
[demo_live]: http://lurker.razum2um.me/lurker/api/v1/users-POST.html
|
180
|
-
[pdf_example]: http://razum2um.github.io/lurker/
|
216
|
+
[pdf_example]: http://razum2um.github.io/lurker/Lurker%20Demo%20Application.pdf
|
181
217
|
[partial_example_demo]: http://razum2um.github.io/lurker/api/v1/users/__user_id/repos-POST.html
|
182
218
|
|
183
219
|
[Gem Version]: https://rubygems.org/gems/lurker
|
data/Rakefile
CHANGED
@@ -302,7 +302,7 @@ task :publish do
|
|
302
302
|
system "git tag v#{version}"
|
303
303
|
system "relish versions:add razum2um/lurker:#{version}"
|
304
304
|
system "relish push razum2um/lurker:#{version}"
|
305
|
-
system "gem build lurker.gemspec
|
305
|
+
system "gem build lurker.gemspec"
|
306
306
|
system "git push --tags"
|
307
307
|
system "gem push lurker-#{version}.gem"
|
308
308
|
end
|
data/certs/razum2um.pem
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApib2tv
|
3
|
+
di52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
|
4
|
+
b20wHhcNMTQwNTIwMjAyOTAyWhcNMTUwNTIwMjAyOTAyWjBBMRMwEQYDVQQDDApi
|
5
|
+
b2tvdi52bGFkMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
|
6
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCibrb/aiZX3kWo
|
7
|
+
Fmzo3gvGBFS9N18Q5rp9UTJRc4KxZQOay2WcgLjy1oU61r2Urjz3VDT4sg/yw3N3
|
8
|
+
YXIPqSTRl+OPIaafe45TVpF4mtMSsc1Gm/O3Sfoz6URiMd9iDtc2sTpaMgatL4pV
|
9
|
+
EExER9emjrmElRFknJD65E3gVDX7KXvrZYYAScJR33DADIGUgpuyHm29S7G/4WAy
|
10
|
+
ol6XfmPx+x5rM49QytGSNCQDYQ3SMMCo9wKkEm3Zcx0O4qhO8INevl/mvkAWLhOA
|
11
|
+
+0qldtuUx9wbBQ0D0wVR8LTafqWrIUHQjWXqrhWBqXhYeR3jj5aehBhpPFclHuKU
|
12
|
+
5GeILZrFAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
13
|
+
BBSiidH2CEJmkza+NBBJNLcnzQX57TAfBgNVHREEGDAWgRRib2tvdi52bGFkQGdt
|
14
|
+
YWlsLmNvbTAfBgNVHRIEGDAWgRRib2tvdi52bGFkQGdtYWlsLmNvbTANBgkqhkiG
|
15
|
+
9w0BAQUFAAOCAQEAVEyF63kQT9HKm3YIw1WzLvuOMvEUThzBomMMsTp9CGXWvem6
|
16
|
+
wZdMhxykwk1lga0OwsCn+wr1tWZ/cNeWqGSY00vTfLWdriK60xuRW7zT1Z5tmxbD
|
17
|
+
dq2ULdhII/qCFQlzDB/+IptO1rJLzfxTckoArmeYtkBV6LaVd7wpaRZnw0Apm93e
|
18
|
+
ph03YddPDbB34xTivvu4d6BBbKGxj/YN+1NLD9rMi6FspgcA4P1UlmKqyCluTbZj
|
19
|
+
vzKbYclpJ7gENr/xiTjGqA/Md3zJMzmsFrzUXt4RVmo5SaCyZjC6gFfhSr+PODc7
|
20
|
+
ZaSbckvH/+m4boAsg0JkGGFcS3j5fgNmdwgA1A==
|
21
|
+
-----END CERTIFICATE-----
|
@@ -18,7 +18,7 @@ Feature: controller nested schema scaffolding
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "lists all the repos of the user" do
|
21
|
-
get :index, user_id: user.id, limit: 1
|
21
|
+
get :index, user_id: user.id, limit: 1, format: 'json'
|
22
22
|
expect(response).to be_success
|
23
23
|
expect(JSON.parse(response.body).size).to eq 1
|
24
24
|
end
|
@@ -39,10 +39,6 @@ Feature: controller nested schema scaffolding
|
|
39
39
|
additionalProperties: false
|
40
40
|
required: []
|
41
41
|
properties:
|
42
|
-
user_id:
|
43
|
-
description: ''
|
44
|
-
type: integer
|
45
|
-
example: 1
|
46
42
|
limit:
|
47
43
|
description: ''
|
48
44
|
type: integer
|
@@ -73,13 +69,13 @@ Feature: controller nested schema scaffolding
|
|
73
69
|
example: 1
|
74
70
|
extensions:
|
75
71
|
method: GET
|
76
|
-
path_info: "/api/v1/users/1/repos"
|
72
|
+
path_info: "/api/v1/users/1/repos.json"
|
77
73
|
path_params:
|
78
|
-
action: index
|
79
|
-
controller: api/v1/repos
|
80
74
|
user_id: '1'
|
75
|
+
controller: api/v1/repos
|
76
|
+
action: index
|
81
77
|
query_params:
|
82
|
-
limit:
|
78
|
+
limit: 1
|
83
79
|
suffix: ''
|
84
80
|
|
85
81
|
"""
|
@@ -17,7 +17,7 @@ Feature: controller schema scaffolding
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "shows user" do
|
20
|
-
get :show, id: user.id
|
20
|
+
get :show, id: user.id, format: 'json'
|
21
21
|
expect(response).to be_success
|
22
22
|
end
|
23
23
|
end
|
@@ -36,11 +36,7 @@ Feature: controller schema scaffolding
|
|
36
36
|
type: object
|
37
37
|
additionalProperties: false
|
38
38
|
required: []
|
39
|
-
properties:
|
40
|
-
id:
|
41
|
-
description: ''
|
42
|
-
type: integer
|
43
|
-
example: 1
|
39
|
+
properties: {}
|
44
40
|
responseCodes:
|
45
41
|
- status: 200
|
46
42
|
successful: true
|
@@ -61,11 +57,11 @@ Feature: controller schema scaffolding
|
|
61
57
|
example: razum2um
|
62
58
|
extensions:
|
63
59
|
method: GET
|
64
|
-
path_info: "/api/v1/users/1"
|
60
|
+
path_info: "/api/v1/users/1.json"
|
65
61
|
path_params:
|
66
|
-
action: show
|
67
|
-
controller: api/v1/users
|
68
62
|
id: '1'
|
63
|
+
controller: api/v1/users
|
64
|
+
action: show
|
69
65
|
suffix: ''
|
70
66
|
|
71
67
|
"""
|
@@ -0,0 +1,140 @@
|
|
1
|
+
Feature: minitest
|
2
|
+
|
3
|
+
When you're testing your api with `minitest` and
|
4
|
+
`ActionDispatch::IntegrationTest`: you can
|
5
|
+
simply wrap your code in `Lurker::Spy.on do ... end`
|
6
|
+
|
7
|
+
Scenario: scaffold a json schema for a "repos/destroy" in minitest
|
8
|
+
Given a file named "test/integration/destroy_repo_test.rb" with:
|
9
|
+
"""ruby
|
10
|
+
require_relative '../test_helper'
|
11
|
+
|
12
|
+
class DestroyRepoTest < ActionDispatch::IntegrationTest
|
13
|
+
def test_destruction
|
14
|
+
user = User.where(name: 'razum2um').first_or_create!
|
15
|
+
repo = user.repos.first_or_create!(name: 'lurker')
|
16
|
+
|
17
|
+
assert_equal 1, Repo.count
|
18
|
+
|
19
|
+
Lurker::Spy.on do
|
20
|
+
delete "/api/v1/users/#{user.id}/repos/#{repo.id}.json"
|
21
|
+
end
|
22
|
+
|
23
|
+
assert_equal 200, status
|
24
|
+
assert_equal 0, Repo.count
|
25
|
+
end
|
26
|
+
end
|
27
|
+
"""
|
28
|
+
|
29
|
+
When I run `ruby test/integration/destroy_repo_test.rb`
|
30
|
+
Then the output should contain unescaped these lines:
|
31
|
+
"""
|
32
|
+
1 (runs|tests), 3 assertions, 0 failures, 0 errors, 0 skips
|
33
|
+
"""
|
34
|
+
Then a file named "lurker/api/v1/users/__user_id/repos/__id-DELETE.json.yml" should exist
|
35
|
+
Then the file "lurker/api/v1/users/__user_id/repos/__id-DELETE.json.yml" should contain exactly:
|
36
|
+
"""yml
|
37
|
+
---
|
38
|
+
description: repo descruction
|
39
|
+
prefix: repos management
|
40
|
+
requestParameters:
|
41
|
+
description: ''
|
42
|
+
type: object
|
43
|
+
additionalProperties: false
|
44
|
+
required: []
|
45
|
+
properties: {}
|
46
|
+
responseCodes:
|
47
|
+
- status: 200
|
48
|
+
successful: true
|
49
|
+
description: ''
|
50
|
+
responseParameters:
|
51
|
+
description: ''
|
52
|
+
type: object
|
53
|
+
additionalProperties: false
|
54
|
+
required: []
|
55
|
+
properties: {}
|
56
|
+
extensions:
|
57
|
+
method: DELETE
|
58
|
+
path_info: "/api/v1/users/1/repos/1.json"
|
59
|
+
path_params:
|
60
|
+
action: destroy
|
61
|
+
controller: api/v1/repos
|
62
|
+
user_id: '1'
|
63
|
+
id: '1'
|
64
|
+
suffix: ''
|
65
|
+
|
66
|
+
"""
|
67
|
+
|
68
|
+
Scenario: json schema tests "users/update" in minitest
|
69
|
+
Given a file named "lurker/api/v1/users/__id-PATCH.json.yml" with:
|
70
|
+
"""yml
|
71
|
+
---
|
72
|
+
prefix: 'users management'
|
73
|
+
description: 'user updating'
|
74
|
+
requestParameters:
|
75
|
+
properties:
|
76
|
+
id:
|
77
|
+
type: integer
|
78
|
+
example: 1
|
79
|
+
user:
|
80
|
+
type: object
|
81
|
+
properties:
|
82
|
+
name:
|
83
|
+
type: string
|
84
|
+
example: Bob
|
85
|
+
responseCodes:
|
86
|
+
- status: 400
|
87
|
+
successful: true
|
88
|
+
description: ''
|
89
|
+
- status: 200
|
90
|
+
successful: true
|
91
|
+
description: ''
|
92
|
+
responseParameters:
|
93
|
+
properties:
|
94
|
+
id:
|
95
|
+
type: integer
|
96
|
+
example: 1
|
97
|
+
name:
|
98
|
+
type: string
|
99
|
+
example: Bob
|
100
|
+
extensions:
|
101
|
+
path_info: "/api/v1/users/1"
|
102
|
+
method: PATCH
|
103
|
+
suffix: ''
|
104
|
+
path_params:
|
105
|
+
action: update
|
106
|
+
controller: api/v1/users
|
107
|
+
id: 1
|
108
|
+
"""
|
109
|
+
|
110
|
+
And a file named "test/integration/update_user_test.rb" with:
|
111
|
+
"""ruby
|
112
|
+
require_relative '../test_helper'
|
113
|
+
|
114
|
+
class UpdateUserTest < ActionDispatch::IntegrationTest
|
115
|
+
def test_updating
|
116
|
+
user = User.where(name: 'razum2um').first_or_create!
|
117
|
+
assert_equal 1, User.count
|
118
|
+
|
119
|
+
Lurker::Spy.on do
|
120
|
+
patch "/api/v1/users/#{user.id}.json", user: { name: '' }
|
121
|
+
end
|
122
|
+
|
123
|
+
assert_equal 200, status
|
124
|
+
assert_equal 'John', user.reload.name
|
125
|
+
end
|
126
|
+
end
|
127
|
+
"""
|
128
|
+
|
129
|
+
When I run `ruby test/integration/update_user_test.rb`
|
130
|
+
Then the output should contain failures:
|
131
|
+
"""
|
132
|
+
Lurker::ValidationError:
|
133
|
+
Response
|
134
|
+
The property '#/' contains additional properties ["errors"]
|
135
|
+
|
136
|
+
"""
|
137
|
+
And the output should contain unescaped these lines:
|
138
|
+
"""
|
139
|
+
1 (runs|tests), 1 assertions, 0 failures, 1 errors, 0 skips
|
140
|
+
"""
|
data/features/partials.feature
CHANGED
@@ -42,7 +42,7 @@ Feature: partials
|
|
42
42
|
requestParameters:
|
43
43
|
properties:
|
44
44
|
user_id:
|
45
|
-
type:
|
45
|
+
type: string
|
46
46
|
example: 1
|
47
47
|
repo:
|
48
48
|
properties:
|
@@ -56,7 +56,7 @@ Feature: partials
|
|
56
56
|
$ref: '../../../../definitions/repo.json#/'
|
57
57
|
extensions:
|
58
58
|
method: POST
|
59
|
-
path_info: "/api/v1/users/1/repos"
|
59
|
+
path_info: "/api/v1/users/1/repos.json"
|
60
60
|
path_params:
|
61
61
|
action: create
|
62
62
|
controller: api/v1/repos
|
@@ -75,7 +75,7 @@ Feature: partials
|
|
75
75
|
|
76
76
|
it "creates a new repo" do
|
77
77
|
expect {
|
78
|
-
post "api/v1/users/#{user.id}/repos", repo: { name: 'new-gem' }
|
78
|
+
post "api/v1/users/#{user.id}/repos.json", repo: { name: 'new-gem' }
|
79
79
|
expect(response).to be_success
|
80
80
|
expect(JSON.parse(response.body)['user']).to eq JSON.parse(user.to_json)
|
81
81
|
}.to change { Repo.count } .by(1)
|