ruby_odata 0.1.0 → 0.1.6

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 (86) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +7 -2
  4. data/.simplecov +10 -0
  5. data/.travis.yml +10 -4
  6. data/.yardopts +6 -0
  7. data/CHANGELOG.md +157 -0
  8. data/Guardfile +14 -0
  9. data/LICENSE +20 -22
  10. data/README.md +289 -0
  11. data/Rakefile +19 -9
  12. data/features/basic_auth.feature +3 -2
  13. data/features/batch_request.feature +7 -6
  14. data/features/cassettes/basic_auth_protected_resource.yml +57 -0
  15. data/features/cassettes/batch_request_additions.yml +69 -0
  16. data/features/cassettes/batch_request_deletes.yml +69 -0
  17. data/features/cassettes/batch_request_updates.yml +69 -0
  18. data/features/cassettes/clean_database_for_testing.yml +46 -0
  19. data/features/cassettes/cucumber_tags/basic_auth.yml +297 -0
  20. data/features/cassettes/cucumber_tags/batch_request.yml +1459 -0
  21. data/features/cassettes/cucumber_tags/complex_types.yml +326 -0
  22. data/features/cassettes/cucumber_tags/error_handling.yml +64 -0
  23. data/features/cassettes/cucumber_tags/query_builder.yml +2025 -0
  24. data/features/cassettes/cucumber_tags/service.yml +234 -0
  25. data/features/cassettes/cucumber_tags/service_manage.yml +937 -0
  26. data/features/cassettes/cucumber_tags/service_methods.yml +647 -0
  27. data/features/cassettes/cucumber_tags/ssl.yml +203 -0
  28. data/features/cassettes/cucumber_tags/type_conversion.yml +337 -0
  29. data/features/cassettes/service_manage_additions.yml +65 -0
  30. data/features/cassettes/service_manage_deletions.yml +58 -0
  31. data/features/cassettes/service_manage_deletions_2.yml +58 -0
  32. data/features/cassettes/unsecured_metadata.yml +89 -0
  33. data/features/complex_types.feature +4 -3
  34. data/features/error_handling.feature +13 -0
  35. data/features/query_builder.feature +30 -9
  36. data/features/service.feature +4 -3
  37. data/features/service_manage.feature +6 -5
  38. data/features/service_methods.feature +3 -2
  39. data/features/ssl.feature +8 -8
  40. data/features/step_definitions/service_steps.rb +32 -74
  41. data/features/support/env.rb +6 -3
  42. data/features/support/hooks.rb +3 -2
  43. data/features/support/pickle.rb +29 -18
  44. data/features/support/vcr.rb +24 -0
  45. data/features/type_conversion.feature +16 -17
  46. data/gemfiles/Gemfile.ruby187 +6 -0
  47. data/lib/ruby_odata.rb +20 -18
  48. data/lib/ruby_odata/association.rb +7 -6
  49. data/lib/ruby_odata/class_builder.rb +31 -14
  50. data/lib/ruby_odata/exceptions.rb +11 -0
  51. data/lib/ruby_odata/helpers.rb +17 -0
  52. data/lib/ruby_odata/operation.rb +5 -6
  53. data/lib/ruby_odata/property_metadata.rb +9 -7
  54. data/lib/ruby_odata/query_builder.rb +127 -63
  55. data/lib/ruby_odata/service.rb +265 -147
  56. data/lib/ruby_odata/version.rb +3 -1
  57. data/ruby_odata.gemspec +22 -13
  58. data/spec/fixtures/error_without_message.xml +5 -0
  59. data/spec/fixtures/int64_ids/edmx_boat_service.xml +19 -0
  60. data/spec/fixtures/int64_ids/edmx_car_service.xml +21 -0
  61. data/spec/fixtures/int64_ids/result_boats.xml +26 -0
  62. data/spec/fixtures/int64_ids/result_cars.xml +28 -0
  63. data/spec/fixtures/ms_system_center/edmx_ms_system_center.xml +1645 -0
  64. data/spec/fixtures/ms_system_center/edmx_ms_system_center_v2.xml +2120 -0
  65. data/spec/fixtures/ms_system_center/hardware_profiles.xml +61 -0
  66. data/spec/fixtures/ms_system_center/virtual_machines.xml +175 -0
  67. data/spec/fixtures/ms_system_center/vm_templates.xml +1193 -0
  68. data/spec/fixtures/nested_expands/edmx_northwind.xml +557 -0
  69. data/spec/fixtures/nested_expands/northwind_products_category_expands.xml +774 -0
  70. data/spec/fixtures/sample_service/result_select_categories_expand.xml +268 -0
  71. data/spec/fixtures/sample_service/result_select_categories_no_property.xml +6 -0
  72. data/spec/fixtures/sample_service/result_select_categories_travsing_no_expand.xml +6 -0
  73. data/spec/fixtures/sample_service/result_select_products_name_price.xml +92 -0
  74. data/spec/property_metadata_spec.rb +10 -10
  75. data/spec/query_builder_spec.rb +153 -14
  76. data/spec/revised_service_spec.rb +111 -6
  77. data/spec/service_spec.rb +389 -85
  78. data/spec/spec_helper.rb +3 -0
  79. data/spec/support/sample_service_matcher.rb +15 -0
  80. data/test/RubyODataService/RubyODataService/App_Data/.gitkeep +0 -0
  81. data/test/blueprints.rb +15 -9
  82. data/test/usage_samples/querying.rb +5 -1
  83. data/test/usage_samples/sample_data.rb +1 -3
  84. metadata +276 -76
  85. data/CHANGELOG.rdoc +0 -88
  86. data/README.rdoc +0 -259
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://win7dev:8989/SampleService/RubyOData.svc/Products
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: ! '{"Name":"Sample Product","Description":"Test Widget","Price":"10.25","Category":{"Name":"Category
9
+ 0001","AuditFields":{"CreatedBy":"Machinist"}},"AuditFields":{"CreatedBy":"Machinist"}}'
10
+ headers:
11
+ Accept:
12
+ - ! '*/*; q=0.5, application/xml'
13
+ Accept-Encoding:
14
+ - gzip, deflate
15
+ Content-Type:
16
+ - application/json
17
+ Content-Length:
18
+ - '185'
19
+ User-Agent:
20
+ - Ruby
21
+ response:
22
+ status:
23
+ code: 201
24
+ message: Created
25
+ headers:
26
+ Cache-Control:
27
+ - no-cache
28
+ Content-Length:
29
+ - '1441'
30
+ Content-Type:
31
+ - application/atom+xml;type=entry;charset=utf-8
32
+ Location:
33
+ - http://win7dev:8989/SampleService/RubyOData.svc/Products(1)
34
+ Server:
35
+ - Microsoft-IIS/7.5
36
+ Set-Cookie:
37
+ - ASP.NET_SessionId=3gkn5afndwqci0z3nznzu0bm; path=/; HttpOnly
38
+ X-Content-Type-Options:
39
+ - nosniff
40
+ Dataserviceversion:
41
+ - 1.0;
42
+ X-Aspnet-Version:
43
+ - 4.0.30319
44
+ X-Powered-By:
45
+ - ASP.NET
46
+ Date:
47
+ - Tue, 07 Aug 2012 21:47:36 GMT
48
+ body:
49
+ encoding: US-ASCII
50
+ string: <?xml version="1.0" encoding="utf-8"?><entry xml:base="http://win7dev:8989/SampleService/RubyOData.svc/"
51
+ xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
52
+ xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss"
53
+ xmlns:gml="http://www.opengis.net/gml"><id>http://win7dev:8989/SampleService/RubyOData.svc/Products(1)</id><category
54
+ term="RubyODataService.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"
55
+ /><link rel="edit" title="Product" href="Products(1)" /><link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category"
56
+ type="application/atom+xml;type=entry" title="Category" href="Products(1)/Category"
57
+ /><title /><updated>2012-08-07T21:47:37Z</updated><author><name /></author><content
58
+ type="application/xml"><m:properties><d:Id m:type="Edm.Int32">1</d:Id><d:Name>Sample
59
+ Product</d:Name><d:Description>Test Widget</d:Description><d:Price m:type="Edm.Decimal">10.25</d:Price><d:DiscontinuedDate
60
+ m:type="Edm.DateTime" m:null="true" /><d:CategoryId m:type="Edm.Int32">1</d:CategoryId><d:AuditFields
61
+ m:type="RubyODataService.AuditFields"><d:CreateDate m:type="Edm.DateTime">2012-08-07T21:47:37.171875Z</d:CreateDate><d:ModifiedDate
62
+ m:type="Edm.DateTime">2012-08-07T21:47:37.171875Z</d:ModifiedDate><d:CreatedBy>Machinist</d:CreatedBy></d:AuditFields></m:properties></content></entry>
63
+ http_version: !!null
64
+ recorded_at: Tue, 07 Aug 2012 21:47:37 GMT
65
+ recorded_with: VCR 2.2.4
@@ -0,0 +1,58 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://win7dev:8989/SampleService/RubyOData.svc/Products(1)
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - ! '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Cache-Control:
22
+ - no-cache
23
+ Content-Length:
24
+ - '1431'
25
+ Content-Type:
26
+ - application/atom+xml;type=entry;charset=utf-8
27
+ Server:
28
+ - Microsoft-IIS/7.5
29
+ Set-Cookie:
30
+ - ASP.NET_SessionId=pqd44q53aamnklanqbym2pcu; path=/; HttpOnly
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ Dataserviceversion:
34
+ - 1.0;
35
+ X-Aspnet-Version:
36
+ - 4.0.30319
37
+ X-Powered-By:
38
+ - ASP.NET
39
+ Date:
40
+ - Tue, 07 Aug 2012 21:47:37 GMT
41
+ body:
42
+ encoding: US-ASCII
43
+ string: <?xml version="1.0" encoding="utf-8"?><entry xml:base="http://win7dev:8989/SampleService/RubyOData.svc/"
44
+ xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
45
+ xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss"
46
+ xmlns:gml="http://www.opengis.net/gml"><id>http://win7dev:8989/SampleService/RubyOData.svc/Products(1)</id><category
47
+ term="RubyODataService.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"
48
+ /><link rel="edit" title="Product" href="Products(1)" /><link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category"
49
+ type="application/atom+xml;type=entry" title="Category" href="Products(1)/Category"
50
+ /><title /><updated>2012-08-07T21:47:38Z</updated><author><name /></author><content
51
+ type="application/xml"><m:properties><d:Id m:type="Edm.Int32">1</d:Id><d:Name>Test
52
+ Product</d:Name><d:Description>Test Widget</d:Description><d:Price m:type="Edm.Decimal">10.25</d:Price><d:DiscontinuedDate
53
+ m:type="Edm.DateTime" m:null="true" /><d:CategoryId m:type="Edm.Int32">1</d:CategoryId><d:AuditFields
54
+ m:type="RubyODataService.AuditFields"><d:CreateDate m:type="Edm.DateTime">2012-08-07T21:47:38.157</d:CreateDate><d:ModifiedDate
55
+ m:type="Edm.DateTime">2012-08-07T21:47:38.157</d:ModifiedDate><d:CreatedBy>Machinist</d:CreatedBy></d:AuditFields></m:properties></content></entry>
56
+ http_version: !!null
57
+ recorded_at: Tue, 07 Aug 2012 21:47:38 GMT
58
+ recorded_with: VCR 2.2.4
@@ -0,0 +1,58 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://win7dev:8989/SampleService/RubyOData.svc/Products(1)
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - ! '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Cache-Control:
22
+ - no-cache
23
+ Content-Length:
24
+ - '1439'
25
+ Content-Type:
26
+ - application/atom+xml;type=entry;charset=utf-8
27
+ Server:
28
+ - Microsoft-IIS/7.5
29
+ Set-Cookie:
30
+ - ASP.NET_SessionId=1jtoo2ua0isload4ewywcbyh; path=/; HttpOnly
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ Dataserviceversion:
34
+ - 1.0;
35
+ X-Aspnet-Version:
36
+ - 4.0.30319
37
+ X-Powered-By:
38
+ - ASP.NET
39
+ Date:
40
+ - Tue, 07 Aug 2012 21:47:37 GMT
41
+ body:
42
+ encoding: US-ASCII
43
+ string: <?xml version="1.0" encoding="utf-8"?><entry xml:base="http://win7dev:8989/SampleService/RubyOData.svc/"
44
+ xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
45
+ xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss"
46
+ xmlns:gml="http://www.opengis.net/gml"><id>http://win7dev:8989/SampleService/RubyOData.svc/Products(1)</id><category
47
+ term="RubyODataService.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"
48
+ /><link rel="edit" title="Product" href="Products(1)" /><link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category"
49
+ type="application/atom+xml;type=entry" title="Category" href="Products(1)/Category"
50
+ /><title /><updated>2012-08-07T21:47:38Z</updated><author><name /></author><content
51
+ type="application/xml"><m:properties><d:Id m:type="Edm.Int32">1</d:Id><d:Name>Changed
52
+ Test Product</d:Name><d:Description>Test Widget</d:Description><d:Price m:type="Edm.Decimal">10.25</d:Price><d:DiscontinuedDate
53
+ m:type="Edm.DateTime" m:null="true" /><d:CategoryId m:type="Edm.Int32">1</d:CategoryId><d:AuditFields
54
+ m:type="RubyODataService.AuditFields"><d:CreateDate m:type="Edm.DateTime">2012-08-07T21:47:38.157</d:CreateDate><d:ModifiedDate
55
+ m:type="Edm.DateTime">2012-08-07T21:47:38.157</d:ModifiedDate><d:CreatedBy>Machinist</d:CreatedBy></d:AuditFields></m:properties></content></entry>
56
+ http_version: !!null
57
+ recorded_at: Tue, 07 Aug 2012 21:47:38 GMT
58
+ recorded_with: VCR 2.2.4
@@ -0,0 +1,89 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://win7dev:8989/SampleService/RubyOData.svc/$metadata
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - ! '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Cache-Control:
22
+ - no-cache
23
+ Content-Length:
24
+ - '4055'
25
+ Content-Type:
26
+ - application/xml;charset=utf-8
27
+ Server:
28
+ - Microsoft-IIS/7.5
29
+ Set-Cookie:
30
+ - ASP.NET_SessionId=tvkikr3xqyy43kcx0mk1uwdr; path=/; HttpOnly
31
+ X-Content-Type-Options:
32
+ - nosniff
33
+ Dataserviceversion:
34
+ - 1.0;
35
+ X-Aspnet-Version:
36
+ - 4.0.30319
37
+ X-Powered-By:
38
+ - ASP.NET
39
+ Date:
40
+ - Tue, 07 Aug 2012 21:47:40 GMT
41
+ body:
42
+ encoding: US-ASCII
43
+ string: <?xml version="1.0" encoding="utf-8"?><edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"><edmx:DataServices
44
+ m:DataServiceVersion="1.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><Schema
45
+ Namespace="RubyODataService" xmlns="http://schemas.microsoft.com/ado/2008/09/edm"><EntityType
46
+ Name="Product"><Key><PropertyRef Name="Id" /></Key><Property Name="Id" Type="Edm.Int32"
47
+ Nullable="false" p6:StoreGeneratedPattern="Identity" xmlns:p6="http://schemas.microsoft.com/ado/2009/02/edm/annotation"
48
+ /><Property Name="Name" Type="Edm.String" MaxLength="4000" FixedLength="false"
49
+ Unicode="true" /><Property Name="Description" Type="Edm.String" MaxLength="4000"
50
+ FixedLength="false" Unicode="true" /><Property Name="Price" Type="Edm.Decimal"
51
+ Nullable="false" Precision="18" Scale="2" /><Property Name="DiscontinuedDate"
52
+ Type="Edm.DateTime" /><Property Name="CategoryId" Type="Edm.Int32" Nullable="false"
53
+ /><Property Name="AuditFields" Type="RubyODataService.AuditFields" Nullable="false"
54
+ /><NavigationProperty Name="Category" Relationship="RubyODataService.Category_Products"
55
+ ToRole="Category_Products_Source" FromRole="Category_Products_Target" /></EntityType><ComplexType
56
+ Name="AuditFields"><Property Name="CreateDate" Type="Edm.DateTime" Nullable="false"
57
+ /><Property Name="ModifiedDate" Type="Edm.DateTime" Nullable="false" /><Property
58
+ Name="CreatedBy" Type="Edm.String" MaxLength="4000" FixedLength="false" Unicode="true"
59
+ /></ComplexType><EntityType Name="Category"><Key><PropertyRef Name="Id" /></Key><Property
60
+ Name="Id" Type="Edm.Int32" Nullable="false" p6:StoreGeneratedPattern="Identity"
61
+ xmlns:p6="http://schemas.microsoft.com/ado/2009/02/edm/annotation" /><Property
62
+ Name="Name" Type="Edm.String" MaxLength="4000" FixedLength="false" Unicode="true"
63
+ /><Property Name="AuditFields" Type="RubyODataService.AuditFields" Nullable="false"
64
+ /><NavigationProperty Name="Products" Relationship="RubyODataService.Category_Products"
65
+ ToRole="Category_Products_Target" FromRole="Category_Products_Source" /></EntityType><EntityType
66
+ Name="EdmMetadata"><Key><PropertyRef Name="Id" /></Key><Property Name="Id"
67
+ Type="Edm.Int32" Nullable="false" p6:StoreGeneratedPattern="Identity" xmlns:p6="http://schemas.microsoft.com/ado/2009/02/edm/annotation"
68
+ /><Property Name="ModelHash" Type="Edm.String" MaxLength="4000" FixedLength="false"
69
+ Unicode="true" /></EntityType><Association Name="Category_Products"><End Type="RubyODataService.Product"
70
+ Role="Category_Products_Target" Multiplicity="*" /><End Type="RubyODataService.Category"
71
+ Role="Category_Products_Source" Multiplicity="1"><OnDelete Action="Cascade"
72
+ /></End><ReferentialConstraint><Principal Role="Category_Products_Source"><PropertyRef
73
+ Name="Id" /></Principal><Dependent Role="Category_Products_Target"><PropertyRef
74
+ Name="CategoryId" /></Dependent></ReferentialConstraint></Association><EntityContainer
75
+ Name="RubyODataContext" m:IsDefaultEntityContainer="true"><EntitySet Name="Products"
76
+ EntityType="RubyODataService.Product" /><EntitySet Name="Categories" EntityType="RubyODataService.Category"
77
+ /><EntitySet Name="EdmMetadatas" EntityType="RubyODataService.EdmMetadata"
78
+ /><AssociationSet Name="Category_Products" Association="RubyODataService.Category_Products"><End
79
+ Role="Category_Products_Target" EntitySet="Products" /><End Role="Category_Products_Source"
80
+ EntitySet="Categories" /></AssociationSet><FunctionImport Name="CleanDatabaseForTesting"
81
+ m:HttpMethod="POST" /><FunctionImport Name="EntityCategoryWebGet" ReturnType="Collection(RubyODataService.Category)"
82
+ EntitySet="Categories" m:HttpMethod="GET" /><FunctionImport Name="CategoryNames"
83
+ ReturnType="Collection(Edm.String)" m:HttpMethod="GET" /><FunctionImport Name="FirstCategoryId"
84
+ ReturnType="Edm.Int32" m:HttpMethod="GET" /><FunctionImport Name="EntitySingleCategoryWebGet"
85
+ ReturnType="RubyODataService.Category" EntitySet="Categories" m:HttpMethod="GET"><Parameter
86
+ Name="id" Type="Edm.Int32" /></FunctionImport></EntityContainer></Schema></edmx:DataServices></edmx:Edmx>
87
+ http_version: !!null
88
+ recorded_at: Tue, 07 Aug 2012 21:47:41 GMT
89
+ recorded_with: VCR 2.2.4
@@ -1,3 +1,4 @@
1
+ @complex_types
1
2
  Feature: Complex types
