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

- old
+ new

@@ -2,88 +2,108 @@ 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 - let(:fixtures) do - TestApp::APP_SPEC['channels'].first['presence'].map do |fixture| - IdiomaticRubyWrapper(fixture, stop_at: [:client_data]) - end - end + let(:fixtures) do + TestApp::APP_SPEC['channels'].first['presence'].map do |fixture| + IdiomaticRubyWrapper(fixture, stop_at: [:client_data]) + end + end - describe "fetching presence" do - let(:channel) { client.channel("persisted:presence_fixtures") } - let(:presence) { channel.presence.get } + describe "fetching presence" do + let(:channel) { client.channel("persisted:presence_fixtures") } + let(:presence) { channel.presence.get } - it "should return current members on the channel" do - expect(presence.size).to eql(4) + it "returns current members on the channel" do + expect(presence.size).to eql(4) - fixtures.each do |fixture| - presence_message = presence.find { |client| client[:client_id] == fixture[:client_id] } - expect(presence_message[:client_data]).to eq(fixture[:client_data]) + fixtures.each do |fixture| + presence_message = presence.find { |client| client.client_id == fixture[:client_id] } + expect(presence_message.client_data).to eq(fixture[:client_data]) + end + end end - end - end - describe "presence history" do - let(:channel) { client.channel("persisted:presence_fixtures") } - let(:history) { channel.presence.history } + describe "presence history" do + let(:channel) { client.channel("persisted:presence_fixtures") } + let(:history) { channel.presence.history } - it "should return recent presence activity" do - expect(history.size).to eql(4) + it "returns recent presence activity" do + expect(history.size).to eql(4) - fixtures.each do |fixture| - presence_message = history.find { |client| client[:client_id] == fixture['clientId'] } - expect(presence_message[:client_data]).to eq(fixture[:client_data]) - end - end - end + fixtures.each do |fixture| + presence_message = history.find { |client| client.client_id == fixture['clientId'] } + expect(presence_message.client_data).to eq(fixture[:client_data]) + end + end - describe "options" do - let(:channel_name) { "persisted:#{SecureRandom.hex(4)}" } - let(:presence) { client.channel(channel_name).presence } - let(:user) { 'appid.keyuid' } - let(:secret) { SecureRandom.hex(8) } - let(:endpoint) do - client.endpoint.tap do |client_end_point| - client_end_point.user = user - client_end_point.password = secret - end - end - let(:client) do - Ably::Rest::Client.new(api_key: "#{user}:#{secret}") - end + context 'with options' do + let(:page_size) { 2 } + let(:paged_history_forward) { channel.presence.history(limit: page_size, direction: :forwards) } - [:start, :end].each do |option| - describe ":{option}", webmock: true do - let!(:history_stub) { - stub_request(:get, "#{endpoint}/channels/#{CGI.escape(channel_name)}/presence/history?live=true&#{option}=#{milliseconds}").to_return(:body => '{}') - } + it "returns recent presence activity with options passsed to Ably" do + expect(paged_history_forward).to be_a(Ably::Models::PaginatedResource) + expect(paged_history_forward.size).to eql(2) - before do - presence.history(options) + next_page = paged_history_forward.next_page + + expect(paged_history_forward.first.id).to eql(history.last.id) + expect(next_page.first.id).to eql(history[page_size].id) + end 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(:presence) { client.channel(channel_name).presence } + let(:user) { 'appid.keyuid' } + let(:secret) { SecureRandom.hex(8) } + let(:endpoint) do + client.endpoint.tap do |client_end_point| + client_end_point.user = user + client_end_point.password = secret end end + let(:client) do + Ably::Rest::Client.new(api_key: "#{user}:#{secret}") + 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)}/presence/history?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 + presence.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