contracts_api_test 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.
Files changed (49) hide show
  1. data/.gitignore +20 -0
  2. data/.rspec +2 -0
  3. data/Gemfile +4 -0
  4. data/Guardfile +8 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +117 -0
  7. data/Rakefile +7 -0
  8. data/TODO.md +19 -0
  9. data/contracts.gemspec +29 -0
  10. data/lib/contracts.rb +46 -0
  11. data/lib/contracts/contract.rb +18 -0
  12. data/lib/contracts/extensions.rb +18 -0
  13. data/lib/contracts/instantiated_contract.rb +63 -0
  14. data/lib/contracts/rake_task.rb +75 -0
  15. data/lib/contracts/request.rb +62 -0
  16. data/lib/contracts/response.rb +27 -0
  17. data/lib/contracts/response_adapter.rb +24 -0
  18. data/lib/contracts/version.rb +3 -0
  19. data/lib/json-generator.rb +1 -0
  20. data/lib/json/generator.rb +18 -0
  21. data/lib/json/generator/array_attribute.rb +11 -0
  22. data/lib/json/generator/attribute_factory.rb +18 -0
  23. data/lib/json/generator/basic_attribute.rb +17 -0
  24. data/lib/json/generator/boolean_attribute.rb +7 -0
  25. data/lib/json/generator/dereferencer.rb +22 -0
  26. data/lib/json/generator/empty_attribute.rb +7 -0
  27. data/lib/json/generator/integer_attribute.rb +7 -0
  28. data/lib/json/generator/object_attribute.rb +18 -0
  29. data/lib/json/generator/string_attribute.rb +7 -0
  30. data/spec/contracts/contract_spec.rb +50 -0
  31. data/spec/contracts/contracts_spec.rb +77 -0
  32. data/spec/contracts/extensions_spec.rb +34 -0
  33. data/spec/contracts/instantiated_contract_spec.rb +224 -0
  34. data/spec/contracts/request_spec.rb +73 -0
  35. data/spec/contracts/response_adapter_spec.rb +27 -0
  36. data/spec/contracts/response_spec.rb +114 -0
  37. data/spec/data/contract.json +25 -0
  38. data/spec/json/generator/array_attribute_spec.rb +42 -0
  39. data/spec/json/generator/attribute_factory_spec.rb +72 -0
  40. data/spec/json/generator/basic_attribute_spec.rb +41 -0
  41. data/spec/json/generator/boolean_attribute_spec.rb +17 -0
  42. data/spec/json/generator/dereferencer_spec.rb +72 -0
  43. data/spec/json/generator/empty_attribute_spec.rb +17 -0
  44. data/spec/json/generator/integer_attribute_spec.rb +17 -0
  45. data/spec/json/generator/object_attribute_spec.rb +100 -0
  46. data/spec/json/generator/string_attribute_spec.rb +17 -0
  47. data/spec/json/generator_spec.rb +20 -0
  48. data/spec/spec_helper.rb +1 -0
  49. metadata +259 -0