2
3
  In order to fully support OData services
3
4
  As a user of ruby_odata
@@ -12,7 +13,7 @@ Scenario: The proxy must generate classes for complex types if they exist
12
13
 
13
14
  Scenario: Complex properties on an entity must be the correct type
14
15
  Given I call "AddToProducts" on the service with a new "Product" object
15
- And I save changes
16
+ And I save changes
16
17
  And I call "Products" on the service with args: "1"
17
18
  When I run the query
18
19
  Then the first result should have a method: "AuditFields"
@@ -25,10 +26,10 @@ Scenario: Complex properties on an entity must be filled
25
26
  When I run the query
26
27
  Then the first result should have a method: "AuditFields"
27
28
  When I call "CreateDate" for "AuditFields" on the first result
28
- Then the operation should not be null
29
+ Then the operation should not be null
29
30
 
30
31
  # TODO: This scenario should have the AuditFields.CreatedBy field set in the Given
31
- # instead it is set by the blueprint
32
+ # instead it is set by the blueprint
32
33
  Scenario: Complex properties should be able to be added
33
34
  Given I call "AddToProducts" on the service with a new "Product" object
34
35
  And I save changes
@@ -0,0 +1,13 @@
1
+ @error_handling
2
+ Feature: Error handling
3
+ In order to assist debugging
4
+ As a user
5
+ I want more debug information when an error occurs communicating with the server
6
+
7
+ Background:
8
+ Given a HTTP ODataService exists
9
+ And blueprints exist for the service
10
+
11
+ Scenario: Violate a data type conversion (empty string to decimal)
12
+ Given I call "AddToProducts" on the service with a new "Product" object with Price: ""
13
+ When I save changes it should throw an exception with message containing "Error encountered in converting the value"
@@ -1,7 +1,8 @@
1
+ @query_builder
1
2
  Feature: Query Builder
