spec/acceptance/rest/channel_spec.rb in ably-0.1.5 vs spec/acceptance/rest/channel_spec.rb in ably-0.1.6

- old
+ new

@@ -2,110 +2,115 @@ require "securerandom" describe "REST" do include Ably::Modules::Conversions - let(:client) do - Ably::Rest::Client.new(api_key: api_key, environment: environment) - end + [:msgpack, :json].each do |protocol| + context "over #{protocol}" do + let(:client) do + Ably::Rest::Client.new(api_key: api_key, environment: environment, protocol: protocol) + end - describe "publishing messages" do - let(:channel) { client.channel("test") } - let(:event) { "foo" } - let(:message) { "woop!" } + describe "publishing messages" do + let(:channel) { client.channel("test") } + let(:event) { "foo" } + let(:message) { "woop!" } - it "should publish the message ok" do - expect(channel.publish(event, message)).to eql(true) - end - end - - describe "fetching channel history" do - let(:channel) { client.channel("persisted:#{SecureRandom.hex(4)}") } - let(:expected_history) do - [ - { :name => "test1", :data => "foo" }, - { :name => "test2", :data => "bar" }, - { :name => "test3", :data => "baz" } - ] - end - - before(:each) do - expected_history.each do |message| - channel.publish(message[:name], message[:data]) || raise("Unable to publish message") + it "should publish the message ok" do + expect(channel.publish(event, message)).to eql(true) + end end - end - it "should return all the history for the channel" do - actual_history = channel.history + describe "fetching channel history" do + let(:channel) { client.channel("persisted:#{SecureRandom.hex(4)}") } + let(:expected_history) do + [ + { :name => "test1", :data => "foo" }, + { :name => "test2", :data => "bar" }, + { :name => "test3", :data => "baz" } + ] + end - expect(actual_history.size).to eql(3) + before(:each) do + expected_history.each do |message| + channel.publish(message[:name], message[:data]) || raise("Unable to publish message") + end + end - expected_history.each do |message| - expect(actual_history).to include(Ably::Rest::Models::Message.new(message)) - expect(actual_history.map(&:json)).to include(message) - end - end + it "should return all the history for the channel" do + actual_history = channel.history - it "should return paged history" do - page_1 = channel.history(limit: 1) - page_2 = page_1.next_page - page_3 = page_2.next_page + expect(actual_history.size).to eql(3) - all_items = [page_1[0], page_2[0], page_3[0]] - expect(all_items.uniq).to eql(all_items) + expected_history.each do |message| + expect(actual_history).to include(Ably::Models::Message.new(message)) + expect(actual_history.map(&:hash)).to include(message) + end + end - expect(page_1.size).to eql(1) - expect(page_1).to_not be_last_page - expect(page_1).to be_first_page + it "should return paged history" do + page_1 = channel.history(limit: 1) + page_2 = page_1.next_page + page_3 = page_2.next_page - # Page 2 - expect(page_2.size).to eql(1) - expect(page_2).to_not be_last_page - expect(page_2).to_not be_first_page + all_items = [page_1[0].id, page_2[0].id, page_3[0].id] + expect(all_items.uniq).to eql(all_items) - # Page 3 - expect(page_3.size).to eql(1) - expect(page_3).to be_last_page - expect(page_3).to_not be_first_page - end - end + expect(page_1.size).to eql(1) + expect(page_1).to_not be_last_page + expect(page_1).to be_first_page - describe "options" do - let(:channel_name) { "persisted:#{SecureRandom.hex(4)}" } - let(:channel) { client.channel(channel_name) } - let(:endpoint) do - client.endpoint.tap do |client_end_point| - client_end_point.user = key_id - client_end_point.password = key_secret - end - end + # Page 2 + expect(page_2.size).to eql(1) + expect(page_2).to_not be_last_page + expect(page_2).to_not be_first_page - [:start, :end].each do |option| - describe ":{option}", webmock: true do - let!(:history_stub) { - stub_request(:get, "#{endpoint}/channels/#{CGI.escape(channel_name)}/messages?live=true&#{option}=#{milliseconds}").to_return(:body => '{}') - } - - before do - channel.history(options) + # Page 3 + expect(page_3.size).to eql(1) + expect(page_3).to be_last_page + expect(page_3).to_not be_first_page end + end - context 'with milliseconds since epoch' do - let(:milliseconds) { as_since_epoch(Time.now) } - let(:options) { { option => milliseconds } } - - specify 'are left unchanged' do - expect(history_stub).to have_been_requested + describe "options" do + let(:channel_name) { "persisted:#{SecureRandom.hex(4)}" } + let(:channel) { client.channel(channel_name) } + let(:endpoint) do + client.endpoint.tap do |client_end_point| + client_end_point.user = key_id + client_end_point.password = key_secret end end - context 'with Time' do - let(:time) { Time.now } - let(:milliseconds) { as_since_epoch(time) } - let(:options) { { option => time } } + [:start, :end].each do |option| + describe ":{option}", webmock: true do + let!(:history_stub) { + stub_request(:get, "#{endpoint}/channels/#{CGI.escape(channel_name)}/messages?live=true&#{option}=#{milliseconds}"). + to_return(:body => '{}', :headers => { 'Content-Type' => 'application/json' }) + } - specify 'are left unchanged' do - expect(history_stub).to have_been_requested + before do + channel.history(options) + end + + context 'with milliseconds since epoch' do + let(:milliseconds) { as_since_epoch(Time.now) } + let(:options) { { option => milliseconds } } + + specify 'are left unchanged' do + expect(history_stub).to have_been_requested + end + end + + context 'with Time' do + let(:time) { Time.now } + let(:milliseconds) { as_since_epoch(time) } + let(:options) { { option => time } } + + specify 'are left unchanged' do + expect(history_stub).to have_been_requested + end + end end end end end end