spec/acceptance/realtime/client_spec.rb in ably-0.8.14 vs spec/acceptance/realtime/client_spec.rb in ably-0.8.15
- old
+ new
@@ -227,7 +227,59 @@
it 'provides access to the Realtime::Auth object' do
expect(subject.auth).to be_a(Ably::Realtime::Auth)
stop_reactor
end
end
+
+ context '#request (#RSC19*)' do
+ let(:client_options) { default_options.merge(key: api_key) }
+
+ context 'get' do
+ it 'returns an HttpPaginatedResponse object' do
+ subject.request(:get, 'time').callback do |response|
+ expect(response).to be_a(Ably::Models::HttpPaginatedResponse)
+ expect(response.status_code).to eql(200)
+ stop_reactor
+ end
+ end
+
+ context '404 request to invalid URL' do
+ it 'returns an object with 404 status code and error message' do
+ subject.request(:get, 'does-not-exist').callback do |response|
+ expect(response).to be_a(Ably::Models::HttpPaginatedResponse)
+ expect(response.error_message).to match(/Could not find/)
+ expect(response.error_code).to eql(40400)
+ expect(response.status_code).to eql(404)
+ stop_reactor
+ end
+ end
+ end
+
+ context 'paged results' do
+ let(:channel_name) { random_str }
+
+ it 'provides paging' do
+ 10.times do
+ subject.rest_client.request(:post, "/channels/#{channel_name}/publish", {}, { 'name': 'test' })
+ end
+
+ subject.request(:get, "/channels/#{channel_name}/messages", { limit: 2 }).callback do |response|
+ expect(response.items.length).to eql(2)
+ expect(response).to be_has_next
+ response.next do |next_page|
+ expect(next_page.items.length).to eql(2)
+ expect(next_page).to be_has_next
+ first_page_ids = response.items.map { |message| message['id'] }.uniq.sort
+ next_page_ids = next_page.items.map { |message| message['id'] }.uniq.sort
+ expect(first_page_ids).to_not eql(next_page_ids)
+ next_page.next do |third_page|
+ expect(third_page.items.length).to eql(2)
+ stop_reactor
+ end
+ end
+ end
+ end
+ end
+ end
+ end
end
end