spec/acceptance/rest/channel_spec.rb in ably-0.1.6 vs spec/acceptance/rest/channel_spec.rb in ably-0.2.0
- old
+ new
@@ -1,55 +1,71 @@
-require "spec_helper"
-require "securerandom"
+require 'spec_helper'
+require 'securerandom'
-describe "REST" do
+describe Ably::Rest::Channel do
include Ably::Modules::Conversions
[: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
+ it 'should publish the message ok' do
expect(channel.publish(event, message)).to eql(true)
end
end
- describe "fetching channel history" do
+ 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" }
+ { :name => 'test1', :data => 'foo' },
+ { :name => 'test2', :data => 'bar' },
+ { :name => 'test3', :data => 'baz' }
]
end
+ let!(:before_published) { client.time }
before(:each) do
expected_history.each do |message|
- channel.publish(message[:name], message[:data]) || raise("Unable to publish message")
+ channel.publish(message[:name], message[:data]) || raise('Unable to publish message')
end
end
- it "should return all the history for the channel" do
+ it 'should return all the history for the channel' do
actual_history = channel.history
expect(actual_history.size).to eql(3)
expected_history.each do |message|
- expect(actual_history).to include(Ably::Models::Message.new(message))
- expect(actual_history.map(&:hash)).to include(message)
+ message_name, message_data = message[:name], message[:data]
+ matching_message = actual_history.find { |message| message.name == message_name && message.data == message_data }
+ expect(matching_message).to be_a(Ably::Models::Message)
end
end
- it "should return paged history" do
+ context 'timestamps' do
+ it 'should be greater than the time before the messages were published' do
+ channel.history.each do |message|
+ expect(before_published.to_f).to be < message.timestamp.to_f
+ end
+ end
+ end
+
+ it 'should return messages with unique IDs' do
+ message_ids = channel.history.map(&:id).compact
+ expect(message_ids.count).to eql(3)
+ expect(message_ids.uniq.count).to eql(3)
+ end
+
+ it 'should return paged history' do
page_1 = channel.history(limit: 1)
page_2 = page_1.next_page
page_3 = page_2.next_page
all_items = [page_1[0].id, page_2[0].id, page_3[0].id]
@@ -69,21 +85,21 @@
expect(page_3).to be_last_page
expect(page_3).to_not be_first_page
end
end
- describe "options" do
+ describe 'history 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
[:start, :end].each do |option|
- describe ":{option}", webmock: true do
+ 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' })
}