spark_api 1.0.2 → 1.0.4

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 (90) hide show
  1. data/README.md +86 -3
  2. data/VERSION +1 -1
  3. data/lib/spark_api.rb +1 -0
  4. data/lib/spark_api/authentication/oauth2.rb +43 -2
  5. data/lib/spark_api/configuration/oauth2_configurable.rb +3 -1
  6. data/lib/spark_api/models.rb +1 -0
  7. data/lib/spark_api/models/listing.rb +17 -1
  8. data/lib/spark_api/models/rental_calendar.rb +26 -0
  9. data/lib/spark_api/options_hash.rb +18 -0
  10. data/script/combined_flow_example.rb +55 -0
  11. data/script/oauth2_example.rb +2 -2
  12. data/spec/fixtures/listings/rental_calendar.json +19 -0
  13. data/spec/fixtures/listings/with_rental_calendar.json +52 -0
  14. data/spec/unit/spark_api/authentication/oauth2_spec.rb +79 -1
  15. data/spec/unit/spark_api/models/listing_spec.rb +7 -0
  16. data/spec/unit/spark_api/models/rental_calendar_spec.rb +30 -0
  17. data/spec/unit/spark_api/options_hash_spec.rb +14 -0
  18. metadata +15 -96
  19. data/bin/spark_api~ +0 -8
  20. data/lib/spark_api/authentication/api_auth.rb~ +0 -104
  21. data/lib/spark_api/authentication/base_auth.rb~ +0 -47
  22. data/lib/spark_api/authentication/oauth2.rb~ +0 -199
  23. data/lib/spark_api/authentication/oauth2_impl/grant_type_base.rb~ +0 -87
  24. data/lib/spark_api/authentication/oauth2_impl/grant_type_code.rb~ +0 -49
  25. data/lib/spark_api/authentication/oauth2_impl/grant_type_password.rb~ +0 -45
  26. data/lib/spark_api/authentication/oauth2_impl/grant_type_refresh.rb~ +0 -36
  27. data/lib/spark_api/authentication/oauth2_impl/middleware.rb~ +0 -39
  28. data/lib/spark_api/authentication/oauth2_impl/password_provider.rb~ +0 -25
  29. data/lib/spark_api/cli.rb~ +0 -158
  30. data/lib/spark_api/cli/api_auth.rb~ +0 -8
  31. data/lib/spark_api/cli/oauth2.rb~ +0 -14
  32. data/lib/spark_api/cli/setup.rb~ +0 -47
  33. data/lib/spark_api/configuration.rb~ +0 -54
  34. data/lib/spark_api/configuration/yaml.rb~ +0 -101
  35. data/lib/spark_api/faraday.rb~ +0 -64
  36. data/lib/spark_api/models.rb~ +0 -33
  37. data/lib/spark_api/models/account.rb~ +0 -115
  38. data/lib/spark_api/models/base.rb~ +0 -118
  39. data/lib/spark_api/models/connect_prefs.rb~ +0 -10
  40. data/lib/spark_api/models/constraint.rb~ +0 -16
  41. data/lib/spark_api/models/contact.rb~ +0 -49
  42. data/lib/spark_api/models/custom_fields.rb~ +0 -12
  43. data/lib/spark_api/models/document.rb~ +0 -11
  44. data/lib/spark_api/models/finders.rb~ +0 -45
  45. data/lib/spark_api/models/idx_link.rb~ +0 -47
  46. data/lib/spark_api/models/listing.rb~ +0 -197
  47. data/lib/spark_api/models/listing_cart.rb~ +0 -72
  48. data/lib/spark_api/models/market_statistics.rb~ +0 -33
  49. data/lib/spark_api/models/message.rb~ +0 -21
  50. data/lib/spark_api/models/note.rb~ +0 -41
  51. data/lib/spark_api/models/notification.rb~ +0 -42
  52. data/lib/spark_api/models/open_house.rb~ +0 -24
  53. data/lib/spark_api/models/photo.rb~ +0 -70
  54. data/lib/spark_api/models/property_types.rb~ +0 -7
  55. data/lib/spark_api/models/saved_search.rb~ +0 -16
  56. data/lib/spark_api/models/shared_listing.rb~ +0 -35
  57. data/lib/spark_api/models/standard_fields.rb~ +0 -50
  58. data/lib/spark_api/models/subresource.rb~ +0 -19
  59. data/lib/spark_api/models/system_info.rb~ +0 -14
  60. data/lib/spark_api/models/tour_of_home.rb~ +0 -24
  61. data/lib/spark_api/models/video.rb~ +0 -16
  62. data/lib/spark_api/models/virtual_tour.rb~ +0 -18
  63. data/lib/spark_api/multi_client.rb~ +0 -59
  64. data/lib/spark_api/paginate.rb~ +0 -109
  65. data/lib/spark_api/primary_array.rb~ +0 -29
  66. data/lib/spark_api/request.rb~ +0 -96
  67. data/lib/spark_api/response.rb~ +0 -70
  68. data/lib/spark_api/version.rb~ +0 -4
  69. data/script/console~ +0 -6
  70. data/script/example.rb~ +0 -27
  71. data/spec/unit/flexmls_api_spec.rb~ +0 -23
  72. data/spec/unit/spark_api/authentication/api_auth_spec.rb~ +0 -169
  73. data/spec/unit/spark_api/authentication/base_auth_spec.rb~ +0 -10
  74. data/spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb~ +0 -10
  75. data/spec/unit/spark_api/authentication/oauth2_spec.rb~ +0 -205
  76. data/spec/unit/spark_api/authentication_spec.rb~ +0 -38
  77. data/spec/unit/spark_api/configuration/yaml_spec.rb~ +0 -72
  78. data/spec/unit/spark_api/configuration_spec.rb~ +0 -122
  79. data/spec/unit/spark_api/faraday_spec.rb~ +0 -90
  80. data/spec/unit/spark_api/models/contact_spec.rb~ +0 -108
  81. data/spec/unit/spark_api/models/listing_cart_spec.rb~ +0 -127
  82. data/spec/unit/spark_api/models/listing_spec.rb~ +0 -320
  83. data/spec/unit/spark_api/models/message_spec.rb~ +0 -47
  84. data/spec/unit/spark_api/models/note_spec.rb~ +0 -63
  85. data/spec/unit/spark_api/models/notification_spec.rb~ +0 -62
  86. data/spec/unit/spark_api/models/shared_listing_spec.rb~ +0 -45
  87. data/spec/unit/spark_api/multi_client_spec.rb~ +0 -56
  88. data/spec/unit/spark_api/paginate_spec.rb~ +0 -224
  89. data/spec/unit/spark_api/primary_array_spec.rb~ +0 -41
  90. data/spec/unit/spark_api/request_spec.rb~ +0 -344