2
3
  In order to query OData services
3
4
  As a user
4
- I want to be able to perform valid OData protocol operations
5
+ I want to be able to perform valid OData protocol operations
5
6
 
6
7
  Background:
7
8
  Given a HTTP ODataService exists
@@ -12,7 +13,7 @@ Scenario: Navigation Properties should be able to be eager loaded
12
13
  Given I call "AddToCategories" on the service with a new "Category" object with Name: "Test Category"
13
14
  And I save changes
14
15
  And I call "AddToProducts" on the service with a new "Product" object with Category: "@@LastSave.first"
15
- And I save changes
16
+ And I save changes
16
17
  And I call "Products" on the service with args: "1"
17
18
  And I expand the query to include "Category"
18
19
  When I run the query
@@ -99,14 +100,14 @@ Scenario: Skip should be allowed on the root level entity
99
100
  | Product 2 |
100
101
  | Product 3 |
101
102
  | Product 4 |
102
- | Product 5 |
103
+ | Product 5 |
103
104
  When I call "Products" on the service
104
105
  And I skip 3
105
106
  And I run the query
106
107
  Then the result should be:
107
108
  | Name |
108
109
  | Product 4 |
109
- | Product 5 |
110
+ | Product 5 |
110
111
 
111
112
 
112
113
  # Top
