apipie-rails 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.
@@ -0,0 +1,127 @@
1
+ require 'spec_helper'
2
+ require "json-schema"
3
+
4
+ describe 'rake tasks' do
5
+ include_context "rake"
6
+
7
+ let(:doc_path) { "user_specified_doc_path" }
8
+
9
+ before do
10
+ Apipie.configuration.doc_path = doc_path
11
+ Apipie.configuration.swagger_suppress_warnings = true
12
+ allow(Apipie).to receive(:reload_documentation)
13
+ subject.invoke(*task_args)
14
+ end
15
+
16
+ describe 'static swagger specification files' do
17
+
18
+ after do
19
+ Dir["#{doc_output}*"].each { |static_file| FileUtils.rm_rf(static_file) }
20
+ end
21
+
22
+ let(:swagger_schema) do
23
+ File.read(File.join(File.dirname(__FILE__),"openapi_2_0_schema.json"))
24
+ end
25
+
26
+ let(:apidoc_swagger_json) do
27
+ # note: the filename ends with '_tmp' because this suffix is passed as a parameter to the rake task
28
+ File.read("#{doc_output}/schema_swagger_tmp.json")
29
+ end
30
+
31
+ let(:apidoc_swagger) do
32
+ JSON.parse(apidoc_swagger_json)
33
+ end
34
+
35
+ let(:doc_output) do
36
+ File.join(::Rails.root, doc_path, 'apidoc')
37
+ end
38
+
39
+ let(:ref_output) do
40
+ File.join(::Rails.root, doc_path, 'apidoc_ref')
41
+ end
42
+
43
+
44
+ def expect_param_def(http_method, path, param_name, field, value)
45
+ params = apidoc_swagger["paths"][path][http_method]["parameters"]
46
+ param = params.select {|p| p if p["name"]==param_name}[0]
47
+ expect(param[field]).to eq(value)
48
+ end
49
+
50
+
51
+ def body_param_def(http_method, path, param_name)
52
+ params = apidoc_swagger["paths"][path][http_method]["parameters"]
53
+ body = params.select {|p| p if p["name"]=="body"}[0]
54
+ schema_properties = body["schema"]["properties"]
55
+ # print JSON.pretty_generate(schema_properties)
56
+ param = (schema_properties.select {|k,v| v if k == param_name })[param_name]
57
+ # print JSON.pretty_generate(param)
58
+ param
59
+ end
60
+
61
+ def expect_body_param_def(http_method, path, param_name, field, value)
62
+ param = body_param_def(http_method, path, param_name)
63
+ expect(param[field]).to eq(value)
64
+ end
65
+
66
+
67
+ describe 'apipie:static_swagger_json[development,json,_tmp]' do
68
+ it "generates static swagger files for the default version of apipie docs" do
69
+ # print apidoc_swagger_json
70
+
71
+ expect(apidoc_swagger["info"]["title"]).to eq("Test app (params in:body)")
72
+ expect(apidoc_swagger["info"]["version"]).to eq("#{Apipie.configuration.default_version}")
73
+ end
74
+
75
+ it "includes expected values in the generated swagger file" do
76
+ expect_param_def("get", "/twitter_example/{id}", "screen_name", "in", "query")
77
+ expect_param_def("put", "/users/{id}", "id", "in", "path")
78
+ expect_body_param_def("put", "/users/{id}", "oauth", "type", "string")
79
+ expect_body_param_def("put", "/users/{id}", "user", "type", "object")
80
+
81
+ user = body_param_def("put", "/users/{id}", "user")
82
+ expect(user["properties"]["name"]["type"]).to eq("string")
83
+
84
+ expect_param_def("get", "/users/by_department", "department", "in", "query")
85
+ expect_param_def("get", "/users/by_department", "department", "enum",
86
+ ["finance", "operations", "sales", "marketing", "HR"])
87
+ end
88
+
89
+ it "generates a valid swagger file" do
90
+ # print apidoc_swagger_json
91
+ expect(JSON::Validator.validate(swagger_schema, apidoc_swagger_json)).to be_truthy
92
+ end
93
+ end
94
+
95
+ describe 'apipie:static_swagger_json[development,form_data,_tmp]' do
96
+ it "generates static swagger files for the default version of apipie docs" do
97
+ # print apidoc_swagger_json
98
+
99
+ expect(apidoc_swagger["info"]["title"]).to eq("Test app (params in:formData)")
100
+ expect(apidoc_swagger["info"]["version"]).to eq("#{Apipie.configuration.default_version}")
101
+
102
+ end
103
+
104
+ it "includes expected values in the generated swagger file" do
105
+ expect_param_def("get", "/twitter_example/{id}", "screen_name", "in", "query")
106
+ expect_param_def("put", "/users/{id}", "id", "in", "path")
107
+ expect_param_def("put", "/users/{id}", "oauth", "in", "formData")
108
+ expect_param_def("get", "/users/by_department", "department", "in", "query")
109
+ expect_param_def("get", "/users/by_department", "department", "enum",
110
+ ["finance", "operations", "sales", "marketing", "HR"])
111
+
112
+ end
113
+
114
+ it "generates a valid swagger file" do
115
+ # print apidoc_swagger_json
116
+ expect(JSON::Validator.validate(swagger_schema, apidoc_swagger_json)).to be_truthy
117
+ end
118
+ end
119
+
120
+ describe 'apipie:did_swagger_change[development,form_data,_tmp]' do
121
+ it "keeps a reference file" do
122
+ expect(Pathname(ref_output).children.count).to eq(2) # one file for each language
123
+ end
124
+ end
125
+ end
126
+
127
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apipie-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6
4
+ version: 0.5.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Pokorny
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-12-05 00:00:00.000000000 Z
12
+ date: 2018-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -123,6 +123,20 @@ dependencies:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: json-schema
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '2.8'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '2.8'
126
140
  description: Rails REST API documentation tool
