flexmls_api 0.3.6 → 0.4.5
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.
- data/Gemfile +6 -6
- data/Gemfile.lock +6 -6
- data/README.md +5 -3
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/lib/flexmls_api/authentication.rb +25 -54
- data/lib/flexmls_api/authentication/api_auth.rb +100 -0
- data/lib/flexmls_api/authentication/base_auth.rb +47 -0
- data/lib/flexmls_api/authentication/oauth2.rb +219 -0
- data/lib/flexmls_api/client.rb +7 -1
- data/lib/flexmls_api/configuration.rb +5 -2
- data/lib/flexmls_api/faraday.rb +6 -2
- data/lib/flexmls_api/models.rb +2 -0
- data/lib/flexmls_api/models/base.rb +5 -1
- data/lib/flexmls_api/models/contact.rb +1 -0
- data/lib/flexmls_api/models/custom_fields.rb +2 -2
- data/lib/flexmls_api/models/finders.rb +2 -2
- data/lib/flexmls_api/models/idx_link.rb +1 -1
- data/lib/flexmls_api/models/listing.rb +31 -5
- data/lib/flexmls_api/models/market_statistics.rb +1 -1
- data/lib/flexmls_api/models/note.rb +43 -0
- data/lib/flexmls_api/models/standard_fields.rb +43 -0
- data/lib/flexmls_api/models/subresource.rb +5 -2
- data/lib/flexmls_api/models/system_info.rb +7 -0
- data/lib/flexmls_api/models/tour_of_home.rb +24 -0
- data/lib/flexmls_api/request.rb +13 -28
- data/spec/fixtures/add_note.json +11 -0
- data/spec/fixtures/agent_shared_note.json +11 -0
- data/spec/fixtures/agent_shared_note_empty.json +7 -0
- data/spec/fixtures/authentication_failure.json +7 -0
- data/spec/fixtures/count.json +10 -0
- data/spec/fixtures/errors/expired.json +7 -0
- data/spec/fixtures/generic_delete.json +1 -0
- data/spec/fixtures/generic_failure.json +5 -0
- data/spec/fixtures/oauth2_access.json +3 -0
- data/spec/fixtures/oauth2_error.json +3 -0
- data/spec/fixtures/session.json +1 -1
- data/spec/fixtures/standardfields.json +188 -0
- data/spec/fixtures/standardfields_city.json +1031 -0
- data/spec/fixtures/standardfields_nearby.json +53 -0
- data/spec/fixtures/standardfields_stateorprovince.json +36 -0
- data/spec/fixtures/tour_of_homes.json +23 -0
- data/spec/spec_helper.rb +22 -5
- data/spec/unit/flexmls_api/authentication/api_auth_spec.rb +159 -0
- data/spec/unit/flexmls_api/authentication/oauth2_spec.rb +183 -0
- data/spec/unit/flexmls_api/authentication_spec.rb +10 -2
- data/spec/unit/flexmls_api/configuration_spec.rb +2 -2
- data/spec/unit/flexmls_api/faraday_spec.rb +3 -7
- data/spec/unit/flexmls_api/models/base_spec.rb +1 -1
- data/spec/unit/flexmls_api/models/contact_spec.rb +8 -4
- data/spec/unit/flexmls_api/models/document_spec.rb +2 -5
- data/spec/unit/flexmls_api/models/listing_spec.rb +46 -9
- data/spec/unit/flexmls_api/models/note_spec.rb +90 -0
- data/spec/unit/flexmls_api/models/photo_spec.rb +2 -2
- data/spec/unit/flexmls_api/models/system_info_spec.rb +37 -3
- data/spec/unit/flexmls_api/models/tour_of_home_spec.rb +43 -0
- data/spec/unit/flexmls_api/models/video_spec.rb +2 -4
- data/spec/unit/flexmls_api/models/virtual_tour_spec.rb +2 -2
- data/spec/unit/flexmls_api/paginate_spec.rb +11 -8
- data/spec/unit/flexmls_api/request_spec.rb +31 -16
- data/spec/unit/flexmls_api/standard_fields_spec.rb +86 -0
- data/spec/unit/flexmls_api_spec.rb +6 -27
- metadata +119 -76
@@ -1,6 +1,14 @@
|
|
1
1
|
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe FlexmlsApi::Authentication do
|
4
|
+
before(:all) do
|
5
|
+
FlexmlsApi.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
after(:all) do
|
9
|
+
reset_config
|
10
|
+
end
|
11
|
+
|
4
12
|
it "should give me a session object" do
|
5
13
|
stub_auth_request
|
6
14
|
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/session/c401736bf3d3f754f07c04e460e09573").
|
@@ -12,7 +20,7 @@ describe FlexmlsApi::Authentication do
|
|
12
20
|
client = FlexmlsApi.client
|
13
21
|
stub_auth_request
|
14
22
|
session = client.get "/session/c401736bf3d3f754f07c04e460e09573"
|
15
|
-
session[0]["AuthToken"].should eq
|
23
|
+
session[0]["AuthToken"].should eq("c401736bf3d3f754f07c04e460e09573")
|
16
24
|
end
|
17
25
|
it "should delete a session" do
|
18
26
|
stub_auth_request
|
@@ -24,7 +32,7 @@ describe FlexmlsApi::Authentication do
|
|
24
32
|
to_return(:body => fixture("success.json"))
|
25
33
|
client = FlexmlsApi.client
|
26
34
|
client.logout
|
27
|
-
client.session.should eq
|
35
|
+
client.session.should eq(nil)
|
28
36
|
end
|
29
37
|
|
30
38
|
end
|
@@ -27,11 +27,7 @@ describe FlexmlsApi do
|
|
27
27
|
}]}
|
28
28
|
}']
|
29
29
|
}
|
30
|
-
stub.get('/expired') { [401, {}, '
|
31
|
-
"Success": false,
|
32
|
-
"Message": "Session token has expired",
|
33
|
-
"Code": 1020
|
34
|
-
}}']
|
30
|
+
stub.get('/expired') { [401, {}, fixture('errors/expired.json')]
|
35
31
|
}
|
36
32
|
stub.get('/methodnotallowed') { [405, {}, '{"D": {
|
37
33
|
"Success": false,
|
@@ -65,8 +61,8 @@ describe FlexmlsApi do
|
|
65
61
|
|
66
62
|
it "should raised exception on error" do
|
67
63
|
expect { @connection.get('/methodnotallowed')}.to raise_error(FlexmlsApi::NotAllowed){ |e| e.message.should == "Method Not Allowed" }
|
68
|
-
expect { @connection.get('/epicfail')}.to raise_error(FlexmlsApi::ClientError){ |e| e.status.should be
|
69
|
-
expect { @connection.get('/unknownerror')}.to raise_error(FlexmlsApi::ClientError){ |e| e.status.should be
|
64
|
+
expect { @connection.get('/epicfail')}.to raise_error(FlexmlsApi::ClientError){ |e| e.status.should be(500) }
|
65
|
+
expect { @connection.get('/unknownerror')}.to raise_error(FlexmlsApi::ClientError){ |e| e.status.should be(499) }
|
70
66
|
end
|
71
67
|
|
72
68
|
it "should raised exception on invalid responses" do
|
@@ -33,7 +33,7 @@ describe Base, "Base model" do
|
|
33
33
|
describe "finders" do
|
34
34
|
before(:all) do
|
35
35
|
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
36
|
-
stub.get('/v1/test/example?ApiSig=
|
36
|
+
stub.get('/v1/test/example?ApiSig=9fd7299fc210d0c3dcc24782d9cb7894&ApiUser=foobar&AuthToken=1234') { [200, {}, '{"D": {
|
37
37
|
"Success": true,
|
38
38
|
"Results": [{
|
39
39
|
"Id": 1,
|
@@ -11,9 +11,9 @@ end
|
|
11
11
|
describe Contact do
|
12
12
|
before(:all) do
|
13
13
|
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
14
|
-
stub.get('/v1/contacts?ApiSig=
|
14
|
+
stub.get('/v1/contacts?ApiSig=33e3b6d6436c85c3f9944d21f6f0cf9a&ApiUser=foobar&AuthToken=1234') { [200, {}, fixture('contacts.json')]
|
15
15
|
}
|
16
|
-
stub.post('/v1/contacts?ApiSig=
|
16
|
+
stub.post('/v1/contacts?ApiSig=1c78fb9f798fbb739a0b8152528cd453&ApiUser=foobar&AuthToken=1234', '{"D":{"Contacts":[{"DisplayName":"Contact Four","PrimaryEmail":"contact4@fbsdata.com"}]}}') { [201, {}, '{"D": {
|
17
17
|
"Success": true,
|
18
18
|
"Results": [
|
19
19
|
{
|
@@ -21,7 +21,7 @@ describe Contact do
|
|
21
21
|
}]}
|
22
22
|
}']
|
23
23
|
}
|
24
|
-
stub.post('/v1/contacts?ApiSig=
|
24
|
+
stub.post('/v1/contacts?ApiSig=ea132fe27a8deb7d6c096b102972ce3e&ApiUser=foobar&AuthToken=1234', '{"D":{"Contacts":[{}]}}') { [400, {}, '{"D": {
|
25
25
|
"Success": false}
|
26
26
|
}']
|
27
27
|
}
|
@@ -29,6 +29,10 @@ describe Contact do
|
|
29
29
|
Contact.connection = mock_client(stubs)
|
30
30
|
end
|
31
31
|
|
32
|
+
it "should include the finders module" do
|
33
|
+
Contact.should respond_to(:find)
|
34
|
+
end
|
35
|
+
|
32
36
|
it "should get all my contacts" do
|
33
37
|
contacts = Contact.get
|
34
38
|
contacts.should be_an(Array)
|
@@ -53,7 +57,7 @@ describe Contact do
|
|
53
57
|
context "on an epic fail" do
|
54
58
|
before(:all) do
|
55
59
|
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
56
|
-
stub.post('/v1/contacts?ApiSig=
|
60
|
+
stub.post('/v1/contacts?ApiSig=ea132fe27a8deb7d6c096b102972ce3e&ApiUser=foobar&AuthToken=1234', '{"D":{"Contacts":[{}]}}') { [500, {}, '{"D": {
|
57
61
|
"Success": false}
|
58
62
|
}']
|
59
63
|
}
|
@@ -14,7 +14,6 @@ describe Document do
|
|
14
14
|
Document.should respond_to(:find_by_listing_key)
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
17
|
it "should get documents for a listing" do
|
19
18
|
stub_auth_request
|
20
19
|
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings/1234/documents").
|
@@ -25,13 +24,11 @@ describe Document do
|
|
25
24
|
}).
|
26
25
|
to_return(:body => fixture('listing_document_index.json'))
|
27
26
|
|
28
|
-
v = Document.find_by_listing_key('1234'
|
29
|
-
v.should be_an
|
27
|
+
v = Document.find_by_listing_key('1234')
|
28
|
+
v.should be_an(Array)
|
30
29
|
v.length.should == 2
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
|
-
|
35
32
|
after(:each) do
|
36
33
|
@document = nil
|
37
34
|
end
|
@@ -2,6 +2,7 @@ require './spec/spec_helper'
|
|
2
2
|
|
3
3
|
describe Listing do
|
4
4
|
before(:each) do
|
5
|
+
|
5
6
|
@listing = Listing.new({
|
6
7
|
"ResourceUri"=>"/v1/listings/20080619000032866372000000",
|
7
8
|
"StandardFields"=>{
|
@@ -51,10 +52,10 @@ describe Listing do
|
|
51
52
|
|
52
53
|
describe "attributes" do
|
53
54
|
it "should allow access to fields" do
|
54
|
-
@listing.StandardFields.should be_a
|
55
|
-
@listing.StandardFields['ListingId'].should be_a
|
56
|
-
@listing.StandardFields['ListPrice'].should match
|
57
|
-
@listing.photos.should be_a
|
55
|
+
@listing.StandardFields.should be_a(Hash)
|
56
|
+
@listing.StandardFields['ListingId'].should be_a(String)
|
57
|
+
@listing.StandardFields['ListPrice'].should match(@listing.ListPrice)
|
58
|
+
@listing.photos.should be_a(Array)
|
58
59
|
end
|
59
60
|
|
60
61
|
it "should not respond to removed attributes" do
|
@@ -86,6 +87,20 @@ describe Listing do
|
|
86
87
|
it "should respond to find_by_cart_id" do
|
87
88
|
Listing.should respond_to(:find_by_cart_id)
|
88
89
|
end
|
90
|
+
|
91
|
+
it "should return the count" do
|
92
|
+
stub_auth_request
|
93
|
+
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings").
|
94
|
+
with(:query => {
|
95
|
+
:_pagination => "count",
|
96
|
+
:ApiSig => "9028191e427eee6774527e7d19f489cb",
|
97
|
+
:AuthToken => "c401736bf3d3f754f07c04e460e09573",
|
98
|
+
:ApiUser => "foobar"
|
99
|
+
}).
|
100
|
+
to_return(:body => fixture('count.json'))
|
101
|
+
count = Listing.count()
|
102
|
+
count.should == 2001
|
103
|
+
end
|
89
104
|
end
|
90
105
|
|
91
106
|
describe "subresources" do
|
@@ -104,7 +119,7 @@ describe Listing do
|
|
104
119
|
}).
|
105
120
|
to_return(:body => fixture('listing_with_photos.json'))
|
106
121
|
|
107
|
-
l = Listing.find('1234', :
|
122
|
+
l = Listing.find('1234', :_expand => "Photos")
|
108
123
|
l.photos.length.should == 5
|
109
124
|
l.documents.length.should == 0
|
110
125
|
l.videos.length.should == 0
|
@@ -121,7 +136,7 @@ describe Listing do
|
|
121
136
|
}).
|
122
137
|
to_return(:body => fixture('listing_with_documents.json'))
|
123
138
|
|
124
|
-
l = Listing.find('1234', :
|
139
|
+
l = Listing.find('1234', :_expand => "Documents")
|
125
140
|
l.photos.length.should == 0
|
126
141
|
l.documents.length.should == 2
|
127
142
|
l.videos.length.should == 0
|
@@ -138,7 +153,7 @@ describe Listing do
|
|
138
153
|
}).
|
139
154
|
to_return(:body => fixture('listing_with_vtour.json'))
|
140
155
|
|
141
|
-
l = Listing.find('1234', :
|
156
|
+
l = Listing.find('1234', :_expand => "VirtualTours")
|
142
157
|
l.virtual_tours.length.should == 1
|
143
158
|
l.photos.length.should == 0
|
144
159
|
l.documents.length.should == 0
|
@@ -156,14 +171,36 @@ describe Listing do
|
|
156
171
|
}).
|
157
172
|
to_return(:body => fixture('listing_with_videos.json'))
|
158
173
|
|
159
|
-
l = Listing.find('1234', :
|
174
|
+
l = Listing.find('1234', :_expand => "Videos")
|
160
175
|
l.videos.length.should == 2
|
161
176
|
l.virtual_tours.length.should == 0
|
162
177
|
l.photos.length.should == 0
|
163
178
|
l.documents.length.should == 0
|
164
179
|
end
|
165
180
|
|
166
|
-
|
181
|
+
it "should return tour of homes" do
|
182
|
+
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings/20060725224713296297000000").
|
183
|
+
with(:query => {
|
184
|
+
:ApiSig => "b3ae2bec3500ba4620bf8224dee28d20",
|
185
|
+
:AuthToken => "c401736bf3d3f754f07c04e460e09573",
|
186
|
+
:ApiUser => "foobar"
|
187
|
+
}).
|
188
|
+
to_return(:body => fixture('listing_no_subresources.json'))
|
189
|
+
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings/20060725224713296297000000/tourofhomes").
|
190
|
+
with( :query => {
|
191
|
+
:ApiSig => "153446de6d1db765d541587d34ed0fcf",
|
192
|
+
:AuthToken => "c401736bf3d3f754f07c04e460e09573",
|
193
|
+
:ApiUser => "foobar"
|
194
|
+
}).
|
195
|
+
to_return(:body => fixture('tour_of_homes.json'))
|
196
|
+
|
197
|
+
l = Listing.find('20060725224713296297000000')
|
198
|
+
l.tour_of_homes().length.should == 2
|
199
|
+
l.videos.length.should == 0
|
200
|
+
l.photos.length.should == 0
|
201
|
+
l.documents.length.should == 0
|
202
|
+
end
|
203
|
+
|
167
204
|
end
|
168
205
|
|
169
206
|
after(:each) do
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe Note do
|
4
|
+
|
5
|
+
|
6
|
+
it "responds to instance and class methods" do
|
7
|
+
Note.should respond_to(:get)
|
8
|
+
Note.new.should respond_to(:save)
|
9
|
+
Note.new.should respond_to(:save!)
|
10
|
+
Note.new.should respond_to(:delete)
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when shared with a contact" do
|
14
|
+
before :each do
|
15
|
+
@note = Listing.new(:ListingKey => "1234").shared_notes("5678")
|
16
|
+
stub_auth_request
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have the correct path" do
|
20
|
+
@note.path.should == "/listings/1234/shared/notes/contacts/5678"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should get my notes" do
|
24
|
+
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}#{@note.path}").
|
25
|
+
with(:query => {
|
26
|
+
:ApiSig => '8b00f10700a479b86acd03776cfea34f',
|
27
|
+
:AuthToken => 'c401736bf3d3f754f07c04e460e09573',
|
28
|
+
:ApiUser => 'foobar'
|
29
|
+
}).
|
30
|
+
to_return(:body => fixture('agent_shared_note.json'))
|
31
|
+
ret = @note.get
|
32
|
+
ret.Note.should == "lorem ipsum dolor sit amet"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return a nil when no shared notes exist" do
|
36
|
+
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}#{@note.path}").
|
37
|
+
with(:query => {
|
38
|
+
:ApiSig => '8b00f10700a479b86acd03776cfea34f',
|
39
|
+
:AuthToken => 'c401736bf3d3f754f07c04e460e09573',
|
40
|
+
:ApiUser => 'foobar'
|
41
|
+
}).
|
42
|
+
to_return(:body => fixture('agent_shared_note_empty.json'))
|
43
|
+
@note.get.should be_nil
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should allow you to delete an existing note" do
|
47
|
+
stub_request(:delete, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}#{@note.path}").
|
48
|
+
with(:query => {
|
49
|
+
:ApiSig => '8b00f10700a479b86acd03776cfea34f',
|
50
|
+
:ApiUser => 'foobar',
|
51
|
+
:AuthToken => 'c401736bf3d3f754f07c04e460e09573'
|
52
|
+
}).
|
53
|
+
to_return(:body => fixture('generic_delete.json'))
|
54
|
+
@note.new.delete # test that no exceptions are raised
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should raise an exception when adding a note fails" do
|
58
|
+
n = @note.new(:Note => "lorem ipsum dolor")
|
59
|
+
stub_request(:put, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}#{@note.path}").
|
60
|
+
with(:query => {
|
61
|
+
:ApiSig => '1e8bcca11ab7307ca99463f199a58c7d',
|
62
|
+
:ApiUser => 'foobar',
|
63
|
+
:AuthToken => 'c401736bf3d3f754f07c04e460e09573'
|
64
|
+
}).
|
65
|
+
to_return(:status => 500, :body => fixture('generic_failure.json'))
|
66
|
+
|
67
|
+
expect { n.save! }.to raise_error(FlexmlsApi::ClientError) { |e| e.status.should == 500 }
|
68
|
+
expect { n.save }.to raise_error(FlexmlsApi::ClientError) { |e| e.status.should == 500 }
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should allow adding of a note" do
|
72
|
+
n = @note.new(:Note => "lorem ipsum dolor")
|
73
|
+
|
74
|
+
stub_request(:put, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}#{@note.path}").
|
75
|
+
with(:query => {
|
76
|
+
:ApiSig => '1e8bcca11ab7307ca99463f199a58c7d',
|
77
|
+
:ApiUser => 'foobar',
|
78
|
+
:AuthToken => 'c401736bf3d3f754f07c04e460e09573'
|
79
|
+
}).
|
80
|
+
to_return(:body => fixture('add_note.json'))
|
81
|
+
|
82
|
+
n.save
|
83
|
+
n.ResourceUri.should == '/v1/listings/20100909200152674436000000/shared/notes/contacts/20110407212043616271000000/'
|
84
|
+
end
|
85
|
+
|
86
|
+
after :each do
|
87
|
+
@note = nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -19,15 +19,49 @@ describe SystemInfo do
|
|
19
19
|
SystemInfo.should respond_to(:get)
|
20
20
|
end
|
21
21
|
|
22
|
+
it "should have a primary_logo instance method" do
|
23
|
+
@sysinfo.should respond_to(:primary_logo)
|
24
|
+
end
|
25
|
+
|
22
26
|
it "should respond to attributes" do
|
23
27
|
['Name','OfficeId','Id','MlsId','Office','Mls'].each do |k|
|
24
|
-
(@sysinfo.send k.to_sym).should be_a
|
28
|
+
(@sysinfo.send k.to_sym).should be_a(String)
|
25
29
|
end
|
26
|
-
@sysinfo.Configuration.should be_a
|
30
|
+
@sysinfo.Configuration.should be_a(Array)
|
27
31
|
end
|
28
32
|
|
29
33
|
it "should have an array of config items" do
|
30
|
-
@sysinfo.Configuration.should be_a
|
34
|
+
@sysinfo.Configuration.should be_a(Array)
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#primary_logo" do
|
38
|
+
before(:each) do
|
39
|
+
@sysinfo_with_logos = SystemInfo.new({
|
40
|
+
"Name"=>"Brandon Reg1",
|
41
|
+
"OfficeId"=>"20080904154102121828000000",
|
42
|
+
"Configuration"=>[{
|
43
|
+
"MlsLogos"=>[
|
44
|
+
{"Uri"=>"http://images.dev.fbsdata.com/eup/20110406184939446866000000.jpg", "Name:"=>"logo and stuff"},
|
45
|
+
{"Uri"=>"http://images.dev.fbsdata.com/eup/20110406191929838053000000.jpg", "Name:"=>"tried it"}
|
46
|
+
],
|
47
|
+
"IdxDisclaimer"=>"",
|
48
|
+
"IdxLogoSmall"=>"",
|
49
|
+
"IdxLogo"=>"http://images.dev.fbsdata.com/eup/20110406184939446866000000.jpg"
|
50
|
+
}],
|
51
|
+
"Id"=>"20080904155327755059000000",
|
52
|
+
"MlsId"=>"20041217205818829687000000",
|
53
|
+
"Office"=>"Brandon Office1",
|
54
|
+
"Mls"=>"Eastern Upper Peninsula"
|
55
|
+
})
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should return nil when no logo is present" do
|
59
|
+
@sysinfo.primary_logo.should == nil
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return the first logo when several are present" do
|
63
|
+
@sysinfo_with_logos.primary_logo.should be_a(Hash)
|
64
|
+
end
|
31
65
|
end
|
32
66
|
|
33
67
|
after(:each) do
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
describe TourOfHome do
|
6
|
+
subject do
|
7
|
+
TourOfHome.new(
|
8
|
+
'ResourceUri'=>"/listings/20060725224713296297000000/tourofhomes/20101127153422574618000000",
|
9
|
+
'Id'=>"20101127153422574618000000",
|
10
|
+
'Date'=>"10/01/2010",
|
11
|
+
'StartTime'=>"09:00:00-07:00",
|
12
|
+
'EndTime'=>"23:00:00-07:00",
|
13
|
+
'Comments'=>"Wonderful home; must see!",
|
14
|
+
'AdditionalInfo'=> [{"Hosted By"=>"Joe Smith"}, {"Host Phone"=>"123-456-7890"}, {"Tour Area"=>"North-Central"}]
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should respond to a few methods" do
|
19
|
+
subject.class.should respond_to(:find_by_listing_key)
|
20
|
+
end
|
21
|
+
it "should return tour date and times" do
|
22
|
+
start_time = DateTime.new(2010,10,1,9,0,0, "-0700")
|
23
|
+
end_time = DateTime.new(2010,10,1,23,0,0, "-0700")
|
24
|
+
subject.Date.should eq(Date.new(2010,10,1))
|
25
|
+
subject.StartTime.should eq(Time.parse(start_time.to_s))
|
26
|
+
subject.EndTime.should eq(Time.parse(end_time.to_s))
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should get home tours for a listing" do
|
30
|
+
stub_auth_request
|
31
|
+
stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings/20060725224713296297000000/tourofhomes").
|
32
|
+
with( :query => {
|
33
|
+
:ApiSig => "153446de6d1db765d541587d34ed0fcf",
|
34
|
+
:AuthToken => "c401736bf3d3f754f07c04e460e09573",
|
35
|
+
:ApiUser => "foobar"
|
36
|
+
}).
|
37
|
+
to_return(:body => fixture('tour_of_homes.json'))
|
38
|
+
v = subject.class.find_by_listing_key('20060725224713296297000000')
|
39
|
+
v.should be_an(Array)
|
40
|
+
v.length.should == 2
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|