spec/acceptance/rest/presence_spec.rb in ably-0.1.2 vs spec/acceptance/rest/presence_spec.rb in ably-0.1.3

- old
+ new

@@ -1,22 +1,86 @@ require "spec_helper" require "securerandom" describe "REST" do + include Ably::Modules::Conversions + let(:client) do Ably::Rest::Client.new(api_key: api_key, environment: environment) 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 } it "should return current members on the channel" do expect(presence.size).to eql(4) - TestApp::APP_SPEC['channels'].first['presence'].each do |presence_hash| - presence_match = presence.find { |client| client['clientId'] == presence_hash['clientId'] } - expect(presence_match['clientData']).to eql(presence_hash['clientData']) + 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 + + 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) + + 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 + + describe "options" do + let(:channel_name) { "persisted:#{SecureRandom.hex(4)}" } + let(:presence) { client.channel(channel_name).presence } + let(:endpoint) do + client.endpoint.tap do |client_end_point| + client_end_point.user = key_id + client_end_point.password = key_secret + end + end + + [: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 => '{}') + } + + 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