@@ -0,0 +1,17 @@
1
+ module JSON
2
+ module Generator
3
+ describe EmptyAttribute do
4
+ it 'should be a BasicAttribute' do
5
+ described_class.new({}).should be_kind_of(BasicAttribute)
6
+ end
7
+
8
+ describe '#generate' do
9
+ context 'without a default value' do
10
+ it 'should return nil' do
11
+ described_class.new({}).generate.should be_nil
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module JSON
2
+ module Generator
3
+ describe IntegerAttribute do
4
+ it 'should be a BasicAttribute' do
5
+ described_class.new(nil).should be_kind_of(BasicAttribute)
6
+ end
7
+
8
+ describe '#generate' do
9
+ context 'without a default value' do
10
+ it 'should return the default value' do
11
+ described_class.new({'type' => 'integer'}).generate.should == 0
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,100 @@
1
+ module JSON
2
+ module Generator
3
+ describe ObjectAttribute do
4
+ describe '#generate' do
5
+ context 'when not required' do
6
+ let(:attributes) { {'type' => 'object', 'properties' => {}} }
7
+
8
+ it 'should return nil' do
9
+ described_class.new(attributes).generate.should be_nil
10
+ end
11
+ end
12
+
13
+ context 'without properties' do
14
+ let(:attributes) { {'type' => 'object', 'required' => true} }
15
+
16
+ it 'should generate an empty object' do
17
+ described_class.new(attributes).generate.should == {}
18
+ end
19
+ end
20
+
21
+ context 'with empty properties' do
22
+ let(:attributes) do
23
+ {
24
+ 'type' => 'object',
25
+ 'properties' => {},
26
+ 'required' => true
27
+ }
28
+ end
29
+
30
+ it 'should generate an empty object' do
31
+ described_class.new(attributes).generate.should == {}
32
+ end
33
+ end
34
+
35
+ context 'with one property' do
36
+ let(:attributes) do
37
+ {
38
+ 'type' => 'object',
39
+ 'properties' => {
40
+ 'foo' => property_attributes
41
+ },
42
+ 'required' => true
43
+ }
44
+ end
45
+ let(:property_attributes) { double('property attributes') }
46
+ let(:property) { double('property', :required? => true) }
47
+ let(:generated_property) { double('generated property') }
48
+
49
+ it 'should generate an object with one attribute' do
50
+ AttributeFactory.should_receive(:create).with(property_attributes).and_return(property)
51
+ property.should_receive(:generate).and_return(generated_property)
52
+
53
+ described_class.new(attributes).generate.should == {
54
+ 'foo' => generated_property
55
+ }
56
+ end
57
+ end
58
+
59
+ context 'with many properties' do
60
+ let(:attributes) do
61
+ {
62
+ 'type' => 'object',
63
+ 'properties' => {
64
+ 'foo' => foo_attributes,
65
+ 'bar' => bar_attributes,
66
+ 'not_required' => not_required_attributes
67
+ },
68
+ 'required' => true
69
+ }
70
+ end
71
+ let(:foo_attributes) { double('foo attributes') }
72
+ let(:foo_property) { double('foo property', :required? => true) }
73
+ let(:generated_foo) { double('generated foo') }
74
+
75
+ let(:bar_attributes) { double('bar attributes') }
76
+ let(:bar_property) { double('bar property', :required? => true) }
77
+ let(:generated_bar) { double('generated bar') }
78
+
79
+ let(:not_required_attributes) { double('not required attributes') }
80
+ let(:not_required_property) { double('not required property', :required? => false) }
81
+
82
+ it 'should generate an object with many attributes' do
83
+ AttributeFactory.should_receive(:create).with(foo_attributes).and_return(foo_property)
84
+ foo_property.should_receive(:generate).and_return(generated_foo)
85
+
86
+ AttributeFactory.should_receive(:create).with(bar_attributes).and_return(bar_property)
87
+ bar_property.should_receive(:generate).and_return(generated_bar)
88
+
89
+ AttributeFactory.should_receive(:create).with(not_required_attributes).and_return(not_required_property)
90
+
91
+ described_class.new(attributes).generate.should == {
92
+ 'foo' => generated_foo,
93
+ 'bar' => generated_bar
94
+ }
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,17 @@
1
+ module JSON
2
+ module Generator
3
+ describe StringAttribute do
4
+ it 'should be a BasicAttribute' do
5
+ described_class.new(nil).should be_kind_of(BasicAttribute)
6
+ end
7
+
8
+ describe '#generate' do
9
+ context 'without a default value' do
10
+ it 'should return the default value' do
11
+ described_class.new({'type' => 'string'}).generate.should == 'bar'
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module JSON
2
+ describe Generator do
3
+ describe '.generate' do
4
+ let(:attribute) { double('attribute') }
5
+ let(:schema) { double('schema') }
6
+ let(:dereferenced_schema) { double('dereferenced schema') }
7
+ let(:generated_json) { double('generated json') }
8
+
9
+ it 'should dereference a given schema and generate valid JSON for it' do
10
+ JSON::Generator::Dereferencer.should_receive(:dereference).
11
+ with(schema).
12
+ and_return(dereferenced_schema)
13
+ Generator::AttributeFactory.should_receive(:create).with(dereferenced_schema).and_return(attribute)
14
+ attribute.should_receive(:generate).and_return(generated_json)
15
+
16
+ described_class.generate(schema).should == generated_json
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ require 'contracts'
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: contracts_api_test
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Abril Midia
9
+ - ThoughtWorks
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-05-23 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: webmock
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: json
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: json-schema
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: hash-deep-merge
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: httparty
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :runtime
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: addressable
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: rspec
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: guard-rspec
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ description: Consumer-Driven Contracts
160
+ email:
161
+ - vejasp-dev@abril.com.br
162
+ - abril_vejasp_dev@thoughtworks.com
163
+ executables: []
164
+ extensions: []
165
+ extra_rdoc_files: []
166
+ files:
167
+ - .gitignore
168
+ - .rspec
169
+ - Gemfile
170
+ - Guardfile
171
+ - LICENSE.txt
172
+ - README.md
173
+ - Rakefile
174
+ - TODO.md
175
+ - contracts.gemspec
176
+ - lib/contracts.rb
177
+ - lib/contracts/contract.rb
178
+ - lib/contracts/extensions.rb
179
+ - lib/contracts/instantiated_contract.rb
180
+ - lib/contracts/rake_task.rb
181
+ - lib/contracts/request.rb
182
+ - lib/contracts/response.rb
183
+ - lib/contracts/response_adapter.rb
184
+ - lib/contracts/version.rb
185
+ - lib/json-generator.rb
186
+ - lib/json/generator.rb
187
+ - lib/json/generator/array_attribute.rb
188
+ - lib/json/generator/attribute_factory.rb
189
+ - lib/json/generator/basic_attribute.rb
190
+ - lib/json/generator/boolean_attribute.rb
191
+ - lib/json/generator/dereferencer.rb
192
+ - lib/json/generator/empty_attribute.rb
193
+ - lib/json/generator/integer_attribute.rb
194
+ - lib/json/generator/object_attribute.rb
195
+ - lib/json/generator/string_attribute.rb
196
+ - spec/contracts/contract_spec.rb
197
+ - spec/contracts/contracts_spec.rb
198
+ - spec/contracts/extensions_spec.rb
199
+ - spec/contracts/instantiated_contract_spec.rb
200
+ - spec/contracts/request_spec.rb
201
+ - spec/contracts/response_adapter_spec.rb
202
+ - spec/contracts/response_spec.rb
203
+ - spec/data/contract.json
204
+ - spec/json/generator/array_attribute_spec.rb
205
+ - spec/json/generator/attribute_factory_spec.rb
206
+ - spec/json/generator/basic_attribute_spec.rb
207
+ - spec/json/generator/boolean_attribute_spec.rb
208
+ - spec/json/generator/dereferencer_spec.rb
209
+ - spec/json/generator/empty_attribute_spec.rb
210
+ - spec/json/generator/integer_attribute_spec.rb
211
+ - spec/json/generator/object_attribute_spec.rb
212
+ - spec/json/generator/string_attribute_spec.rb
213
+ - spec/json/generator_spec.rb
214
+ - spec/spec_helper.rb
215
+ homepage:
216
+ licenses: []
217
+ post_install_message:
218
+ rdoc_options: []
219
+ require_paths:
220
+ - lib
221
+ required_ruby_version: !ruby/object:Gem::Requirement
222
+ none: false
223
+ requirements:
224
+ - - ! '>='
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ required_rubygems_version: !ruby/object:Gem::Requirement
228
+ none: false
229
+ requirements:
230
+ - - ! '>='
231
+ - !ruby/object:Gem::Version
232
+ version: '0'
233
+ requirements: []
234
+ rubyforge_project:
235
+ rubygems_version: 1.8.24
236
+ signing_key:
237
+ specification_version: 3
238
+ summary: Consumer-Driven Contracts Gem
239
+ test_files:
240
+ - spec/contracts/contract_spec.rb
241
+ - spec/contracts/contracts_spec.rb
242
+ - spec/contracts/extensions_spec.rb
243
+ - spec/contracts/instantiated_contract_spec.rb
244
+ - spec/contracts/request_spec.rb
245
+ - spec/contracts/response_adapter_spec.rb
246
+ - spec/contracts/response_spec.rb
247
+ - spec/data/contract.json
248
+ - spec/json/generator/array_attribute_spec.rb
249
+ - spec/json/generator/attribute_factory_spec.rb
250
+ - spec/json/generator/basic_attribute_spec.rb
251
+ - spec/json/generator/boolean_attribute_spec.rb
252
+ - spec/json/generator/dereferencer_spec.rb
253
+ - spec/json/generator/empty_attribute_spec.rb
254
+ - spec/json/generator/integer_attribute_spec.rb
255
+ - spec/json/generator/object_attribute_spec.rb
256
+ - spec/json/generator/string_attribute_spec.rb
257
+ - spec/json/generator_spec.rb
258
+ - spec/spec_helper.rb
259
+ has_rdoc: