odata 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData::EntitySet do
4
+ let(:subject) { OData::EntitySet.new(options) }
5
+ let(:options) { {
6
+ container: 'DemoService', namespace: 'ODataDemo', name: 'Products',
7
+ type: 'Product'
8
+ } }
9
+
10
+ before(:example) do
11
+ OData::Service.open('http://services.odata.org/OData/OData.svc')
12
+ end
13
+
14
+ # Basic Instance Methods
15
+ it { expect(subject).to respond_to(:name, :type, :container, :namespace) }
16
+
17
+ it { expect(subject.name).to eq('Products') }
18
+ it { expect(subject.container).to eq('DemoService') }
19
+ it { expect(subject.namespace).to eq('ODataDemo') }
20
+ it { expect(subject.type).to eq('Product') }
21
+
22
+ describe '#each' do
23
+ it { expect(subject).to respond_to(:each) }
24
+ it { expect(lambda {
25
+ @counter = 0
26
+ subject.each {|entity| @counter += 1}
27
+ @counter
28
+ }.call).to eq(11) }
29
+ it { expect(lambda {
30
+ @entities = []
31
+ subject.each {|entity| @entities << entity}
32
+ @entities
33
+ }.call.shuffle.first).to be_a(OData::Entity) }
34
+ end
35
+
36
+ describe '#count' do
37
+ it { expect(subject).to respond_to(:count) }
38
+ it { expect(subject.count).to eq(11) }
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe OData::Entity do
4
+ let(:subject) { OData::Entity.new(options) }
5
+ let(:options) { {
6
+ type: 'ODataDemo.Product',
7
+ namespace: 'ODataDemo'
8
+ } }
9
+
10
+ it { expect(subject).to respond_to(:name, :type, :namespace) }
11
+
12
+ it { expect(subject.name).to eq('Product') }
13
+ it { expect(subject.type).to eq('ODataDemo.Product') }
14
+ it { expect(subject.namespace).to eq('ODataDemo') }
15
+
16
+ describe '.from_xml' do
17
+ let(:subject) { OData::Entity.from_xml(product_xml, options) }
18
+ let(:product_xml) {
19
+ document = ::Nokogiri::XML(File.open('spec/fixtures/sample_service/product_0.xml'))
20
+ document.remove_namespaces!
21
+ document.xpath('//entry').first
22
+ }
23
+
24
+ before(:example) do
25
+ OData::Service.open('http://services.odata.org/OData/OData.svc')
26
+ end
27
+
28
+ it { expect(OData::Entity).to respond_to(:from_xml) }
29
+ it { expect(subject).to be_a(OData::Entity) }
30
+
31
+ it { expect(subject.name).to eq('Product') }
32
+ it { expect(subject.type).to eq('ODataDemo.Product') }
33
+ it { expect(subject.namespace).to eq('ODataDemo') }
34
+
35
+ it { expect(subject['ID']).to eq(0) }
36
+ it { expect(subject['Name']).to eq('Bread') }
37
+ it { expect(subject['Description']).to eq('Whole grain bread') }
38
+ it { expect(subject['ReleaseDate']).to eq(DateTime.new(1992,1,1,0,0,0,0)) }
39
+ it { expect(subject['DiscontinuedDate']).to be_nil }
40
+ it { expect(subject['Rating']).to eq(4) }
41
+ it { expect(subject['Price']).to eq(2.5) }
42
+ end
43
+ end
@@ -6,8 +6,9 @@ describe OData::Properties::Decimal do
6
6
  it { expect(subject.type).to eq('Edm.Decimal') }
7
7
  it { expect(subject.value).to eq(BigDecimal('678.90325')) }
8
8
 
9
- it { expect { subject.value = BigDecimal((7.9 * (10**28)) + 1) }.to raise_error(ArgumentError) }
10
- it { expect { subject.value = BigDecimal((-7.9 * (10**28)) - 1) }.to raise_error(ArgumentError) }
9
+ it { expect { subject.value = BigDecimal((7.9 * (10**28)), 2) + 1 }.to raise_error(ArgumentError) }
10
+ it { expect { subject.value = BigDecimal((-7.9 * (10**28)), 2) - 1 }.to raise_error(ArgumentError) }
11
+ it { expect { subject.value = BigDecimal((3.4 * (10**-28)), 2) * 3.14151 + 5 }.to raise_error(ArgumentError) }
11
12
 
12
13
  it { expect(lambda {
13
14
  subject.value = '19.89043256'
@@ -3,6 +3,10 @@ require 'spec_helper'
3
3
  describe OData::Properties::String do
4
4
  let(:subject) { OData::Properties::String.new('Stringy', 'This is an example') }
5
5
 
6
+ it { expect(subject).to respond_to(:is_unicode?) }
7
+ it { expect(subject).to respond_to(:has_default_value?) }
8
+ it { expect(subject).to respond_to(:default_value) }
9
+
6
10
  it { expect(subject.type).to eq('Edm.String') }
7
11
  it { expect(subject.value).to eq('This is an example')}
8
12
 
@@ -10,4 +14,33 @@ describe OData::Properties::String do
10
14
  subject.value = 'Another example'
11
15
  subject.value
12
16
  }.call).to eq('Another example') }
17
+
18
+ it { expect(lambda {
19
+ subject.value = nil
20
+ subject.value
21
+ }.call).to eq(nil) }
22
+
23
+ describe '#is_unicode?' do
24
+ let(:not_unicode) { OData::Properties::String.new('Stringy', 'This is an example', unicode: false) }
25
+
26
+ it { expect(subject.is_unicode?).to eq(true) }
27
+ it { expect(not_unicode.is_unicode?).to eq(false) }
28
+
29
+ it { expect(subject.value.encoding).to eq(Encoding::UTF_8) }
30
+ it { expect(not_unicode.value.encoding).to eq(Encoding::ASCII) }
31
+ end
32
+
33
+ describe 'when #allows_nil? is false' do
34
+ let(:subject) { OData::Properties::String.new('Stringy', 'This is an example', allows_nil: false) }
35
+
36
+ it { expect {subject.value = nil}.to raise_error(ArgumentError) }
37
+ it { expect {subject.value = 'Test'}.not_to raise_error }
38
+ end
39
+
40
+ describe 'with default_value' do
41
+ let(:subject) { OData::Properties::String.new('Stringy', nil, default_value: 'Sample Text') }
42
+
43
+ it { expect(subject.has_default_value?).to eq(true) }
44
+ it { expect(subject.default_value).to eq('Sample Text') }
45
+ end
13
46
  end
@@ -17,38 +17,6 @@ describe OData::Property do
17
17
  it { expect(subject).to respond_to(:allows_nil?) }
18
18
  it { expect(subject.allows_nil?).to eq(true) }
19
19
 
20
- it { expect(subject).to respond_to(:max_length) }
21
- it { expect(lambda {subject.max_length}).to raise_error(NotImplementedError) }
22
- #it { expect(subject.max_length).to eq(nil) }
23
-
24
- it { expect(subject).to respond_to(:fixed_length) }
25
- it { expect(lambda {subject.fixed_length}).to raise_error(NotImplementedError) }
26
- #it { expect(subject.fixed_length).to eq(nil) }
27
-
28
- it { expect(subject).to respond_to(:precision) }
29
- it { expect(lambda {subject.precision}).to raise_error(NotImplementedError) }
30
- #it { expect(subject.precision).to eq(nil) }
31
-
32
- it { expect(subject).to respond_to(:scale) }
33
- it { expect(lambda {subject.scale}).to raise_error(NotImplementedError) }
34
- #it { expect(subject.scale).to eq(nil) }
35
-
36
- it { expect(subject).to respond_to(:is_unicode?) }
37
- it { expect(lambda {subject.is_unicode?}).to raise_error(NotImplementedError) }
38
- #it { expect(subject.is_unicode?).to eq(true) }
39
-
40
- it { expect(subject).to respond_to(:collation) }
41
- it { expect(lambda {subject.collation}).to raise_error(NotImplementedError) }
42
- #it { expect(subject.collation).to eq(nil) }
43
-
44
- it { expect(subject).to respond_to(:srid) }
45
- it { expect(lambda {subject.srid}).to raise_error(NotImplementedError) }
46
- #it { expect(subject.srid).to eq(0) }
47
-
48
- it { expect(subject).to respond_to(:default_value) }
49
- it { expect(lambda {subject.default_value}).to raise_error(NotImplementedError) }
50
- #it { expect(subject.default_value).to eq(nil) }
51
-
52
20
  it { expect(subject).to respond_to(:concurrency_mode) }
53
21
  it { expect(subject.concurrency_mode).to eq(:none) }
54
22
 
@@ -4,12 +4,6 @@ describe OData::ServiceRegistry do
4
4
  let(:subject) { OData::ServiceRegistry }
5
5
  let(:sample_service) { OData::Service.open('http://services.odata.org/OData/OData.svc') }
6
6
 
7
- # We're calling this as a private method because there should not be any
8
- # reasons to have to flush the service registry except in testing.
9
- after :each do
10
- OData::ServiceRegistry.instance.send(:flush)
11
- end
12
-
13
7
  it { expect(subject).to respond_to(:add) }
14
8
  it { expect(subject).to respond_to(:[]) }
15
9
 
@@ -3,6 +3,8 @@ require 'spec_helper'
3
3
  describe OData::Service do
4
4
  let(:subject) { OData::Service.open('http://services.odata.org/OData/OData.svc') }
5
5
  let(:entity_types) { %w{Product FeaturedProduct ProductDetail Category Supplier Person Customer Employee PersonDetail Advertisement} }
6
+ let(:entity_sets) { %w{Products ProductDetails Categories Suppliers Persons PersonDetails Advertisements} }
7
+ let(:entity_set_types) { %w{Product ProductDetail Category Supplier Person PersonDetail Advertisement} }
6
8
  let(:complex_types) { %w{Address} }
7
9
 
8
10
  # We're calling this as a private method because there should not be any
@@ -27,7 +29,8 @@ describe OData::Service do
27
29
 
28
30
  describe 'instance methods' do
29
31
  it { expect(subject).to respond_to(:service_url) }
30
- it { expect(subject).to respond_to(:entities) }
32
+ it { expect(subject).to respond_to(:entity_types) }
33
+ it { expect(subject).to respond_to(:entity_sets) }
31
34
  it { expect(subject).to respond_to(:complex_types) }
32
35
  it { expect(subject).to respond_to(:namespace) }
33
36
  end
@@ -36,9 +39,15 @@ describe OData::Service do
36
39
  it { expect(subject.service_url).to eq('http://services.odata.org/OData/OData.svc') }
37
40
  end
38
41
 
39
- describe '#entities' do
40
- it { expect(subject.entities.size).to eq(10) }
41
- it { expect(subject.entities).to eq(entity_types) }
42
+ describe '#entity_types' do
43
+ it { expect(subject.entity_types.size).to eq(10) }
44
+ it { expect(subject.entity_types).to eq(entity_types) }
45
+ end
46
+
47
+ describe '#entity_sets' do
48
+ it { expect(subject.entity_sets.size).to eq(7) }
49
+ it { expect(subject.entity_sets.keys).to eq(entity_set_types) }
50
+ it { expect(subject.entity_sets.values).to eq(entity_sets) }
42
51
  end
43
52
 
44
53
  describe '#complex_types' do
@@ -70,4 +79,8 @@ describe OData::Service do
70
79
  it { expect(subject.get(::Examples::Product, {key: 0}).first.price).to eq(2.5) }
71
80
  end
72
81
  end
82
+
83
+ describe '#[]' do
84
+ it { expect(subject['Product']).to be_a(OData::EntitySet) }
85
+ end
73
86
  end
@@ -11,7 +11,11 @@ end
11
11
  require 'odata'
12
12
 
13
13
  require 'webmock/rspec'
14
- WebMock.disable_net_connect!(allow_localhost: true, allow: 'codeclimate.com')
14
+ if ENV['REAL_HTTP'] == 'true'
15
+ WebMock.allow_net_connect!
16
+ else
17
+ WebMock.disable_net_connect!(allow_localhost: true, allow: 'codeclimate.com')
18
+ end
15
19
 
16
20
  RSpec.configure do |config|
17
21
  if config.files_to_run.one?
@@ -32,13 +36,33 @@ RSpec.configure do |config|
32
36
  end
33
37
 
34
38
  config.before(:example) do
35
- WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/$metadata').
36
- to_return(status: 200, body: File.open('spec/fixtures/sample_service/metadata.xml'))
39
+ unless ENV['REAL_HTTP'] == 'true'
40
+ WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/$metadata').
41
+ to_return(status: 200, body: File.open('spec/fixtures/sample_service/metadata.xml'))
42
+
43
+ WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products').
44
+ to_return(status: 200, body: File.open('spec/fixtures/sample_service/products.xml'))
45
+
46
+ WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products?$inlinecount=allpages&$skip=0&$top=5').
47
+ to_return(status: 200, body: File.open('spec/fixtures/sample_service/products_skip0_top5.xml'))
37
48
 
38
- WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products').
39
- to_return(status: 200, body: File.open('spec/fixtures/sample_service/products.xml'))
49
+ WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products?$inlinecount=allpages&$skip=5&$top=5').
50
+ to_return(status: 200, body: File.open('spec/fixtures/sample_service/products_skip5_top5.xml'))
51
+
52
+ WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products?$inlinecount=allpages&$skip=10&$top=5').
53
+ to_return(status: 200, body: File.open('spec/fixtures/sample_service/products_skip10_top5.xml'))
54
+
55
+ WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products/$count').
56
+ to_return(status: 200, :body => '11')
57
+
58
+ WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products(0)').
59
+ to_return(status: 200, body: File.open('spec/fixtures/sample_service/product_0.xml'))
60
+ end
61
+ end
40
62
 
41
- WebMock.stub_request(:get, 'http://services.odata.org/OData/OData.svc/Products(0)').
42
- to_return(status: 200, body: File.open('spec/fixtures/sample_service/product_0.xml'))
63
+ config.after(:example) do
64
+ # We're calling this as a private method because there should not be any
65
+ # reasons to have to flush the service registry except in testing.
66
+ OData::ServiceRegistry.instance.send(:flush)
43
67
  end
44
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: odata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Thompson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-26 00:00:00.000000000 Z
11
+ date: 2014-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.18.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: backports
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.6.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.6.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: nokogiri
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -152,6 +166,8 @@ files:
152
166
  - README.md
153
167
  - Rakefile
154
168
  - lib/odata.rb
169
+ - lib/odata/entity.rb
170
+ - lib/odata/entity_set.rb
155
171
  - lib/odata/model.rb
156
172
  - lib/odata/properties.rb
157
173
  - lib/odata/properties/binary.rb
@@ -162,6 +178,7 @@ files:
162
178
  - lib/odata/properties/float.rb
163
179
  - lib/odata/properties/guid.rb
164
180
  - lib/odata/properties/integer.rb
181
+ - lib/odata/properties/number.rb
165
182
  - lib/odata/properties/string.rb
166
183
  - lib/odata/properties/time.rb
167
184
  - lib/odata/property.rb
@@ -174,6 +191,11 @@ files:
174
191
  - spec/fixtures/sample_service/metadata.xml
175
192
  - spec/fixtures/sample_service/product_0.xml
176
193
  - spec/fixtures/sample_service/products.xml
194
+ - spec/fixtures/sample_service/products_skip0_top5.xml
195
+ - spec/fixtures/sample_service/products_skip10_top5.xml
196
+ - spec/fixtures/sample_service/products_skip5_top5.xml
197
+ - spec/odata/entity_set_spec.rb
198
+ - spec/odata/entity_spec.rb
177
199
  - spec/odata/model_spec.rb
178
200
  - spec/odata/properties/binary_spec.rb
179
201
  - spec/odata/properties/boolean_spec.rb
@@ -218,6 +240,11 @@ test_files:
218
240
  - spec/fixtures/sample_service/metadata.xml
219
241
  - spec/fixtures/sample_service/product_0.xml
220
242
  - spec/fixtures/sample_service/products.xml
243
+ - spec/fixtures/sample_service/products_skip0_top5.xml
244
+ - spec/fixtures/sample_service/products_skip10_top5.xml
245
+ - spec/fixtures/sample_service/products_skip5_top5.xml
246
+ - spec/odata/entity_set_spec.rb
247
+ - spec/odata/entity_spec.rb
221
248
  - spec/odata/model_spec.rb
222
249
  - spec/odata/properties/binary_spec.rb
223
250
  - spec/odata/properties/boolean_spec.rb