spec/unit/models/protocol_message_spec.rb in ably-0.6.2 vs spec/unit/models/protocol_message_spec.rb in ably-0.7.0

- old
+ new

@@ -1,7 +1,8 @@ +# encoding: utf-8 require 'spec_helper' -require 'support/model_helper' +require 'shared/model_behaviour' describe Ably::Models::ProtocolMessage do include Ably::Modules::Conversions subject { Ably::Models::ProtocolMessage } @@ -14,11 +15,11 @@ base_model_options: { action: 1 } do let(:model_args) { [] } end - context 'initializer action coercion' do + context 'initializer action coercion', :api_private do it 'ignores actions that are Integers' do protocol_message = subject.new(action: 14) expect(protocol_message.hash[:action]).to eql(14) end @@ -36,21 +37,21 @@ expect { subject.new({}) }.to raise_error(ArgumentError) end end context 'attributes' do - let(:unique_value) { SecureRandom.hex } + let(:unique_value) { random_str } - context 'Java naming' do + context 'Java naming', :api_private do let(:protocol_message) { new_protocol_message(channelSerial: unique_value) } it 'converts the attribute to ruby symbol naming convention' do expect(protocol_message.channel_serial).to eql(unique_value) end end - context '#action' do + context '#action', :api_private do let(:protocol_message) { new_protocol_message(action: 14) } it 'returns an Enum that behaves like a symbol' do expect(protocol_message.action).to eq(:presence) end @@ -68,11 +69,11 @@ end end context '#timestamp' do let(:protocol_message) { new_protocol_message(timestamp: as_since_epoch(Time.now)) } - it 'retrieves attribute :timestamp' do + it 'retrieves attribute :timestamp as Time object' do expect(protocol_message.timestamp).to be_a(Time) expect(protocol_message.timestamp.to_i).to be_within(1).of(Time.now.to_i) end end @@ -131,10 +132,44 @@ expect(protocol_message.connection_serial).to be_a(Integer) expect(protocol_message.connection_serial).to eql(55) end end + context '#flags' do + context 'when nil' do + let(:protocol_message) { new_protocol_message({}) } + + it 'is zero' do + expect(protocol_message.flags).to eql(0) + end + end + + context 'when numeric' do + let(:protocol_message) { new_protocol_message(flags: '25') } + + it 'is an Integer' do + expect(protocol_message.flags).to eql(25) + end + end + + context 'when has_presence' do + let(:protocol_message) { new_protocol_message(flags: 1) } + + it '#has_presence_flag? is true' do + expect(protocol_message.has_presence_flag?).to be_truthy + end + end + + context 'when has another future flag' do + let(:protocol_message) { new_protocol_message(flags: 2) } + + it '#has_presence_flag? is false' do + expect(protocol_message.has_presence_flag?).to be_falsey + end + end + end + context '#has_connection_serial?' do context 'without connection_serial' do let(:protocol_message) { new_protocol_message({}) } it 'returns false' do @@ -229,11 +264,11 @@ end end end end - context '#to_json' do + context '#to_json', :api_private do let(:json_object) { JSON.parse(model.to_json) } let(:message) { { 'name' => 'event', 'clientId' => 'joe', 'timestamp' => as_since_epoch(Time.now) } } let(:attached_action) { Ably::Models::ProtocolMessage::ACTION.Attached } let(:message_action) { Ably::Models::ProtocolMessage::ACTION.Message } @@ -264,10 +299,10 @@ expect(json_object).to eql(JSON.parse("#{model}")) end end end - context '#to_msgpack' do + context '#to_msgpack', :api_private do let(:model) { new_protocol_message({ :connectionSerial => 'unique', messages: [message] }) } let(:message) { { 'name' => 'event', 'clientId' => 'joe', 'timestamp' => as_since_epoch(Time.now) } } let(:packed) { model.to_msgpack } let(:unpacked) { MessagePack.unpack(packed) }