127
141
  email:
128
142
  - pajkycz@gmail.com
@@ -210,6 +224,7 @@ files:
210
224
  - lib/apipie/routing.rb
211
225
  - lib/apipie/see_description.rb
212
226
  - lib/apipie/static_dispatcher.rb
227
+ - lib/apipie/swagger_generator.rb
213
228
  - lib/apipie/validator.rb
214
229
  - lib/apipie/version.rb
215
230
  - lib/generators/apipie/install/README
@@ -279,6 +294,8 @@ files:
279
294
  - spec/lib/param_group_spec.rb
280
295
  - spec/lib/rake_spec.rb
281
296
  - spec/lib/resource_description_spec.rb
297
+ - spec/lib/swagger/openapi_2_0_schema.json
298
+ - spec/lib/swagger/rake_swagger_spec.rb
282
299
  - spec/lib/validator_spec.rb
283
300
  - spec/lib/validators/array_validator_spec.rb
284
301
  - spec/spec_helper.rb
@@ -302,7 +319,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
302
319
  version: '0'
303
320
  requirements: []
304
321
  rubyforge_project:
305
- rubygems_version: 2.6.12
322
+ rubygems_version: 2.5.1
306
323
  signing_key:
307
324
  specification_version: 4
308
325
  summary: Rails REST API documentation tool
@@ -366,6 +383,8 @@ test_files:
366
383
  - spec/lib/param_group_spec.rb
367
384
  - spec/lib/rake_spec.rb
368
385
  - spec/lib/resource_description_spec.rb
386
+ - spec/lib/swagger/openapi_2_0_schema.json
387
+ - spec/lib/swagger/rake_swagger_spec.rb
369
388
  - spec/lib/validator_spec.rb
370
389
  - spec/lib/validators/array_validator_spec.rb
371
390
  - spec/spec_helper.rb