@@ -117,14 +118,14 @@ Scenario: Top should be allowed on the root level entity
117
118
  | Product 2 |
118
119
  | Product 3 |
119
120
  | Product 4 |
120
- | Product 5 |
121
+ | Product 5 |
121
122
  When I call "Products" on the service
122
123
  And I ask for the top 3
123
124
  And I run the query
124
125
  Then the result should be:
125
126
  | Name |
126
127
  | Product 1 |
127
- | Product 2 |
128
+ | Product 2 |
128
129
  | Product 3 |
129
130
 
130
131
  Scenario: Top should be able to be used along with skip for paging
@@ -134,8 +135,8 @@ Scenario: Top should be able to be used along with skip for paging
134
135
  | Product 2 |
135
136
  | Product 3 |
136
137
  | Product 4 |
137
- | Product 5 |
138
- | Product 6 |
138
+ | Product 5 |
139
+ | Product 6 |
139
140
  When I call "Products" on the service
140
141
  And I skip 2
141
142
  And I ask for the top 2
@@ -143,7 +144,7 @@ Scenario: Top should be able to be used along with skip for paging
143
144
  Then the result should be:
144
145
  | Name |
145
146
  | Product 3 |
146
- | Product 4 |
147
+ | Product 4 |
147
148
 
148
149
 
