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
@@ -14,13 +14,13 @@ describe Finders, "Finders model" do
|
|
14
14
|
it "should get first result" do
|
15
15
|
stub_api_get("/my_resource", 'finders.json')
|
16
16
|
resource = MyResource.first
|
17
|
-
resource.Id.
|
17
|
+
expect(resource.Id).to eq(1)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should get last result" do
|
21
21
|
stub_api_get("/my_resource", 'finders.json')
|
22
22
|
resource = MyResource.last
|
23
|
-
resource.Id.
|
23
|
+
expect(resource.Id).to eq(2)
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should find one result" do
|
@@ -29,23 +29,23 @@ describe Finders, "Finders model" do
|
|
29
29
|
:_filter => "Something Eq 'dude'"
|
30
30
|
})
|
31
31
|
resource = MyResource.find_one(:_filter => "Something Eq 'dude'")
|
32
|
-
resource.Id.
|
32
|
+
expect(resource.Id).to eq(1)
|
33
33
|
end
|
34
34
|
|
35
35
|
describe "find" do
|
36
36
|
|
37
37
|
it "should throw an error if no argument is passed" do
|
38
38
|
stub_api_get("/my_resource/", 'finders.json')
|
39
|
-
|
39
|
+
expect {
|
40
40
|
MyResource.find()
|
41
|
-
}.
|
41
|
+
}.to raise_error(ArgumentError)
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should throw an error when the first argument is nil" do
|
45
45
|
stub_api_get("/my_resource/", 'finders.json', {:_limit => 1})
|
46
|
-
|
46
|
+
expect {
|
47
47
|
MyResource.find(nil, {:_limit => 1})
|
48
|
-
}.
|
48
|
+
}.to raise_error(ArgumentError)
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe FloPlan do
|
4
|
+
|
5
|
+
it "responds to" do
|
6
|
+
expect(FloPlan).to respond_to(:find_by_listing_key)
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "/listings/<listing_id>/videos", :support do
|
10
|
+
before do
|
11
|
+
stub_auth_request
|
12
|
+
stub_api_get('/listings/1234/floplans','listings/floplans_index.json')
|
13
|
+
end
|
14
|
+
|
15
|
+
on_get_it "should correctly split images and thumbnails" do
|
16
|
+
p = FloPlan.find_by_listing_key('1234').first
|
17
|
+
expect(p.attributes['Images'].length).to eq(2)
|
18
|
+
expect(p.images.length).to eq(1)
|
19
|
+
expect(p.thumbnails.length).to eq(1)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -9,9 +9,9 @@ describe ListingCart do
|
|
9
9
|
on_get_it "should get all listing carts" do
|
10
10
|
stub_api_get("/#{subject.class.element_name}", 'listing_carts/listing_cart.json')
|
11
11
|
resources = subject.class.get
|
12
|
-
resources.
|
13
|
-
resources.length.
|
14
|
-
resources.first.Id.
|
12
|
+
expect(resources).to be_an(Array)
|
13
|
+
expect(resources.length).to eq(2)
|
14
|
+
expect(resources.first.Id).to eq("20100912153422758914000000")
|
15
15
|
end
|
16
16
|
|
17
17
|
on_post_it "should save a new listing cart" do
|
@@ -20,8 +20,8 @@ describe ListingCart do
|
|
20
20
|
'20110302120238448431000000',
|
21
21
|
'20110510011212354751000000']
|
22
22
|
subject.Name = "My Cart's Name"
|
23
|
-
subject.save.
|
24
|
-
subject.ResourceUri.
|
23
|
+
expect(subject.save).to be(true)
|
24
|
+
expect(subject.ResourceUri).to eq("/v1/listingcarts/20100912153422758914000000")
|
25
25
|
end
|
26
26
|
|
27
27
|
on_post_it "should fail saving" do
|
@@ -29,8 +29,8 @@ describe ListingCart do
|
|
29
29
|
request.to_return(:status => 400, :body => fixture('errors/failure.json'))
|
30
30
|
end
|
31
31
|
subject
|
32
|
-
subject.save.
|
33
|
-
expect{ subject.save! }.to raise_error(SparkApi::ClientError){ |e| e.status.
|
32
|
+
expect(subject.save).to be(false)
|
33
|
+
expect{ subject.save! }.to raise_error(SparkApi::ClientError){ |e| expect(e.status).to eq(400) }
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -38,9 +38,9 @@ describe ListingCart do
|
|
38
38
|
on_get_it "should get a listing cart" do
|
39
39
|
stub_api_get("/#{subject.class.element_name}", 'listing_carts/listing_cart.json')
|
40
40
|
resource = subject.class.get.first
|
41
|
-
resource.Id.
|
42
|
-
resource.Name.
|
43
|
-
resource.ListingCount.
|
41
|
+
expect(resource.Id).to eq("20100912153422758914000000")
|
42
|
+
expect(resource.Name).to eq("My Listing Cart")
|
43
|
+
expect(resource.ListingCount).to eq(10)
|
44
44
|
end
|
45
45
|
|
46
46
|
on_put_it "should save a listing cart Name" do
|
@@ -48,9 +48,9 @@ describe ListingCart do
|
|
48
48
|
resource = subject.class.get.first
|
49
49
|
stub_api_put("/#{subject.class.element_name}/#{resource.Id}", 'listing_carts/put_name.json', 'success.json')
|
50
50
|
resource.Name = "My Cart's Name"
|
51
|
-
resource.changed
|
52
|
-
resource.save.
|
53
|
-
resource.ResourceUri.
|
51
|
+
expect(resource.changed?).to be(true)
|
52
|
+
expect(resource.save).to be(true)
|
53
|
+
expect(resource.ResourceUri).to eq("/v1/listingcarts/20100912153422758914000000")
|
54
54
|
end
|
55
55
|
|
56
56
|
on_put_it "should save a listing cart ListingIds" do
|
@@ -60,41 +60,41 @@ describe ListingCart do
|
|
60
60
|
resource.ListingIds = ['20110112234857732941000000',
|
61
61
|
'20110302120238448431000000',
|
62
62
|
'20110510011212354751000000']
|
63
|
-
resource.changed
|
64
|
-
resource.save.
|
65
|
-
resource.ResourceUri.
|
63
|
+
expect(resource.changed?).to be(true)
|
64
|
+
expect(resource.save).to be(true)
|
65
|
+
expect(resource.ResourceUri).to eq("/v1/listingcarts/20100912153422758914000000")
|
66
66
|
end
|
67
67
|
|
68
68
|
on_post_it "should add a listing to a cart" do
|
69
69
|
list_id = "20110621133454434543000000"
|
70
70
|
stub_api_get("/#{subject.class.element_name}", 'listing_carts/listing_cart.json')
|
71
71
|
resource = subject.class.get.first
|
72
|
-
resource.Id.
|
72
|
+
expect(resource.Id).to eq("20100912153422758914000000")
|
73
73
|
stub_api_post("/#{subject.class.element_name}/#{resource.Id}",'listing_carts/add_listing_post.json', 'listing_carts/add_listing.json')
|
74
|
-
resource.ListingCount.
|
74
|
+
expect(resource.ListingCount).to eq(10)
|
75
75
|
resource.add_listing(list_id)
|
76
|
-
resource.ListingCount.
|
76
|
+
expect(resource.ListingCount).to eq(11)
|
77
77
|
end
|
78
78
|
|
79
79
|
on_post_it "should add multiple listings to a cart" do
|
80
80
|
listing_ids = ["20110621133454434543000000", "20110621133454434543000001"]
|
81
81
|
stub_api_get("/#{subject.class.element_name}", 'listing_carts/listing_cart.json')
|
82
82
|
resource = subject.class.get.first
|
83
|
-
resource.Id.
|
83
|
+
expect(resource.Id).to eq("20100912153422758914000000")
|
84
84
|
stub_api_post("/#{subject.class.element_name}/#{resource.Id}",'listing_carts/add_listings_post.json', 'listing_carts/add_listings.json')
|
85
|
-
resource.ListingCount.
|
85
|
+
expect(resource.ListingCount).to eq(10)
|
86
86
|
resource.add_listings(listing_ids)
|
87
|
-
resource.ListingCount.
|
87
|
+
expect(resource.ListingCount).to eq(12)
|
88
88
|
end
|
89
89
|
|
90
90
|
on_delete_it "should delete a listing cart" do
|
91
91
|
stub_api_get("/#{subject.class.element_name}", 'listing_carts/listing_cart.json')
|
92
92
|
resource = subject.class.get.first
|
93
|
-
resource.Id.
|
94
|
-
resource.Name.
|
95
|
-
resource.ListingCount.
|
93
|
+
expect(resource.Id).to eq("20100912153422758914000000")
|
94
|
+
expect(resource.Name).to eq("My Listing Cart")
|
95
|
+
expect(resource.ListingCount).to eq(10)
|
96
96
|
stub_api_delete("/#{subject.class.element_name}/#{resource.Id}", 'success.json')
|
97
|
-
resource.delete.
|
97
|
+
expect(resource.delete).to be(true)
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -103,11 +103,11 @@ describe ListingCart do
|
|
103
103
|
list_id = "20110621133454434543000000"
|
104
104
|
stub_api_get("/#{subject.class.element_name}", 'listing_carts/listing_cart.json')
|
105
105
|
resource = subject.class.get.first
|
106
|
-
resource.Id.
|
106
|
+
expect(resource.Id).to eq("20100912153422758914000000")
|
107
107
|
stub_api_delete("/#{subject.class.element_name}/#{resource.Id}/listings/#{list_id}", 'listing_carts/remove_listing.json')
|
108
|
-
resource.ListingCount.
|
108
|
+
expect(resource.ListingCount).to eq(10)
|
109
109
|
resource.remove_listing(list_id)
|
110
|
-
resource.ListingCount.
|
110
|
+
expect(resource.ListingCount).to eq(9)
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
@@ -117,9 +117,9 @@ describe ListingCart do
|
|
117
117
|
stub_api_get("/#{subject.class.element_name}/for/#{listing.Id}", 'listing_carts/listing_cart.json')
|
118
118
|
[listing, listing.Id ].each do |l|
|
119
119
|
resources = subject.class.for(l)
|
120
|
-
resources.
|
121
|
-
resources.length.
|
122
|
-
resources.first.Id.
|
120
|
+
expect(resources).to be_an(Array)
|
121
|
+
expect(resources.length).to eq(2)
|
122
|
+
expect(resources.first.Id).to eq("20100912153422758914000000")
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
@@ -128,9 +128,9 @@ describe ListingCart do
|
|
128
128
|
on_get_it "should get the carts for a user" do
|
129
129
|
stub_api_get("/my/#{subject.class.element_name}", 'listing_carts/listing_cart.json')
|
130
130
|
resources = subject.class.my
|
131
|
-
resources.
|
132
|
-
resources.length.
|
133
|
-
resources.first.Id.
|
131
|
+
expect(resources).to be_an(Array)
|
132
|
+
expect(resources.length).to eq(2)
|
133
|
+
expect(resources.first.Id).to eq("20100912153422758914000000")
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
@@ -138,9 +138,9 @@ describe ListingCart do
|
|
138
138
|
on_get_it "should get the carts specific to a portal user" do
|
139
139
|
stub_api_get("/#{subject.class.element_name}/portal", 'listing_carts/listing_cart.json')
|
140
140
|
resources = subject.class.portal
|
141
|
-
resources.
|
142
|
-
resources.length.
|
143
|
-
resources.first.Id.
|
141
|
+
expect(resources).to be_an(Array)
|
142
|
+
expect(resources.length).to eq(2)
|
143
|
+
expect(resources.first.Id).to eq("20100912153422758914000000")
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
@@ -148,38 +148,38 @@ describe ListingCart do
|
|
148
148
|
it "should return the listings in the cart" do
|
149
149
|
resource = subject.class.new Id: 5, ListingIds: ["1234"]
|
150
150
|
stub_api_get("/#{subject.class.element_name}/#{resource.Id}/listings", 'listings/multiple.json')
|
151
|
-
resource.listings.
|
152
|
-
resource.listings.first.
|
151
|
+
expect(resource.listings).to be_a(Array)
|
152
|
+
expect(resource.listings.first).to be_a(Listing)
|
153
153
|
end
|
154
154
|
|
155
155
|
it "should return an empty array if there aren't any listings" do
|
156
156
|
resource = subject.class.new Id: 5
|
157
|
-
resource.listings.
|
158
|
-
resource.listings.count.
|
157
|
+
expect(resource.listings).to be_a(Array)
|
158
|
+
expect(resource.listings.count).to be === 0
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
162
|
describe "filter" do
|
163
163
|
it "should return a filter string for the cart" do
|
164
164
|
resource = subject.class.new Id: 5
|
165
|
-
resource.filter.
|
165
|
+
expect(resource.filter).to eq("ListingCart Eq '5'")
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
169
|
describe "#deletable?" do
|
170
170
|
it "should return true for private custom carts" do
|
171
171
|
resource = subject.class.new
|
172
|
-
expect(resource.deletable?).to
|
172
|
+
expect(resource.deletable?).to be true
|
173
173
|
end
|
174
174
|
|
175
175
|
it "should return true for custom vow carts" do
|
176
176
|
resource = subject.class.new PortalCartType: "Custom"
|
177
|
-
expect(resource.deletable?).to
|
177
|
+
expect(resource.deletable?).to be true
|
178
178
|
end
|
179
179
|
|
180
180
|
it "should return false for vow carts" do
|
181
181
|
resource = subject.class.new PortalCartType: "Favorites"
|
182
|
-
expect(resource.deletable?).to
|
182
|
+
expect(resource.deletable?).to be false
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
@@ -12,18 +12,18 @@ describe ListingMetaTranslations do
|
|
12
12
|
stub_api_get("/flexmls/propertytypes/A/translations", 'listing_meta_translations/get.json')
|
13
13
|
|
14
14
|
translations = ListingMetaTranslations.for_property_type('A')
|
15
|
-
translations.
|
16
|
-
translations.StandardFields.
|
17
|
-
translations.CustomFields.
|
15
|
+
expect(translations).to be_an(ListingMetaTranslations)
|
16
|
+
expect(translations.StandardFields).to be_an(Hash)
|
17
|
+
expect(translations.CustomFields).to be_an(Hash)
|
18
18
|
end
|
19
19
|
|
20
20
|
on_get_it "doesn't explode if there are no results" do
|
21
21
|
stub_api_get("/flexmls/propertytypes/A/translations", 'no_results.json')
|
22
22
|
|
23
23
|
translations = ListingMetaTranslations.for_property_type('A')
|
24
|
-
translations.
|
25
|
-
translations.StandardFields.
|
26
|
-
translations.CustomFields.
|
24
|
+
expect(translations).to be_an(ListingMetaTranslations)
|
25
|
+
expect(translations.StandardFields).to be_an(Hash)
|
26
|
+
expect(translations.CustomFields).to be_an(Hash)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -74,91 +74,91 @@ describe Listing do
|
|
74
74
|
|
75
75
|
describe "attributes" do
|
76
76
|
it "should allow access to fields" do
|
77
|
-
@listing.StandardFields.
|
78
|
-
@listing.StandardFields['ListingId'].
|
79
|
-
@listing.StandardFields['ListPrice'].
|
80
|
-
@listing.photos.
|
77
|
+
expect(@listing.StandardFields).to be_a(Hash)
|
78
|
+
expect(@listing.StandardFields['ListingId']).to be_a(String)
|
79
|
+
expect(@listing.StandardFields['ListPrice']).to match(@listing.ListPrice)
|
80
|
+
expect(@listing.photos).to be_a(Array)
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should not respond to removed attributes" do
|
84
|
-
@listing.
|
85
|
-
@listing.
|
86
|
-
@listing.
|
87
|
-
@listing.
|
84
|
+
expect(@listing).not_to respond_to(:Photos)
|
85
|
+
expect(@listing).not_to respond_to(:Documents)
|
86
|
+
expect(@listing).not_to respond_to(:VirtualTours)
|
87
|
+
expect(@listing).not_to respond_to(:Videos)
|
88
88
|
end
|
89
89
|
|
90
90
|
describe '.street_address' do
|
91
91
|
it 'should return the street address' do
|
92
|
-
@listing.street_address.
|
92
|
+
expect(@listing.street_address).to eq("100 Someone's St")
|
93
93
|
end
|
94
94
|
|
95
95
|
it 'should remove data masks' do
|
96
96
|
@listing.StandardFields["UnparsedFirstLineAddress"] = "********"
|
97
|
-
@listing.street_address.
|
97
|
+
expect(@listing.street_address).to eq("")
|
98
98
|
end
|
99
99
|
|
100
100
|
it 'should handle a missing unparsed first line address' do
|
101
101
|
[nil, '', ' '].each do |current|
|
102
102
|
@listing.StandardFields['UnparsedFirstLineAddress'] = current
|
103
|
-
@listing.street_address.
|
103
|
+
expect(@listing.street_address).to eq('')
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
108
|
it "should return the regional address" do
|
109
|
-
@listing.region_address.
|
109
|
+
expect(@listing.region_address).to eq("Fargo, ND 55320")
|
110
110
|
end
|
111
111
|
|
112
112
|
it "should return full address" do
|
113
|
-
@listing.full_address.
|
113
|
+
expect(@listing.full_address).to eq("100 Someone's St, Fargo, ND 55320")
|
114
114
|
end
|
115
115
|
|
116
116
|
it "should provide shortcut methods to standard fields" do
|
117
|
-
@listing.StreetName.
|
118
|
-
@listing.YearBuilt.
|
119
|
-
@listing.BuildingAreaTotal.
|
120
|
-
@listing.PublicRemarks.
|
121
|
-
@listing.PostalCode.
|
122
|
-
@listing.ListPrice.
|
117
|
+
expect(@listing.StreetName).to eq("Someone's")
|
118
|
+
expect(@listing.YearBuilt).to eq(nil)
|
119
|
+
expect(@listing.BuildingAreaTotal).to eq("1321.0")
|
120
|
+
expect(@listing.PublicRemarks).to eq(nil)
|
121
|
+
expect(@listing.PostalCode).to eq("55320")
|
122
|
+
expect(@listing.ListPrice).to eq("100000.0")
|
123
123
|
end
|
124
124
|
|
125
125
|
it "should report that it responds to shortcut methods to standard fields" do
|
126
|
-
@listing.
|
127
|
-
@listing.
|
128
|
-
@listing.
|
129
|
-
@listing.
|
130
|
-
@listing.
|
131
|
-
@listing.
|
132
|
-
|
133
|
-
@listing.
|
126
|
+
expect(@listing).to respond_to(:StreetName)
|
127
|
+
expect(@listing).to respond_to(:YearBuilt)
|
128
|
+
expect(@listing).to respond_to(:BuildingAreaTotal)
|
129
|
+
expect(@listing).to respond_to(:PublicRemarks)
|
130
|
+
expect(@listing).to respond_to(:PostalCode)
|
131
|
+
expect(@listing).to respond_to(:ListPrice)
|
132
|
+
|
133
|
+
expect(@listing).not_to respond_to(:BogusField)
|
134
134
|
@listing.StandardFields['BogusField'] = 'bogus'
|
135
|
-
@listing.
|
135
|
+
expect(@listing).to respond_to(:BogusField)
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
139
|
describe "class methods" do
|
140
140
|
it "should respond to find" do
|
141
|
-
Listing.
|
141
|
+
expect(Listing).to respond_to(:find)
|
142
142
|
end
|
143
143
|
|
144
144
|
it "should respond to first" do
|
145
|
-
Listing.
|
145
|
+
expect(Listing).to respond_to(:first)
|
146
146
|
end
|
147
147
|
|
148
148
|
it "should respond to last" do
|
149
|
-
Listing.
|
149
|
+
expect(Listing).to respond_to(:last)
|
150
150
|
end
|
151
151
|
|
152
152
|
it "should respond to my" do
|
153
|
-
Listing.
|
153
|
+
expect(Listing).to respond_to(:my)
|
154
154
|
end
|
155
155
|
|
156
156
|
it "should respond to find_by_cart_id" do
|
157
|
-
Listing.
|
157
|
+
expect(Listing).to respond_to(:find_by_cart_id)
|
158
158
|
end
|
159
159
|
|
160
160
|
it "should respond to count" do
|
161
|
-
Listing.
|
161
|
+
expect(Listing).to respond_to(:count)
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
@@ -172,14 +172,14 @@ describe Listing do
|
|
172
172
|
stub_api_get('/listings', 'listings/multiple.json', {:_filter => "PostalCode Eq '83805'"})
|
173
173
|
|
174
174
|
listings = Listing.find(:all, :_filter => "PostalCode Eq '83805'")
|
175
|
-
listings.
|
176
|
-
listings.count.
|
175
|
+
expect(listings).to be_an(Array)
|
176
|
+
expect(listings.count).to eq(2)
|
177
177
|
end
|
178
178
|
|
179
179
|
on_get_it "should return the count" do
|
180
180
|
stub_api_get("/listings", 'count.json', { :_pagination => "count"})
|
181
181
|
count = Listing.count()
|
182
|
-
count.
|
182
|
+
expect(count).to eq(2001)
|
183
183
|
end
|
184
184
|
end
|
185
185
|
|
@@ -188,10 +188,10 @@ describe Listing do
|
|
188
188
|
stub_api_get("/listings/20060725224713296297000000", 'listings/no_subresources.json')
|
189
189
|
|
190
190
|
l = Listing.find('20060725224713296297000000')
|
191
|
-
l.videos.length.
|
192
|
-
l.photos.length.
|
193
|
-
l.documents.length.
|
194
|
-
l.Id.
|
191
|
+
expect(l.videos.length).to eq(0)
|
192
|
+
expect(l.photos.length).to eq(0)
|
193
|
+
expect(l.documents.length).to eq(0)
|
194
|
+
expect(l.Id).to eq('20060725224713296297000000')
|
195
195
|
end
|
196
196
|
|
197
197
|
on_put_it "should save a listing that has modified ListPrice" do
|
@@ -200,7 +200,7 @@ describe Listing do
|
|
200
200
|
stub_api_put("/flexmls/listings/#{list_id}", 'listings/put.json', 'success.json')
|
201
201
|
l = Listing.find(list_id)
|
202
202
|
l.ListPrice = 10000.0
|
203
|
-
l.save.
|
203
|
+
expect(l.save).to be(true)
|
204
204
|
end
|
205
205
|
|
206
206
|
on_put_it "should save a listing that has modified ExpirationDate" do
|
@@ -209,7 +209,7 @@ describe Listing do
|
|
209
209
|
stub_api_put("/flexmls/listings/#{list_id}", 'listings/put_expiration_date.json', 'success.json')
|
210
210
|
l = Listing.find(list_id)
|
211
211
|
l.ExpirationDate = "2011-10-04"
|
212
|
-
l.save.
|
212
|
+
expect(l.save).to be(true)
|
213
213
|
end
|
214
214
|
|
215
215
|
it "should not save a listing that does not exist", :method => 'PUT' do
|
@@ -221,8 +221,8 @@ describe Listing do
|
|
221
221
|
l = Listing.find(list_id)
|
222
222
|
l.Id = "lolwut"
|
223
223
|
l.ListPrice = 10000.0
|
224
|
-
l.save.
|
225
|
-
expect{ l.save! }.to raise_error(SparkApi::ClientError){ |e| e.status.
|
224
|
+
expect(l.save).to be(false)
|
225
|
+
expect{ l.save! }.to raise_error(SparkApi::ClientError){ |e| expect(e.status).to eq(400) }
|
226
226
|
end
|
227
227
|
|
228
228
|
on_put_it "should save a listing with constraints" do
|
@@ -231,9 +231,9 @@ describe Listing do
|
|
231
231
|
stub_api_put("/flexmls/listings/#{list_id}", 'listings/put.json', 'listings/constraints.json')
|
232
232
|
l = Listing.find(list_id)
|
233
233
|
l.ListPrice = 10000.0
|
234
|
-
l.save.
|
235
|
-
l.constraints.size.
|
236
|
-
l.constraints.first.RuleName.
|
234
|
+
expect(l.save).to be(true)
|
235
|
+
expect(l.constraints.size).to eq(1)
|
236
|
+
expect(l.constraints.first.RuleName).to eq("MaxValue")
|
237
237
|
end
|
238
238
|
|
239
239
|
on_put_it "should fail saving a listing with constraints and provide the constraints" do
|
@@ -245,10 +245,10 @@ describe Listing do
|
|
245
245
|
|
246
246
|
l = Listing.find(list_id)
|
247
247
|
l.ListPrice = 10000.0
|
248
|
-
l.save.
|
249
|
-
l.constraints.size.
|
250
|
-
l.constraints.first.RuleName.
|
251
|
-
l.errors.size.
|
248
|
+
expect(l.save).to be false
|
249
|
+
expect(l.constraints.size).to eq(1)
|
250
|
+
expect(l.constraints.first.RuleName).to eq("MaxIncreasePercent")
|
251
|
+
expect(l.errors.size).to eq(1)
|
252
252
|
end
|
253
253
|
|
254
254
|
on_put_it "should reorder a photo" do
|
@@ -257,7 +257,7 @@ describe Listing do
|
|
257
257
|
stub_api_put("/listings/#{list_id}/photos/20110826220032167405000000", 'listings/put_reorder_photo.json', 'listings/reorder_photo.json')
|
258
258
|
l = Listing.find(list_id)
|
259
259
|
l.reorder_photo("20110826220032167405000000", "2")
|
260
|
-
l.photos.size.
|
260
|
+
expect(l.photos.size).to eq(5)
|
261
261
|
end
|
262
262
|
|
263
263
|
on_put_it "should raise an exception when an index is not an Integer" do
|
@@ -277,9 +277,9 @@ describe Listing do
|
|
277
277
|
stub_api_put("/flexmls/listings/#{list_id}", 'listings/put.json', 'listings/constraints_with_pagination.json', :_pagination => '1')
|
278
278
|
l = Listing.find(list_id)
|
279
279
|
l.ListPrice = 10000.0
|
280
|
-
l.save(:_pagination => '1').
|
281
|
-
l.constraints.size.
|
282
|
-
l.constraints.first.RuleName.
|
280
|
+
expect(l.save(:_pagination => '1')).to be(true)
|
281
|
+
expect(l.constraints.size).to eq(1)
|
282
|
+
expect(l.constraints.first.RuleName).to eq("MaxValue")
|
283
283
|
end
|
284
284
|
end
|
285
285
|
|
@@ -288,47 +288,47 @@ describe Listing do
|
|
288
288
|
stub_api_get("/listings/1234", 'listings/with_photos.json', { :_expand => "Photos" })
|
289
289
|
|
290
290
|
l = Listing.find('1234', :_expand => "Photos")
|
291
|
-
l.photos.length.
|
292
|
-
l.documents.length.
|
293
|
-
l.videos.length.
|
294
|
-
l.virtual_tours.length.
|
291
|
+
expect(l.photos.length).to eq(5)
|
292
|
+
expect(l.documents.length).to eq(0)
|
293
|
+
expect(l.videos.length).to eq(0)
|
294
|
+
expect(l.virtual_tours.length).to eq(0)
|
295
295
|
end
|
296
296
|
|
297
297
|
on_get_it "should return an array of documents" do
|
298
298
|
stub_api_get("/listings/1234", 'listings/with_documents.json', { :_expand => "Documents" })
|
299
299
|
|
300
300
|
l = Listing.find('1234', :_expand => "Documents")
|
301
|
-
l.photos.length.
|
302
|
-
l.documents.length.
|
303
|
-
l.videos.length.
|
304
|
-
l.virtual_tours.length.
|
301
|
+
expect(l.photos.length).to eq(0)
|
302
|
+
expect(l.documents.length).to eq(2)
|
303
|
+
expect(l.videos.length).to eq(0)
|
304
|
+
expect(l.virtual_tours.length).to eq(0)
|
305
305
|
end
|
306
306
|
|
307
307
|
on_get_it "should return an array of virtual tours" do
|
308
308
|
stub_api_get("/listings/1234", 'listings/with_vtour.json', { :_expand => "VirtualTours" })
|
309
309
|
|
310
310
|
l = Listing.find('1234', :_expand => "VirtualTours")
|
311
|
-
l.virtual_tours.length.
|
312
|
-
l.photos.length.
|
313
|
-
l.documents.length.
|
314
|
-
l.videos.length.
|
311
|
+
expect(l.virtual_tours.length).to eq(1)
|
312
|
+
expect(l.photos.length).to eq(0)
|
313
|
+
expect(l.documents.length).to eq(0)
|
314
|
+
expect(l.videos.length).to eq(0)
|
315
315
|
end
|
316
316
|
|
317
317
|
on_get_it "should return an array of videos" do
|
318
318
|
stub_api_get("/listings/1234", 'listings/with_videos.json', { :_expand => "Videos" })
|
319
319
|
|
320
320
|
l = Listing.find('1234', :_expand => "Videos")
|
321
|
-
l.videos.length.
|
322
|
-
l.virtual_tours.length.
|
323
|
-
l.photos.length.
|
324
|
-
l.documents.length.
|
321
|
+
expect(l.videos.length).to eq(2)
|
322
|
+
expect(l.virtual_tours.length).to eq(0)
|
323
|
+
expect(l.photos.length).to eq(0)
|
324
|
+
expect(l.documents.length).to eq(0)
|
325
325
|
end
|
326
326
|
|
327
327
|
on_get_it "should return an array of rental calendars" do
|
328
328
|
stub_api_get("/listings/1234", 'listings/with_rental_calendar.json', { :_expand => "RentalCalendar" })
|
329
329
|
|
330
330
|
l = Listing.find('1234', :_expand => "RentalCalendar")
|
331
|
-
l.rental_calendars.length.
|
331
|
+
expect(l.rental_calendars.length).to eq(2)
|
332
332
|
end
|
333
333
|
|
334
334
|
## TourOfHomes: Not implemented yet ##
|
@@ -337,19 +337,19 @@ describe Listing do
|
|
337
337
|
#stub_api_get("/listings/20060725224713296297000000/tourofhomes", 'listings/tour_of_homes.json')
|
338
338
|
|
339
339
|
#l = Listing.find('20060725224713296297000000')
|
340
|
-
#l.tour_of_homes().length.
|
341
|
-
#l.videos.length.
|
342
|
-
#l.photos.length.
|
343
|
-
#l.documents.length.
|
340
|
+
#expect(l.tour_of_homes().length).to eq 2
|
341
|
+
#expect(l.videos.length).to eq 0
|
342
|
+
#expect(l.photos.length).to eq 0
|
343
|
+
#expect(l.documents.length).to eq 0
|
344
344
|
#end
|
345
345
|
|
346
346
|
on_get_it "should return permissions" do
|
347
347
|
stub_api_get("/listings/20060725224713296297000000", 'listings/with_permissions.json', { :_expand => "Permissions" })
|
348
348
|
l = Listing.find('20060725224713296297000000', :_expand => "Permissions")
|
349
|
-
l.Permissions["Editable"].
|
350
|
-
l.editable?().
|
351
|
-
l.editable?(:PriceChange).
|
352
|
-
l.editable?(:Photos).
|
349
|
+
expect(l.Permissions["Editable"]).to eq(true)
|
350
|
+
expect(l.editable?()).to eq(true)
|
351
|
+
expect(l.editable?(:PriceChange)).to eq(true)
|
352
|
+
expect(l.editable?(:Photos)).to eq(false)
|
353
353
|
end
|
354
354
|
|
355
355
|
on_delete_it "should bulk delete listing photos" do
|
@@ -359,7 +359,7 @@ describe Listing do
|
|
359
359
|
photo_id1 = l.photos[0].Id
|
360
360
|
photo_id2 = l.photos[1].Id
|
361
361
|
stub_api_delete("/listings/#{list_id}/photos/#{photo_id1},#{photo_id2}", 'listings/photos/index.json')
|
362
|
-
l.delete_photos(photo_id1 + "," + photo_id2).
|
362
|
+
expect(l.delete_photos(photo_id1 + "," + photo_id2)).not_to be_empty
|
363
363
|
end
|
364
364
|
end
|
365
365
|
end
|
@@ -369,8 +369,8 @@ describe Listing do
|
|
369
369
|
stub_api_get('/my/listings', 'listings/multiple.json')
|
370
370
|
|
371
371
|
listings = Listing.my
|
372
|
-
listings.
|
373
|
-
listings.count.
|
372
|
+
expect(listings).to be_an(Array)
|
373
|
+
expect(listings.count).to eq(2)
|
374
374
|
end
|
375
375
|
end
|
376
376
|
|
@@ -379,8 +379,8 @@ describe Listing do
|
|
379
379
|
stub_api_get('/office/listings', 'listings/multiple.json')
|
380
380
|
|
381
381
|
listings = Listing.office
|
382
|
-
listings.
|
383
|
-
listings.count.
|
382
|
+
expect(listings).to be_an(Array)
|
383
|
+
expect(listings.count).to eq(2)
|
384
384
|
end
|
385
385
|
end
|
386
386
|
|
@@ -389,8 +389,8 @@ describe Listing do
|
|
389
389
|
stub_api_get('/company/listings', 'listings/multiple.json')
|
390
390
|
|
391
391
|
listings = Listing.company
|
392
|
-
listings.
|
393
|
-
listings.count.
|
392
|
+
expect(listings).to be_an(Array)
|
393
|
+
expect(listings.count).to eq(2)
|
394
394
|
end
|
395
395
|
end
|
396
396
|
|
@@ -399,7 +399,7 @@ describe Listing do
|
|
399
399
|
stub_api_get("/listings/nearby",
|
400
400
|
'listings/no_subresources.json', {:_lat => "45.45", :_lon => "-93.98"})
|
401
401
|
l = Listing.nearby(45.45, -93.98)
|
402
|
-
l.length.
|
402
|
+
expect(l.length).to eq(1)
|
403
403
|
end
|
404
404
|
end
|
405
405
|
|
@@ -409,8 +409,8 @@ describe Listing do
|
|
409
409
|
|
410
410
|
listings = Listing.tour_of_homes
|
411
411
|
|
412
|
-
listings.
|
413
|
-
listings.count.
|
412
|
+
expect(listings).to be_an(Array)
|
413
|
+
expect(listings.count).to eq(2)
|
414
414
|
|
415
415
|
end
|
416
416
|
end
|