@@ -1,47 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
-
4
- describe Message do
5
- before(:each) do
6
- stub_auth_request
7
- end
8
-
9
- subject do
10
- m = Message.new
11
- m.attributes["Type"] = "ShowingRequest"
12
- m.attributes["EventDateTime"] = "2011-09-15T14:00:00"
13
- m.attributes["SenderId"] = "20110112234857732941000000"
14
- m.attributes["Subject"] = "Showing Request For 123 Main St, MLS # 12-345"
15
- m.attributes["Body"] = "A showing is requested for ..."
16
- m.attributes["ListingId"] = "20110112234857732941000000"
17
- m
18
- end
19
-
20
- context "/messages", :support do
21
- on_get_it "should get all my messages"
22
-
23
- on_post_it "should save a new message" do
24
- stub_api_post("/messages", 'messages/new.json', 'messages/post.json')
25
- subject.save.should be(true)
26
- end
27
-
28
- on_post_it "should save a new message with recipients" do
29
- stub_api_post("/messages", 'messages/new_with_recipients.json', 'messages/post.json')
30
- subject.attributes["Recipients"] = ["20110112234857732941000000","20110092234857738467000000"]
31
- subject.save.should be(true)
32
- end
33
-
34
- on_post_it "should fail saving" do
35
- stub_api_post("/messages", 'messages/new_empty.json') do |request|
36
- request.to_return(:status => 400, :body => fixture('errors/failure.json'))
37
- end
38
- m=subject.class.new
39
- m.save.should be(false)
40
- expect{ m.save! }.to raise_error(FlexmlsApi::ClientError){ |e| e.status.should == 400 }
41
- end
42
- end
43
-
44
- context "/messages/<message_id>", :support do
45
- on_get_it "should get a single message"
46
- end
47
- end
@@ -1,63 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
- describe Note do
4
-
5
- it "responds to instance and class methods" do
6
- Note.should respond_to(:get)
7
- Note.new.should respond_to(:save)
8
- Note.new.should respond_to(:save!)
9
- Note.new.should respond_to(:delete)
10
- end
11
-
12
- context "when shared with a contact" do
13
- before :each do
14
- @note = Listing.new(:ListingKey => "1234").shared_notes("5678")
15
- stub_auth_request
16
- end
17
-
18
- it "should have the correct path" do
19
- @note.path.should == "/listings/1234/shared/notes/contacts/5678"
20
- end
21
-
22
- context "/listings/<listing_id>/shared/notes/contacts/<contact_id>", :support do
23
- on_get_it "GET should get my notes" do
24
- stub_api_get("#{@note.path}", 'notes/agent_shared.json')
25
- ret = @note.get
26
- ret.Note.should == "lorem ipsum dolor sit amet"
27
- end
28
-
29
- on_get_it "should return a nil when no shared notes exist" do
30
- stub_api_get("#{@note.path}", 'notes/agent_shared_empty.json')
31
- @note.get.should be_nil
32
- end
33
-
34
- on_delete_it "should allow you to delete an existing note" do
35
- stub_api_delete("#{@note.path}", 'generic_delete.json')
36
- @note.new.delete # test that no exceptions are raised
37
- end
38
-
39
- on_put_it "should raise an exception when adding a note fails" do
40
- n = @note.new(:Note => "lorem ipsum dolor")
41
-
42
- stub_api_put("#{@note.path}", 'notes/new.json') do |request|
43
- request.to_return(:status => 500, :body => fixture('generic_failure.json'))
44
- end
45
-
46
- expect { n.save! }.to raise_error(FlexmlsApi::ClientError) { |e| e.status.should == 500 }
47
- expect { n.save }.to raise_error(FlexmlsApi::ClientError) { |e| e.status.should == 500 }
48
- end
49
-
50
- on_put_it "should allow adding of a note" do
51
- n = @note.new(:Note => "lorem ipsum dolor")
52
- stub_api_put("#{@note.path}", 'notes/new.json', 'notes/add.json')
53
- n.save
54
- n.ResourceUri.should == '/v1/listings/20100909200152674436000000/shared/notes/contacts/20110407212043616271000000/'
55
- end
56
-
57
- end
58
-
59
- after :each do
60
- @note = nil
61
- end
62
- end
63
- end
@@ -1,62 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
- describe Notification do
4
- before(:each) do
5
- stub_auth_request
6
- end
7
-
8
- subject do
9
- m = Notification.new
10
- m.attributes['Type'] = 'OperationComplete'
11
- m.attributes['Message'] = 'Your PDF generation has completed!'
12
- m.attributes['BrowserUri'] = 'http://myapplication.com/cmas/19581825.pdf'
13
- m.attributes['ResourceUri'] = 'http://myapplication.com/cmas/19581825.json'
14
- m
15
- end
16
-
17
- context "/notifications", :support do
18
- on_get_it "should get my notifications" do
19
- stub_api_get('/notifications', 'notifications/notifications.json')
20
-
21
- notifications = Notification.get
22
- notifications.should be_an(Array)
23
- notifications.count.should equal(3)
24
- end
25
-
26
- on_post_it "should create a new notification" do
27
- stub_api_post("/notifications", 'notifications/new.json', 'notifications/post.json')
28
- subject.save.should be(true)
29
- end
30
-
31
- on_post_it "should fail saving" do
32
- stub_api_post("/notifications", 'notifications/new_empty.json') do |request|
33
- request.to_return(:status => 400, :body => fixture('errors/failure.json'))
34
- end
35
- m = subject.class.new
36
- m.attributes['Message'] = 'Your PDF generation has completed!'
37
- m.attributes['BrowserUri'] = 'http://myapplication.com/cmas/19581825.pdf'
38
- m.attributes['ResourceUri'] = 'http://myapplication.com/cmas/19581825.json'
39
- m.save.should be(false)
40
- expect{ m.save! }.to raise_error(FlexmlsApi::ClientError){ |e| e.status.should == 400 }
41
- end
42
- end
43
-
44
- context "/notifications/<notification_id1>,<notification_id2>,...<notification_idN>", :support do
45
- on_put_it "should mark notifications as read" do
46
- to_mark = [12345678901234567890000001,12345678901234567890000002]
47
- stub_api_put("/notifications/#{to_mark.join(',')}",
48
- 'notifications/mark_read.json', 'success.json')
49
-
50
- Notification.mark_read(to_mark)
51
- end
52
- end
53
-
54
- context "/notifications/unread", :support do
55
- on_get_it "should get a count of unread notifications" do
56
- stub_api_get('/notifications/unread', 'notifications/unread.json', {:_pagination => 'count'})
57
-
58
- notification_count = Notification.unread
59
- notification_count.should equal(30)
60
- end
61
- end
62
- end
@@ -1,45 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
-
4
- describe SharedListing do
5
- before(:each) do
6
- stub_auth_request
7
- end
8
-
9
- it "should respond to the finders" do
10
- SharedListing.should respond_to(:find)
11
- end
12
-
13
- context "/sharedlistings", :support do
14
- on_post_it "should create shared listings" do
15
- stub_api_post("/#{subject.class.element_name}", 'listings/shared_listing_new.json', 'listings/shared_listing_post.json')
16
- subject.ListingIds = ["20110224152431857619000000","20110125122333785431000000"]
17
- subject.ViewId = "20080125122333787615000000"
18
- subject.save.should be(true)
19
- subject.ResourceUri.should eq("http://www.flexmls.com/share/15Ar/3544-N-Olsen-Avenue-Tucson-AZ-85719")
20
- end
21
-
22
- on_post_it "should fail creating" do
23
- stub_api_post("/#{subject.class.element_name}",'empty.json') do |request|
24
- request.to_return(:status => 400, :body => fixture('errors/failure.json'))
25
- end
26
- subject
27
- subject.save.should be(false)
28
- expect{ subject.save! }.to raise_error(FlexmlsApi::ClientError){ |e| e.status.should == 400 }
29
- end
30
- end
31
-
32
- context "/sharedlistings/<shared_listing_id>", :support do
33
- on_get_it "should get shared listing" do
34
- shared_id = '15Ar'
35
- stub_api_get("/#{subject.class.element_name}/#{shared_id}",
36
- 'listings/shared_listing_get.json')
37
-
38
- shared = SharedListing.find(shared_id)
39
- shared.should respond_to('SharedUri')
40
- shared.Mode.should eq('Public')
41
- shared.ListingIds.should be_an(Array)
42
- end
43
- end
44
-
45
- end
@@ -1,56 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
- # Test client implemenations for multi client switching
4
- module FlexmlsApi
5
- def self.test_client_a
6
- Thread.current[:test_client_a] ||= Client.new(:api_key => "a")
7
- end
8
- def self.test_client_b
9
- Client.new(:api_key => "b")
10
- end
11
- def self.test_client_c
12
- Client.new(:api_key => "c")
13
- end
14
- end
15
-
16
- describe FlexmlsApi::MultiClient do
17
- it "should activate a client implemenation when activate()" do
18
- FlexmlsApi.activate(:test_client_a)
19
- FlexmlsApi.client.api_key.should eq('a')
20
- FlexmlsApi.activate(:test_client_b)
21
- FlexmlsApi.client.api_key.should eq('b')
22
- FlexmlsApi.activate(:test_client_c)
23
- FlexmlsApi.client.api_key.should eq('c')
24
- FlexmlsApi.activate(:test_client_a)
25
- FlexmlsApi.client.api_key.should eq('a')
26
- end
27
- it "should fail to activate symbols that do not have implementations" do
28
- expect { FlexmlsApi.activate(:test_client_d) }.to raise_error(ArgumentError)
29
- end
30
-
31
- it "should temporarily activate a client implemenation when activate() block" do
32
- FlexmlsApi.activate(:test_client_a)
33
- FlexmlsApi.client.api_key.should eq('a')
34
- FlexmlsApi.activate(:test_client_b) do
35
- FlexmlsApi.client.api_key.should eq('b')
36
- end
37
- FlexmlsApi.client.api_key.should eq('a')
38
- expect do
39
- FlexmlsApi.activate(:test_client_c) do
40
- FlexmlsApi.client.api_key.should eq('c')
41
- raise "OH MY GOODNESS I BLEW UP!!!"
42
- end
43
- end.to raise_error
44
- FlexmlsApi.client.api_key.should eq('a')
45
- end
46
-
47
- context "yaml" do
48
- it "should activate a client implemenation when activate()" do
49
- FlexmlsApi::Configuration::YamlConfig.stub(:config_path) { "spec/config/flexmls_api" }
50
- FlexmlsApi.activate(:test_key)
51
- FlexmlsApi.client.api_key.should eq('demo_key')
52
- end
53
- end
54
-
55
- end
56
-
@@ -1,224 +0,0 @@
1
- require './spec/spec_helper'
2
-
3
- class PaginateResponseTester
4
- include FlexmlsApi::PaginateHelper
5
- end
6
-
7
- class PaginateModelTester < FlexmlsApi::Models::Base
8
- @tester = PaginateResponseTester.new
9
- attr_accessor :val
10
- def initialize (val)
11
- @val = val
12
- end
13
- class << self
14
- attr_accessor :options
15
- def get(options)
16
- @options = options
17
- json = "{#{paginate_json}}"
18
- hash = JSON.parse(json)
19
- results = @tester.paginate_response([1,2,3,4,5,6,7,8,9,10], hash["Pagination"])
20
- collect(results)
21
- end
22
- end
23
- end
24
-
25
- class PaginateModelTester50 < PaginateModelTester
26
- @tester = PaginateResponseTester.new
27
- def self.per_page
28
- 50
29
- end
30
- end
31
-
32
-
33
- describe FlexmlsApi::PaginateResponse do
34
-
35
- describe "paginate_response" do
36
- subject { PaginateResponseTester.new }
37
- it "should give me the first page" do
38
- json = "{#{paginate_json}}"
39
- hash = JSON.parse(json)
40
- results = subject.paginate_response([1,2,3,4,5,6,7,8,9,10], hash["Pagination"])
41
- results.offset.should eq(0)
42
- results.next_page.should eq(2)
43
- results.previous_page.should eq(nil)
44
- results.current_page.should eq(1)
45
- results.per_page.should eq(10)
46
- results.total_pages.should eq(4)
47
- results.total_entries.should eq(38)
48
- results[0].should eq(1)
49
- end
50
- it "should give me the second page" do
51
- json = "{#{paginate_json(2)}}"
52
- hash = JSON.parse(json)
53
- results = subject.paginate_response([11,12,13,14,15,16,17,18,19,20], hash["Pagination"])
54
- results.offset.should eq(10)
55
- results.next_page.should eq(3)
56
- results.previous_page.should eq(1)
57
- results.current_page.should eq(2)
58
- results.per_page.should eq(10)
59
- results.total_pages.should eq(4)
60
- results.total_entries.should eq(38)
61
- results[0].should eq(11)
62
- end
63
- it "should give me the third page" do
64
- json = "{#{paginate_json(3)}}"
65
- hash = JSON.parse(json)
66
- results = subject.paginate_response([21,22,23,24,25,26,27,28,29,30], hash["Pagination"])
67
- results.offset.should eq(20)
68
- results.next_page.should eq(4)
69
- results.previous_page.should eq(2)
70
- results.current_page.should eq(3)
71
- results.per_page.should eq(10)
72
- results.total_pages.should eq(4)
73
- results.total_entries.should eq(38)
74
- results[0].should eq(21)
75
- end
76
- it "should give me the last page" do
77
- json = "{#{paginate_json(4)}}"
78
- hash = JSON.parse(json)
79
- results = subject.paginate_response([31,32,33,34,35,36,37,38], hash["Pagination"])
80
- results.offset.should eq(30)
81
- results.next_page.should eq(nil)
82
- results.previous_page.should eq(3)
83
- results.current_page.should eq(4)
84
- results.per_page.should eq(10)
85
- results.total_pages.should eq(4)
86
- results.total_entries.should eq(38)
87
- results[0].should eq(31)
88
- results[-1].should eq(38)
89
- end
90
- end
91
- end
92
-
93
- describe FlexmlsApi::Paginate do
94
- describe "paginate" do
95
- it "should give me a will paginate collection" do
96
- results = PaginateModelTester.paginate(:page => 1)
97
- results.should be_a(WillPaginate::Collection)
98
- results.offset.should eq(0)
99
- results.next_page.should eq(2)
100
- results.previous_page.should eq(nil)
101
- results.current_page.should eq(1)
102
- results.per_page.should eq(10)
103
- results.total_pages.should eq(4)
104
- results.total_entries.should eq(38)
105
-
106
- results[0].should be_a(PaginateModelTester)
107
- results[0].val.should eq(1)
108
-
109
- end
110
-
111
- it "should give me pagination options" do
112
- PaginateModelTester.paginate(:page => 1)
113
- opts = PaginateModelTester.options
114
- opts["_pagination"].should eq(1)
115
- opts["_limit"].should eq(25)
116
- opts["_page"].should eq(1)
117
- opts.has_key?(:page).should eq(false)
118
- end
119
- end
120
-
121
- describe "per_page" do
122
- it "should set the default model max results per page" do
123
- results = PaginateModelTester50.paginate(:page => 1)
124
- opts = PaginateModelTester50.options
125
- opts["_limit"].should eq(50)
126
- end
127
- end
128
-
129
- # non unit-y real world test of paginations with listings
130
- context "paginating listings" do
131
- before do
132
- stub_auth_request
133
- end
134
-
135
- subject { FlexmlsApi::Models::Listing }
136
- it "gives me page one of listings" do
137
- json = <<-JSON
138
- {"D": {
139
- "Success": true,
140
- "Results": [#{ListingJson.create_all(10)}],
141
- #{paginate_json}
142
- }
143
- JSON
144
- stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings").
145
- with(:query => {
146
- :ApiSig => "4a00ca0e657c824d85a5fe1007d9c52d",
147
- :ApiUser => "foobar",
148
- :AuthToken => "c401736bf3d3f754f07c04e460e09573",
149
- :_limit => '10',
150
- :_page => '1',
151
- :_pagination => '1'
152
- }).
153
- to_return(:body => json)
154
- results = subject.paginate(:page=>1, :per_page=>10)
155
- results.should be_a(WillPaginate::Collection)
156
- results.offset.should eq(0)
157
- results.next_page.should eq(2)
158
- results.previous_page.should eq(nil)
159
- results.current_page.should eq(1)
160
- results.per_page.should eq(10)
161
- results.total_pages.should eq(4)
162
- results.total_entries.should eq(38)
163
- results.length.should eq(10)
164
-
165
- results[0].should be_a(subject)
166
- results[0].ListPrice.should eq(50000.0)
167
-
168
- end
169
- it "gives me page two of listings" do
170
- json = <<-JSON
171
- {"D": {
172
- "Success": true,
173
- "Results": [#{ListingJson.create_all(10)}],
174
- #{paginate_json(2)}
175
- }
176
- JSON
177
- stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings").
178
- with(:query => {
179
- :ApiSig => "094d3851a0c4c4563baf70ca45087e30",
180
- :ApiUser => "foobar",
181
- :AuthToken => "c401736bf3d3f754f07c04e460e09573",
182
- :_limit => '10',
183
- :_page => '2',
184
- :_pagination => '1'
185
- }).
186
- to_return(:body => json)
187
- results = subject.paginate(:page=>2, :per_page=>10)
188
- results.next_page.should eq(3)
189
- results.previous_page.should eq(1)
190
- results.current_page.should eq(2)
191
- end
192
- it "gives me page four of listings" do
193
- json = <<-JSON
194
- {"D": {
195
- "Success": true,
196
- "Results": [#{ListingJson.create_all(8)}],
197
- #{paginate_json(4)}
198
- }
199
- JSON
200
- stub_request(:get, "#{FlexmlsApi.endpoint}/#{FlexmlsApi.version}/listings").
201
- with(:query => {
202
- :ApiSig => "dcfce1fe9289c905f8d2d01cbb850edc",
203
- :ApiUser => "foobar",
204
- :AuthToken => "c401736bf3d3f754f07c04e460e09573",
205
- :_limit => '10',
206
- :_page => '4',
207
- :_pagination => '1'
208
- }).
209
- to_return(:body => json)
210
- results = subject.paginate(:page=>4, :per_page=>10)
211
- results.next_page.should eq(nil)
212
- results.previous_page.should eq(3)
213
- results.current_page.should eq(4)
214
- results.per_page.should eq(10)
215
- results.total_pages.should eq(4)
216
- results.total_entries.should eq(38)
217
-
218
- results.length.should eq(8)
219
- results[0].should be_a(subject)
220
- results[0].ListPrice.should eq(50000.0)
221
- end
222
-
223
- end
224
- end