149
150
  # Links
@@ -160,3 +161,23 @@ Scenario: Navigation Properties should be able to represented as links
160
161
  And I run the query
161
162
  Then the result count should be 3
162
163
  Then the method "path" on the first result should equal: "/SampleService/RubyOData.svc/Products(1)"
164
+
165
+ # Count
166
+ Scenario: Count should be able to be used on a root collection
167
+ Given 4 products exist
168
+ When I call "Products" on the service
169
+ And I ask for the count
170
+ And I run the query
171
+ Then the integer result should be 4
172
+
173
+ Scenario: Count should be able to be used on with a filter
174
+ Given the following products exist:
175
+ | Name |
176
+ | Product 1 |
177
+ | Product 2 |
178
+ When I call "Products" on the service
179
+ And I filter the query with: "Name eq 'Product 2'"
180
+ And I ask for the count
181
+ And I run the query
182
+ Then the integer result should be 1
183
+
@@ -1,3 +1,4 @@
1
+ @service
1
2
  Feature: Service Should Generate a Proxy
2
3
  In order to consume the OData
3
4
  As a user
@@ -30,7 +31,7 @@ Scenario: Entity should have the correct accessors
30
31
  When I run the query
31
32
  Then the first result should have a method: "Id"
32
33
  And the first result should have a method: "Name"
