spec/slack/real_time/client_spec.rb in slack-ruby-client-0.2.0 vs spec/slack/real_time/client_spec.rb in slack-ruby-client-0.2.1

- old
+ new

@@ -1,93 +1,124 @@ require 'spec_helper' RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do - let(:client) { Slack::RealTime::Client.new } let(:ws) { double(Faye::WebSocket::Client, on: true) } let(:url) { 'wss://ms173.slack-msgs.com/websocket/lqcUiAvrKTP-uuid=' } before do allow(EM).to receive(:run).and_yield end - context 'started' do - describe '#start!' do - let(:socket) { double(Slack::RealTime::Socket, connected?: true) } - before do - allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30).and_return(socket) - allow(socket).to receive(:connect!).and_yield(ws) - client.start! + context 'token' do + before do + Slack.configure do |config| + config.token = 'global default' end - context 'properties provided upon connection' do - it 'sets url' do - expect(client.url).to eq url + end + it 'defaults token to global default' do + client = Slack::RealTime::Client.new + expect(client.token).to eq 'global default' + expect(client.web_client.token).to eq 'global default' + end + context 'with real time config' do + before do + Slack::RealTime::Client.configure do |config| + config.token = 'custom real time token' end - it 'sets team' do - expect(client.team['domain']).to eq 'dblockdotorg' - end - it 'sets self' do - expect(client.self['id']).to eq 'U07518DTL' - end - it 'sets users' do - expect(client.users.count).to eq 7 - expect(client.users.first['id']).to eq 'U07KECJ77' - end - it 'sets channels' do - expect(client.channels.count).to eq 8 - expect(client.channels.first['name']).to eq 'demo' - end - it 'sets ims' do - expect(client.ims.count).to eq 2 - expect(client.ims.first['user']).to eq 'USLACKBOT' - end - it 'sets bots' do - expect(client.bots.count).to eq 5 - expect(client.bots.first['name']).to eq 'bot' - end - it 'sets groups' do - expect(client.groups.count).to eq 0 - end end - it 'uses web client to fetch url' do - expect(client.web_client).to be_a Slack::Web::Client + it 'overrides token to real time config' do + client = Slack::RealTime::Client.new + expect(client.token).to eq 'custom real time token' + expect(client.web_client.token).to eq 'custom real time token' end - it 'remembers socket' do - expect(client.instance_variable_get('@socket')).to eq socket + it 'overrides token to specific token' do + client = Slack::RealTime::Client.new(token: 'local token') + expect(client.token).to eq 'local token' + expect(client.web_client.token).to eq 'local token' end - it 'cannot be invoked twice' do - expect do - client.start! - end.to raise_error Slack::RealTime::Client::ClientAlreadyStartedError - end - describe '#stop!' do + end + end + context 'client' do + let(:client) { Slack::RealTime::Client.new } + context 'started' do + describe '#start!' do + let(:socket) { double(Slack::RealTime::Socket, connected?: true) } before do - expect(socket).to receive(:disconnect!) - client.stop! + allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30).and_return(socket) + allow(socket).to receive(:connect!).and_yield(ws) + client.start! end + context 'properties provided upon connection' do + it 'sets url' do + expect(client.url).to eq url + end + it 'sets team' do + expect(client.team['domain']).to eq 'dblockdotorg' + end + it 'sets self' do + expect(client.self['id']).to eq 'U07518DTL' + end + it 'sets users' do + expect(client.users.count).to eq 7 + expect(client.users.first['id']).to eq 'U07KECJ77' + end + it 'sets channels' do + expect(client.channels.count).to eq 8 + expect(client.channels.first['name']).to eq 'demo' + end + it 'sets ims' do + expect(client.ims.count).to eq 2 + expect(client.ims.first['user']).to eq 'USLACKBOT' + end + it 'sets bots' do + expect(client.bots.count).to eq 5 + expect(client.bots.first['name']).to eq 'bot' + end + it 'sets groups' do + expect(client.groups.count).to eq 0 + end + end + it 'uses web client to fetch url' do + expect(client.web_client).to be_a Slack::Web::Client + end + it 'remembers socket' do + expect(client.instance_variable_get('@socket')).to eq socket + end it 'cannot be invoked twice' do - client.instance_variable_set('@socket', nil) # caused by a :close callback expect do + client.start! + end.to raise_error Slack::RealTime::Client::ClientAlreadyStartedError + end + describe '#stop!' do + before do + expect(socket).to receive(:disconnect!) client.stop! - end.to raise_error Slack::RealTime::Client::ClientNotStartedError + end + it 'cannot be invoked twice' do + client.instance_variable_set('@socket', nil) # caused by a :close callback + expect do + client.stop! + end.to raise_error Slack::RealTime::Client::ClientNotStartedError + end end - end - describe '#next_id' do - it 'increments' do - previous_id = client.send(:next_id) - expect(client.send(:next_id)).to eq previous_id + 1 + describe '#next_id' do + it 'increments' do + previous_id = client.send(:next_id) + expect(client.send(:next_id)).to eq previous_id + 1 + end end end end - end - context 'with defaults' do - describe '#initialize' do - it 'sets ping' do - expect(client.websocket_ping).to eq 30 - end - it "doesn't set proxy" do - expect(client.websocket_proxy).to be nil - end - Slack::RealTime::Config::ATTRIBUTES.each do |key| - it "sets #{key}" do - expect(client.send(key)).to eq Slack::RealTime::Config.send(key) + context 'with defaults' do + describe '#initialize' do + it 'sets ping' do + expect(client.websocket_ping).to eq 30 + end + it "doesn't set proxy" do + expect(client.websocket_proxy).to be nil + end + Slack::RealTime::Config::ATTRIBUTES.each do |key| + it "sets #{key}" do + expect(client.send(key)).to eq Slack::RealTime::Config.send(key) + end end end end end context 'with custom settings' do