spark_api 1.4.29 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/spark_api/authentication/api_auth.rb +1 -1
- data/lib/spark_api/authentication/oauth2.rb +1 -1
- data/lib/spark_api/authentication/oauth2_impl/grant_type_base.rb +1 -1
- data/lib/spark_api/client.rb +2 -2
- data/lib/spark_api/models.rb +2 -0
- data/lib/spark_api/models/floplan.rb +24 -0
- data/lib/spark_api/models/listing.rb +11 -1
- data/lib/spark_api/models/media.rb +30 -0
- data/lib/spark_api/models/subresource.rb +2 -2
- data/lib/spark_api/models/video.rb +108 -0
- data/lib/spark_api/models/virtual_tour.rb +16 -0
- data/lib/spark_api/request.rb +2 -2
- data/script/reso_middleware_example.rb +70 -0
- data/spec/fixtures/listings/floplans_index.json +15 -0
- data/spec/spec_helper.rb +9 -4
- data/spec/unit/spark_api/authentication/api_auth_spec.rb +21 -22
- data/spec/unit/spark_api/authentication/base_auth_spec.rb +3 -3
- data/spec/unit/spark_api/authentication/oauth2_impl/faraday_middleware_spec.rb +1 -1
- data/spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb +1 -1
- data/spec/unit/spark_api/authentication/oauth2_impl/single_session_provider_spec.rb +2 -2
- data/spec/unit/spark_api/authentication/oauth2_spec.rb +40 -40
- data/spec/unit/spark_api/authentication_spec.rb +2 -2
- data/spec/unit/spark_api/configuration/yaml_spec.rb +44 -44
- data/spec/unit/spark_api/configuration_spec.rb +56 -57
- data/spec/unit/spark_api/faraday_middleware_spec.rb +12 -12
- data/spec/unit/spark_api/models/account_spec.rb +20 -20
- data/spec/unit/spark_api/models/activity_spec.rb +5 -5
- data/spec/unit/spark_api/models/base_spec.rb +32 -32
- data/spec/unit/spark_api/models/concerns/destroyable_spec.rb +2 -2
- data/spec/unit/spark_api/models/concerns/savable_spec.rb +19 -19
- data/spec/unit/spark_api/models/connect_prefs_spec.rb +1 -1
- data/spec/unit/spark_api/models/constraint_spec.rb +1 -1
- data/spec/unit/spark_api/models/contact_spec.rb +50 -50
- data/spec/unit/spark_api/models/dirty_spec.rb +12 -12
- data/spec/unit/spark_api/models/document_spec.rb +3 -3
- data/spec/unit/spark_api/models/fields_spec.rb +17 -17
- data/spec/unit/spark_api/models/finders_spec.rb +7 -7
- data/spec/unit/spark_api/models/floplan_spec.rb +24 -0
- data/spec/unit/spark_api/models/listing_cart_spec.rb +46 -46
- data/spec/unit/spark_api/models/listing_meta_translations_spec.rb +6 -6
- data/spec/unit/spark_api/models/listing_spec.rb +91 -91
- data/spec/unit/spark_api/models/message_spec.rb +10 -10
- data/spec/unit/spark_api/models/note_spec.rb +10 -10
- data/spec/unit/spark_api/models/notification_spec.rb +6 -6
- data/spec/unit/spark_api/models/open_house_spec.rb +4 -4
- data/spec/unit/spark_api/models/photo_spec.rb +8 -8
- data/spec/unit/spark_api/models/portal_spec.rb +4 -4
- data/spec/unit/spark_api/models/property_types_spec.rb +5 -5
- data/spec/unit/spark_api/models/rental_calendar_spec.rb +13 -11
- data/spec/unit/spark_api/models/rule_spec.rb +2 -2
- data/spec/unit/spark_api/models/saved_search_spec.rb +33 -33
- data/spec/unit/spark_api/models/search_template/quick_search_spec.rb +5 -5
- data/spec/unit/spark_api/models/shared_listing_spec.rb +12 -12
- data/spec/unit/spark_api/models/sort_spec.rb +3 -3
- data/spec/unit/spark_api/models/standard_fields_spec.rb +12 -12
- data/spec/unit/spark_api/models/subresource_spec.rb +33 -15
- data/spec/unit/spark_api/models/system_info_spec.rb +7 -7
- data/spec/unit/spark_api/models/tour_of_home_spec.rb +3 -3
- data/spec/unit/spark_api/models/video_spec.rb +9 -9
- data/spec/unit/spark_api/models/virtual_tour_spec.rb +7 -7
- data/spec/unit/spark_api/models/vow_account_spec.rb +8 -8
- data/spec/unit/spark_api/multi_client_spec.rb +14 -14
- data/spec/unit/spark_api/options_hash_spec.rb +4 -4
- data/spec/unit/spark_api/paginate_spec.rb +71 -71
- data/spec/unit/spark_api/primary_array_spec.rb +5 -5
- data/spec/unit/spark_api/request_spec.rb +65 -59
- data/spec/unit/spark_api_spec.rb +6 -6
- metadata +184 -248
@@ -3,18 +3,18 @@ require './spec/spec_helper'
|
|
3
3
|
describe SparkApi::Client, "Client config" do
|
4
4
|
describe "default settings" do
|
5
5
|
it "should return the proper defaults when called with no arguments" do
|
6
|
-
SparkApi.api_key.
|
7
|
-
SparkApi.api_secret.
|
8
|
-
SparkApi.version.
|
9
|
-
SparkApi.ssl_verify.
|
10
|
-
SparkApi.auth_endpoint.
|
11
|
-
SparkApi.endpoint.
|
12
|
-
SparkApi.user_agent.
|
6
|
+
expect(SparkApi.api_key).to be_nil
|
7
|
+
expect(SparkApi.api_secret).to be_nil
|
8
|
+
expect(SparkApi.version).to match("v1")
|
9
|
+
expect(SparkApi.ssl_verify).to be true
|
10
|
+
expect(SparkApi.auth_endpoint).to match("sparkplatform.com/openid")
|
11
|
+
expect(SparkApi.endpoint).to match("api.sparkapi.com")
|
12
|
+
expect(SparkApi.user_agent).to match(/Spark API Ruby Gem .*/)
|
13
13
|
SparkApi.api_key = "my_api_key"
|
14
|
-
SparkApi.api_key.
|
15
|
-
SparkApi.timeout.
|
16
|
-
SparkApi.request_id_chain.
|
17
|
-
SparkApi.middleware.
|
14
|
+
expect(SparkApi.api_key).to match("my_api_key")
|
15
|
+
expect(SparkApi.timeout).to eq(5)
|
16
|
+
expect(SparkApi.request_id_chain).to be_nil
|
17
|
+
expect(SparkApi.middleware).to eq('spark_api')
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -28,30 +28,30 @@ describe SparkApi::Client, "Client config" do
|
|
28
28
|
:timeout => 15,
|
29
29
|
:request_id_chain => 'foobar')
|
30
30
|
|
31
|
-
client.api_key.
|
32
|
-
client.api_secret.
|
33
|
-
client.api_user.
|
34
|
-
client.auth_endpoint.
|
35
|
-
client.endpoint.
|
36
|
-
client.version.
|
37
|
-
client.timeout.
|
38
|
-
client.request_id_chain.
|
31
|
+
expect(client.api_key).to match("key_of_wade")
|
32
|
+
expect(client.api_secret).to match("TopSecret")
|
33
|
+
expect(client.api_user).to match("1234")
|
34
|
+
expect(client.auth_endpoint).to match("https://login.wade.dev.fbsdata.com")
|
35
|
+
expect(client.endpoint).to match("http://api.wade.dev.fbsdata.com")
|
36
|
+
expect(client.version).to match("v1")
|
37
|
+
expect(client.timeout).to eq(15)
|
38
|
+
expect(client.request_id_chain).to eq('foobar')
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should allow unverified ssl certificates when verification is off" do
|
42
42
|
client = SparkApi::Client.new(:auth_endpoint => "https://login.wade.dev.fbsdata.com",
|
43
43
|
:endpoint => "https://api.wade.dev.fbsdata.com",
|
44
44
|
:ssl_verify => false)
|
45
|
-
client.ssl_verify.
|
46
|
-
client.connection.ssl.verify.
|
45
|
+
expect(client.ssl_verify).to be false
|
46
|
+
expect(client.connection.ssl.verify).to be false
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should allow restrict ssl certificates when verification is on" do
|
50
50
|
client = SparkApi::Client.new(:auth_endpoint => "https://login.wade.dev.fbsdata.com",
|
51
51
|
:endpoint => "https://api.wade.dev.fbsdata.com",
|
52
52
|
:ssl_verify => true)
|
53
|
-
client.ssl_verify.
|
54
|
-
client.connection.ssl.
|
53
|
+
expect(client.ssl_verify).to be true
|
54
|
+
expect(client.connection.ssl).to be_empty
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -67,11 +67,11 @@ describe SparkApi::Client, "Client config" do
|
|
67
67
|
|
68
68
|
it "should convert the configuration to oauth2 when specified" do
|
69
69
|
oauth2_client.oauthify!
|
70
|
-
oauth2_client.oauth2_provider.
|
70
|
+
expect(oauth2_client.oauth2_provider).to be_a(SparkApi::Authentication::SimpleProvider)
|
71
71
|
end
|
72
72
|
|
73
73
|
it "should say oauth2_enabled? when it is" do
|
74
|
-
oauth2_client.oauth2_enabled?().
|
74
|
+
expect(oauth2_client.oauth2_enabled?()).to be true
|
75
75
|
end
|
76
76
|
|
77
77
|
it "should say oauth2_enabled? is false" do
|
@@ -80,11 +80,11 @@ describe SparkApi::Client, "Client config" do
|
|
80
80
|
:callback => "http://wade.dev.fbsdata.com/callback",
|
81
81
|
:auth_endpoint => "https://login.wade.dev.fbsdata.com",
|
82
82
|
:endpoint => "http://api.wade.dev.fbsdata.com")
|
83
|
-
client.oauth2_enabled?().
|
83
|
+
expect(client.oauth2_enabled?()).to be false
|
84
84
|
end
|
85
85
|
|
86
86
|
it "should properly build a grant_uri from the endpoint" do
|
87
|
-
oauth2_client.grant_uri.
|
87
|
+
expect(oauth2_client.grant_uri).to eq("http://api.wade.dev.fbsdata.com/v1/oauth2/grant")
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -100,14 +100,14 @@ describe SparkApi::Client, "Client config" do
|
|
100
100
|
config.timeout = 15
|
101
101
|
end
|
102
102
|
|
103
|
-
SparkApi.api_key.
|
104
|
-
SparkApi.api_secret.
|
105
|
-
SparkApi.api_user.
|
106
|
-
SparkApi.version.
|
107
|
-
SparkApi.endpoint.
|
108
|
-
SparkApi.user_agent.
|
109
|
-
SparkApi.oauth2_enabled?().
|
110
|
-
SparkApi.timeout.
|
103
|
+
expect(SparkApi.api_key).to match("my_key")
|
104
|
+
expect(SparkApi.api_secret).to match("my_secret")
|
105
|
+
expect(SparkApi.api_user).to match("1234")
|
106
|
+
expect(SparkApi.version).to match("veleventy")
|
107
|
+
expect(SparkApi.endpoint).to match("test.api.sparkapi.com")
|
108
|
+
expect(SparkApi.user_agent).to match("my useragent")
|
109
|
+
expect(SparkApi.oauth2_enabled?()).to be false
|
110
|
+
expect(SparkApi.timeout).to eq(15)
|
111
111
|
end
|
112
112
|
|
113
113
|
it "should correctly set up the client for oauth2" do
|
@@ -120,7 +120,7 @@ describe SparkApi::Client, "Client config" do
|
|
120
120
|
config.user_agent = "my useragent"
|
121
121
|
config.authentication_mode = SparkApi::Authentication::OAuth2
|
122
122
|
end
|
123
|
-
SparkApi.oauth2_enabled?().
|
123
|
+
expect(SparkApi.oauth2_enabled?()).to be true
|
124
124
|
end
|
125
125
|
|
126
126
|
it "should reset" do
|
@@ -133,12 +133,11 @@ describe SparkApi::Client, "Client config" do
|
|
133
133
|
config.request_id_chain = 'foobar'
|
134
134
|
end
|
135
135
|
|
136
|
-
SparkApi.api_key.
|
137
|
-
SparkApi.request_id_chain.
|
136
|
+
expect(SparkApi.api_key).to match("my_key")
|
137
|
+
expect(SparkApi.request_id_chain).to eq("foobar")
|
138
138
|
SparkApi.reset
|
139
|
-
SparkApi.api_key.
|
140
|
-
SparkApi.request_id_chain.
|
141
|
-
|
139
|
+
expect(SparkApi.api_key).to eq(SparkApi::Configuration::DEFAULT_API_KEY)
|
140
|
+
expect(SparkApi.request_id_chain).to eq(SparkApi::Configuration::DEFAULT_REQUEST_ID_CHAIN)
|
142
141
|
end
|
143
142
|
end
|
144
143
|
|
@@ -152,7 +151,7 @@ describe SparkApi::Client, "Client config" do
|
|
152
151
|
}).
|
153
152
|
to_return(:body => '{"D":{"Success": true,"Results": [{"SSL":false}]}}')
|
154
153
|
|
155
|
-
SparkApi.client.get('/connections')[0]["SSL"].
|
154
|
+
expect(SparkApi.client.get('/connections')[0]["SSL"]).to eq(false)
|
156
155
|
end
|
157
156
|
|
158
157
|
it "should use https when ssl is enabled" do
|
@@ -165,7 +164,7 @@ describe SparkApi::Client, "Client config" do
|
|
165
164
|
to_return(:body => '{"D":{"Success": true,"Results": [{"SSL":true}]}}')
|
166
165
|
|
167
166
|
c = SparkApi::Client.new(:endpoint => "https://api.sparkapi.com", :ssl => true)
|
168
|
-
c.get('/connections')[0]["SSL"].
|
167
|
+
expect(c.get('/connections')[0]["SSL"]).to eq(true)
|
169
168
|
end
|
170
169
|
|
171
170
|
it "should have correct headers based on configuration" do
|
@@ -182,7 +181,7 @@ describe SparkApi::Client, "Client config" do
|
|
182
181
|
config.user_agent = "my useragent"
|
183
182
|
end
|
184
183
|
SparkApi.client.get '/headers'
|
185
|
-
WebMock.
|
184
|
+
expect(WebMock).to have_requested(:get, "#{SparkApi.endpoint}/#{SparkApi.version}/headers?ApiUser=foobar&ApiSig=717a066c4f4302c5ca9507e484db4812&AuthToken=c401736bf3d3f754f07c04e460e09573").
|
186
185
|
with(:headers => {
|
187
186
|
'User-Agent' => SparkApi::Configuration::DEFAULT_USER_AGENT,
|
188
187
|
SparkApi::Configuration::X_SPARK_API_USER_AGENT => "my useragent",
|
@@ -206,7 +205,7 @@ describe SparkApi::Client, "Client config" do
|
|
206
205
|
config.request_id_chain = 'foobar'
|
207
206
|
end
|
208
207
|
SparkApi.client.get '/headers'
|
209
|
-
WebMock.
|
208
|
+
expect(WebMock).to have_requested(:get, "#{SparkApi.endpoint}/#{SparkApi.version}/headers?ApiUser=foobar&ApiSig=717a066c4f4302c5ca9507e484db4812&AuthToken=c401736bf3d3f754f07c04e460e09573").
|
210
209
|
with(:headers => {
|
211
210
|
'User-Agent' => SparkApi::Configuration::DEFAULT_USER_AGENT,
|
212
211
|
SparkApi::Configuration::X_SPARK_API_USER_AGENT => "my useragent",
|
@@ -218,24 +217,24 @@ describe SparkApi::Client, "Client config" do
|
|
218
217
|
|
219
218
|
it "should not set gzip header by default" do
|
220
219
|
c = SparkApi::Client.new(:endpoint => "https://sparkapi.com")
|
221
|
-
c.connection.headers["Accept-Encoding"].
|
220
|
+
expect(c.connection.headers["Accept-Encoding"]).to be_nil
|
222
221
|
end
|
223
222
|
|
224
223
|
it "should set gzip header if compress option is set" do
|
225
224
|
c = SparkApi::Client.new(:endpoint => "https://api.sparkapi.com",
|
226
225
|
:compress => true)
|
227
|
-
c.connection.headers["Accept-Encoding"].
|
226
|
+
expect(c.connection.headers["Accept-Encoding"]).to eq("gzip, deflate")
|
228
227
|
end
|
229
228
|
|
230
229
|
it "should set default timeout of 5 seconds" do
|
231
230
|
c = SparkApi::Client.new(:endpoint => "https://sparkapi.com")
|
232
|
-
c.connection.options[:timeout].
|
231
|
+
expect(c.connection.options[:timeout]).to eq(5)
|
233
232
|
end
|
234
233
|
|
235
234
|
it "should set alternate timeout if specified" do
|
236
235
|
c = SparkApi::Client.new(:endpoint => "https://sparkapi.com",
|
237
236
|
:timeout => 15)
|
238
|
-
c.connection.options[:timeout].
|
237
|
+
expect(c.connection.options[:timeout]).to eq(15)
|
239
238
|
end
|
240
239
|
end
|
241
240
|
|
@@ -250,14 +249,14 @@ describe SparkApi::Client, "Client config" do
|
|
250
249
|
:middleware => 'reso_api',
|
251
250
|
:dictionary_version => '1.6')
|
252
251
|
|
253
|
-
client.api_key.
|
254
|
-
client.api_secret.
|
255
|
-
client.api_user.
|
256
|
-
client.endpoint.
|
257
|
-
client.timeout.
|
258
|
-
client.request_id_chain.
|
259
|
-
client.middleware.
|
260
|
-
client.dictionary_version.
|
252
|
+
expect(client.api_key).to match("key_of_cody")
|
253
|
+
expect(client.api_secret).to match("TopSecret")
|
254
|
+
expect(client.api_user).to match("1234")
|
255
|
+
expect(client.endpoint).to match("http://api.coolio.dev.fbsdata.com")
|
256
|
+
expect(client.timeout).to eq(15)
|
257
|
+
expect(client.request_id_chain).to eq('foobar')
|
258
|
+
expect(client.middleware).to eq('reso_api')
|
259
|
+
expect(client.dictionary_version).to eq('1.6')
|
261
260
|
end
|
262
261
|
end
|
263
262
|
end
|
@@ -64,13 +64,13 @@ describe SparkApi do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should raised exception when token is expired" do
|
67
|
-
expect { @connection.get('/expired')}.to raise_error(SparkApi::PermissionDenied){ |e| e.code.
|
67
|
+
expect { @connection.get('/expired')}.to raise_error(SparkApi::PermissionDenied){ |e| expect(e.code).to eq(SparkApi::ResponseCodes::SESSION_TOKEN_EXPIRED) }
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should raised exception on error" do
|
71
|
-
expect { @connection.get('/methodnotallowed')}.to raise_error(SparkApi::NotAllowed){ |e| e.message.
|
72
|
-
expect { @connection.get('/epicfail')}.to raise_error(SparkApi::ClientError){ |e| e.status.
|
73
|
-
expect { @connection.get('/unknownerror')}.to raise_error(SparkApi::ClientError){ |e| e.status.
|
71
|
+
expect { @connection.get('/methodnotallowed')}.to raise_error(SparkApi::NotAllowed){ |e| expect(e.message).to eq("Method Not Allowed") }
|
72
|
+
expect { @connection.get('/epicfail')}.to raise_error(SparkApi::ClientError){ |e| expect(e.status).to be(500) }
|
73
|
+
expect { @connection.get('/unknownerror')}.to raise_error(SparkApi::ClientError){ |e| expect(e.status).to be(499) }
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should raised exception on invalid responses" do
|
@@ -81,20 +81,20 @@ describe SparkApi do
|
|
81
81
|
|
82
82
|
it "should give me a session response" do
|
83
83
|
response = @connection.post('/session').body
|
84
|
-
response.success.
|
84
|
+
expect(response.success).to eq(true)
|
85
85
|
session = SparkApi::Authentication::Session.new(response.results[0])
|
86
|
-
session.auth_token.
|
86
|
+
expect(session.auth_token).to eq("xxxxx")
|
87
87
|
end
|
88
88
|
|
89
89
|
it "should give me an api response" do
|
90
90
|
response = @connection.get('/system').body
|
91
|
-
response.success.
|
92
|
-
response.results.length.
|
91
|
+
expect(response.success).to eq(true)
|
92
|
+
expect(response.results.length).to be > 0
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should include the errors in the response" do
|
96
96
|
expect { @connection.get('/badresourcerequest')}.to raise_error(SparkApi::BadResourceRequest){ |e|
|
97
|
-
e.errors.
|
97
|
+
expect(e.errors).to eq("Some errors and stuff.")
|
98
98
|
}
|
99
99
|
end
|
100
100
|
|
@@ -111,7 +111,7 @@ describe SparkApi do
|
|
111
111
|
:response_headers => {}
|
112
112
|
}
|
113
113
|
|
114
|
-
middleware.decompress_body(env).
|
114
|
+
expect(middleware.decompress_body(env)).to eq("UNCOMPRESSED")
|
115
115
|
end
|
116
116
|
|
117
117
|
it "should unzip gzipped data" do
|
@@ -129,7 +129,7 @@ describe SparkApi do
|
|
129
129
|
}
|
130
130
|
}
|
131
131
|
|
132
|
-
middleware.decompress_body(env).
|
132
|
+
expect(middleware.decompress_body(env)).to eq(bod)
|
133
133
|
end
|
134
134
|
|
135
135
|
it "should inflate deflated data" do
|
@@ -143,7 +143,7 @@ describe SparkApi do
|
|
143
143
|
}
|
144
144
|
}
|
145
145
|
|
146
|
-
middleware.decompress_body(env).
|
146
|
+
expect(middleware.decompress_body(env)).to eq(bod)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
@@ -101,20 +101,20 @@ describe Account do
|
|
101
101
|
|
102
102
|
it "should respond to attributes" do
|
103
103
|
['Name','Id','Mls','MlsId','Office'].each do |k|
|
104
|
-
(@account.send k.to_sym).
|
104
|
+
expect(@account.send k.to_sym).to be_a(String)
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
108
|
it "should have primary subresources" do
|
109
|
-
@account.emails.primary.Address.
|
110
|
-
@account.phones.primary.Number.
|
111
|
-
@account.addresses.primary.Address.
|
112
|
-
@account.websites.primary.Uri.
|
109
|
+
expect(@account.emails.primary.Address).to eq("work@test.com")
|
110
|
+
expect(@account.phones.primary.Number).to eq("701-555-1212")
|
111
|
+
expect(@account.addresses.primary.Address).to eq("101 Main Ave, Phoenix, AZ 12345")
|
112
|
+
expect(@account.websites.primary.Uri).to eq("http://iamthebestagent.com")
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should be able to provide a primary image" do
|
116
|
-
@account.primary_img("Photo").Name.
|
117
|
-
@account.primary_img("Logo").Name.
|
116
|
+
expect(@account.primary_img("Photo").Name).to eq('My Photo 1')
|
117
|
+
expect(@account.primary_img("Logo").Name).to eq('1 My Logo')
|
118
118
|
end
|
119
119
|
|
120
120
|
after(:each) do
|
@@ -131,19 +131,19 @@ describe Account do
|
|
131
131
|
on_get_it "should get my account" do
|
132
132
|
stub_api_get("/my/account", 'accounts/my.json')
|
133
133
|
account = Account.my
|
134
|
-
account.Id.
|
135
|
-
account.websites.first.Name.
|
134
|
+
expect(account.Id).to eq("20000426173054342350000000")
|
135
|
+
expect(account.websites.first.Name).to eq('My Work Website')
|
136
136
|
end
|
137
137
|
|
138
138
|
on_put_it "should save my portal account" do
|
139
139
|
stub_api_get("/my/account", 'accounts/my_portal.json')
|
140
140
|
stub_api_put("/my/account", 'accounts/my_save.json', 'accounts/my_put.json')
|
141
141
|
account = Account.my
|
142
|
-
account.Id.
|
143
|
-
account.GetEmailUpdates.
|
142
|
+
expect(account.Id).to eq("20110426173054342350000000")
|
143
|
+
expect(account.GetEmailUpdates).to eq(false)
|
144
144
|
account.GetEmailUpdates = true
|
145
145
|
account.save!
|
146
|
-
account.GetEmailUpdates.
|
146
|
+
expect(account.GetEmailUpdates).to eq(true)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
@@ -151,10 +151,10 @@ describe Account do
|
|
151
151
|
on_get_it "should get all accounts" do
|
152
152
|
stub_api_get("/accounts", 'accounts/all.json')
|
153
153
|
accounts = Account.get
|
154
|
-
accounts.
|
155
|
-
accounts.length.
|
156
|
-
accounts.first.Id.
|
157
|
-
accounts.last.Id.
|
154
|
+
expect(accounts).to be_an(Array)
|
155
|
+
expect(accounts.length).to eq(3)
|
156
|
+
expect(accounts.first.Id).to eq("20000426173054342350000000")
|
157
|
+
expect(accounts.last.Id).to eq("20110126173054382350000000")
|
158
158
|
end
|
159
159
|
on_put_it "should save password" do
|
160
160
|
stub_api_get("/my/account", 'accounts/my.json')
|
@@ -162,7 +162,7 @@ describe Account do
|
|
162
162
|
stub_api_put("/accounts/#{account.Id}", 'accounts/password_save.json', 'accounts/my.json')
|
163
163
|
account.Password = "1"
|
164
164
|
account.PasswordValidation = "1"
|
165
|
-
account.save.
|
165
|
+
expect(account.save).to be(true)
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
@@ -170,10 +170,10 @@ describe Account do
|
|
170
170
|
on_get_it "should all office accounts" do
|
171
171
|
stub_api_get("/accounts/by/office/20030426173014239760000000", 'accounts/office.json')
|
172
172
|
accounts = Account.by_office("20030426173014239760000000")
|
173
|
-
accounts.
|
174
|
-
accounts.length.
|
173
|
+
expect(accounts).to be_an(Array)
|
174
|
+
expect(accounts.length).to eq(2)
|
175
175
|
accounts.each do |account|
|
176
|
-
accounts.first.OfficeId.
|
176
|
+
expect(accounts.first.OfficeId).to eq("20030426173014239760000000")
|
177
177
|
end
|
178
178
|
end
|
179
179
|
end
|
@@ -10,9 +10,9 @@ describe Activity do
|
|
10
10
|
it "gets a current user's activities" do
|
11
11
|
s = stub_api_get("/activities", "activities/get.json")
|
12
12
|
activities = Activity.get
|
13
|
-
activities.
|
14
|
-
activities.size.
|
15
|
-
s.
|
13
|
+
expect(activities).to be_an(Array)
|
14
|
+
expect(activities.size).to eq(2)
|
15
|
+
expect(s).to have_been_requested
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -21,8 +21,8 @@ describe Activity do
|
|
21
21
|
it "gets an individual activity" do
|
22
22
|
s = stub_api_get("/activities/#{id}", "activities/get.json")
|
23
23
|
activity = Activity.find(id)
|
24
|
-
activity.
|
25
|
-
s.
|
24
|
+
expect(activity).to be_an(Activity)
|
25
|
+
expect(s).to have_been_requested
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -22,31 +22,31 @@ describe MyExampleModel, "Example model" do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it "should be persisted" do
|
25
|
-
@model.persisted
|
25
|
+
expect(@model.persisted?).to eq(true)
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should not be persisted" do
|
29
29
|
@new_model = MyExampleModel.new()
|
30
|
-
@new_model.persisted
|
30
|
+
expect(@new_model.persisted?).to eq(false)
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should parse and return ResourceUri without v1" do
|
34
|
-
@model.resource_uri.
|
34
|
+
expect(@model.resource_uri).to eq("/some/place/20101230223226074201000000")
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should parse and return the correct path for a persisted resource" do
|
38
|
-
@model.path.
|
38
|
+
expect(@model.path).to eq("/some/place")
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should parse and return the correct path" do
|
42
42
|
@model = MyExampleModel.new
|
43
|
-
@model.path.
|
43
|
+
expect(@model.path).to eq("/test/example")
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should parse and return the correct path for resource with a parent" do
|
47
47
|
@model = MyExampleModel.new
|
48
48
|
@model.parent = Contact.new({ :Id => "20101230223226074201000000" })
|
49
|
-
@model.path.
|
49
|
+
expect(@model.path).to eq("/contacts/20101230223226074201000000/test/example")
|
50
50
|
end
|
51
51
|
|
52
52
|
end
|
@@ -55,16 +55,16 @@ describe Base, "Base model" do
|
|
55
55
|
|
56
56
|
describe "class methods" do
|
57
57
|
it "should set the element name" do
|
58
|
-
MyExampleModel.element_name.
|
59
|
-
MyDefaultModel.element_name.
|
58
|
+
expect(MyExampleModel.element_name).to eq("example")
|
59
|
+
expect(MyDefaultModel.element_name).to eq("resource")
|
60
60
|
end
|
61
61
|
it "should set the prefix" do
|
62
|
-
MyExampleModel.prefix.
|
63
|
-
MyDefaultModel.prefix.
|
62
|
+
expect(MyExampleModel.prefix).to eq("/test/")
|
63
|
+
expect(MyDefaultModel.prefix).to eq("/")
|
64
64
|
end
|
65
65
|
it "should set the path" do
|
66
|
-
MyExampleModel.path.
|
67
|
-
MyDefaultModel.path.
|
66
|
+
expect(MyExampleModel.path).to eq("/test/example")
|
67
|
+
expect(MyDefaultModel.path).to eq("/resource")
|
68
68
|
end
|
69
69
|
describe "finders" do
|
70
70
|
before(:each) do
|
@@ -72,11 +72,11 @@ describe Base, "Base model" do
|
|
72
72
|
stub_api_get("/test/example", 'base.json')
|
73
73
|
end
|
74
74
|
it "should get all results" do
|
75
|
-
MyExampleModel.get.length.
|
75
|
+
expect(MyExampleModel.get.length).to eq(2)
|
76
76
|
end
|
77
77
|
it "should get first result" do
|
78
|
-
MyExampleModel.first.Id.
|
79
|
-
MyExampleModel.first.Id.
|
78
|
+
expect(MyExampleModel.first.Id).to eq(1)
|
79
|
+
expect(MyExampleModel.first.Id).to eq(MyExampleModel.first.id)
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
@@ -89,71 +89,71 @@ describe Base, "Base model" do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
it "should access existing attributes" do
|
92
|
-
@model.Name.
|
92
|
+
expect(@model.Name).to eq('My Example')
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should raise errors on access to non-existant attributes" do
|
96
|
-
|
96
|
+
expect { @model.Nonsense }.to raise_error(NoMethodError)
|
97
97
|
end
|
98
98
|
|
99
99
|
it "should set existing attributes" do
|
100
100
|
new_name = 'John Jacob Jingleheimerschmidt'
|
101
101
|
@model.Name = new_name
|
102
|
-
@model.Name.
|
102
|
+
expect(@model.Name).to eq(new_name)
|
103
103
|
end
|
104
104
|
|
105
105
|
it "should set non-existant attributes" do
|
106
106
|
nonsense = 'nonsense'
|
107
107
|
@model.Nonsense = nonsense
|
108
|
-
@model.Nonsense.
|
108
|
+
expect(@model.Nonsense).to eq(nonsense)
|
109
109
|
end
|
110
110
|
|
111
111
|
it "should return a boolean for a predicate for an existing attribute" do
|
112
|
-
@model.Name
|
112
|
+
expect(@model.Name?).to satisfy { |p| [true, false].include?(p) }
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should return a boolean for whether or not a model is persisted through the api" do
|
116
|
-
@model.persisted
|
116
|
+
expect(@model.persisted?).to satisfy { |p| [true, false].include?(p) }
|
117
117
|
end
|
118
118
|
|
119
119
|
it "should raise an Error for a predicate for a non-existant attribute" do
|
120
|
-
|
120
|
+
expect { @model.Nonsense? }.to raise_error(NoMethodError)
|
121
121
|
end
|
122
122
|
|
123
123
|
it "should repond_to existing attributes" do
|
124
|
-
@model.
|
124
|
+
expect(@model).to respond_to(:Name)
|
125
125
|
end
|
126
126
|
|
127
127
|
it "should not respond_to non-existant attributes" do
|
128
|
-
@model.
|
128
|
+
expect(@model).not_to respond_to(:Nonsense)
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should respond_to a setter for an existing attribute" do
|
132
|
-
@model.
|
132
|
+
expect(@model).to respond_to(:Name=)
|
133
133
|
end
|
134
134
|
|
135
135
|
it "should respond_to a setter for a non-existant attribute" do
|
136
|
-
@model.
|
136
|
+
expect(@model).to respond_to(:Nonsense=)
|
137
137
|
end
|
138
138
|
|
139
139
|
it "should respond_to a predicate for an existing attribute" do
|
140
|
-
@model.
|
140
|
+
expect(@model).to respond_to(:Name?)
|
141
141
|
end
|
142
142
|
|
143
143
|
it "should not respond_to a predicate for a non-existant attribute" do
|
144
|
-
@model.
|
144
|
+
expect(@model).not_to respond_to(:Nonsense?)
|
145
145
|
end
|
146
146
|
|
147
147
|
it "should respond_to methods inherited from parent classes" do
|
148
|
-
@model.
|
148
|
+
expect(@model).to respond_to(:freeze)
|
149
149
|
end
|
150
150
|
|
151
151
|
it "should respond_to a will_change! method for an existing attribute" do
|
152
|
-
@model.
|
152
|
+
expect(@model).to respond_to(:Name_will_change!)
|
153
153
|
end
|
154
154
|
|
155
155
|
it "should not respond_to a will_change! method for a non-existant attribute" do
|
156
|
-
@model.
|
156
|
+
expect(@model).not_to respond_to(:Nonsense_will_change!)
|
157
157
|
end
|
158
158
|
|
159
159
|
end
|
@@ -161,7 +161,7 @@ describe Base, "Base model" do
|
|
161
161
|
describe "to_partial_path" do
|
162
162
|
it "should return the partial path" do
|
163
163
|
model = MyExampleModel.new()
|
164
|
-
model.to_partial_path.
|
164
|
+
expect(model.to_partial_path).to eq("my_example_models/my_example_model")
|
165
165
|
end
|
166
166
|
end
|
167
167
|
|