33
-
34
+
34
35
  Scenario: Entity should fill values
35
36
  Given I call "AddToCategories" on the service with a new "Category" object with Name: "Test Category"
36
37
  And I save changes
@@ -39,9 +40,9 @@ Scenario: Entity should fill values
39
40
  Then the method "Id" on the first result should equal: "1"
40
41
  And the method "Name" on the first result should equal: "Test Category"
41
42
 
42
- Scenario: Navigation Properties should be included in results
43
+ Scenario: Navigation Properties should be included in results
43
44
  Given I call "AddToProducts" on the service with a new "Product" object
44
- And I save changes
45
+ And I save changes
45
46
  And I call "Products" on the service with args: "1"
46
47
  When I run the query
47
48
  Then the first result should have a method: "Category"
@@ -1,3 +1,4 @@
1
+ @service_manage
1
2
  Feature: Service management
2
3
  In order to manage entities
3
4
  As a admin
@@ -9,7 +10,7 @@ Background:
9
10
 
10
11
  Scenario: Service should respond to AddToEntityName for adding objects
11
12
  Given I call "AddToProducts" on the service with a new "Product" object with Name: "Sample Product"
12
- When I save changes
13
+ When I save changes within a cassette named "service_manage_additions"
13
14
  Then the first save result should be of type "Product"
14
15
  And the method "Name" on the first save result should equal: "Sample Product"
15
16
 
@@ -19,7 +20,7 @@ Scenario: Service should allow for deletes
19
20
  Then the first save result should be of type "Product"
20
21
  When I call "delete_object" on the service with the first last save result
21
22
  And I save changes
22
- Then the save result should equal: "true"
23
+ Then the save result should equal: "true"
23
24
  And no "Products" should exist
24
25
 
25
26
  Scenario: Untracked entities shouldn't be able to be deleted
@@ -29,7 +30,7 @@ Scenario: Entities should be able to be updated
29
30
  Given I call "AddToProducts" on the service with a new "Product" object with Name: "Test Product"
30
31
  When I save changes
31
32
  And I call "Products" on the service with args: "1"
32
- And I run the query
33
+ And I run the query within a cassette named "service_manage_deletions"
33
34
  Then the method "Name" on the first result should equal: "Test Product"
34
35
  When I set "Name" on the first result to "Changed Test Product"
35
36
  Then the method "Name" on the first result should equal: "Changed Test Product"
@@ -37,7 +38,7 @@ Scenario: Entities should be able to be updated
37
38
  And I save changes
38
39
  Then the save result should equal: "true"
39
40
  When I call "Products" on the service with args: "1"
40
- And I run the query
41
+ And I run the query within a cassette named "service_manage_deletions_2"
41
42
  Then the method "Name" on the first result should equal: "Changed Test Product"
42
43
 
43
44
  Scenario: Untracked entities shouldn't be able to be updated
@@ -47,7 +48,7 @@ Scenario: Related entities shouldn't be recreated on a child add
47
48
  Given I call "AddToCategories" on the service with a new "Category" object with Name: "Test Category"
48
49
  And I save changes
49
50
  And I call "AddToProducts" on the service with a new "Product" object with Category: "@@LastSave.first"
50
- And I save changes
51
+ And I save changes
51
52
  And I call "Products" on the service with args: "1"
52
53
  And I expand the query to include "Category"
53
54
  When I run the query