spec/acceptance/rest/auth_spec.rb in ably-0.8.11 vs spec/acceptance/rest/auth_spec.rb in ably-0.8.12

- old
+ new

@@ -610,10 +610,91 @@ it 'issues a new token if option :force => true' do expect { auth.authorise(force: true) }.to change { auth.current_token_details } end end + context 'query_time: true' do + let(:local_time) { @now - 60 } + let(:server_time) { @now } + + before do + @now = Time.now + allow(Time).to receive(:now).and_return(local_time) + end + + it 'only queries the server time once and then works out the offset, query_time option is never persisted' do + expect(client).to receive(:time).once.and_return(server_time) + + auth.authorise({}, query_time: true) + auth.authorise({}, force: true) + expect(auth.auth_options).to_not have_key(:query_time) + end + end + + context 'TokenParams argument' do + let(:default_token_params) { { ttl: 23 } } + + before do + auth.authorise default_token_params + end + + it 'has no effect on the defaults when null and TokenParam defaults remain the same' do + old_token = auth.current_token_details + auth.authorise(nil, force: true) + expect(old_token).to_not eql(auth.current_token_details) + expect(auth.token_params[:ttl]).to eql(23) + end + + it 'updates defaults when present and all previous configured TokenParams are discarded' do + old_token = auth.current_token_details + auth.authorise({ client_id: 'bob' }, { force: true }) + expect(old_token).to_not eql(auth.current_token_details) + expect(auth.token_params[:ttl]).to_not eql(23) + expect(auth.token_params[:client_id]).to eql('bob') + end + + it 'updates Auth#token_params attribute with an immutable hash' do + auth.authorise({ client_id: 'bob' }, { force: true }) + expect { auth.token_params['key_name'] = 'new_name' }.to raise_error RuntimeError, /can't modify frozen.*Hash/ + end + end + + context 'AuthOptions argument' do + let(:token_ttl) { 2 } + let(:auth_callback) { Proc.new do + auth.create_token_request(ttl: token_ttl) + end } + let(:default_auth_options) { { auth_callback: auth_callback } } + + before do + stub_const 'Ably::Models::TokenDetails::TOKEN_EXPIRY_BUFFER', 0 # allow token to be used even if about to expire + stub_const 'Ably::Auth::TOKEN_DEFAULTS', Ably::Auth::TOKEN_DEFAULTS.merge(renew_token_buffer: 0) # Ensure tokens issued expire immediately after issue + + auth.authorise(nil, default_auth_options) + @old_token = auth.current_token_details + sleep token_ttl + 0.5 + end + + it 'has no effect on the defaults when null and AuthOptions defaults remain the same' do + auth.authorise(nil, nil) + expect(@old_token).to_not eql(auth.current_token_details) + expect(auth.options[:auth_callback]).to eql(auth_callback) + end + + it 'updates defaults when present and all previous configured AuthOptions are discarded' do + auth.authorise(nil, auth_method: :post) + expect(@old_token).to_not eql(auth.current_token_details) + expect(auth.options[:auth_callback]).to be_nil + expect(auth.options[:auth_method]).to eql(:post) + end + + it 'updates Auth#options attribute with an immutable hash' do + auth.authorise(nil, auth_callback: Proc.new { '1231232.12321:12321312' }) + expect { auth.options['key_name'] = 'new_name' }.to raise_error RuntimeError, /can't modify frozen.*Hash/ + end + end + context 'with previous authorisation' do before do auth.authorise expect(auth.current_token_details).to_not be_expired end @@ -638,13 +719,13 @@ expect(auth.token_params[:ttl]).to_not eql(26) auth.authorise(ttl: 26) expect(auth.token_params[:ttl]).to eql(26) end - it 'updates the persisted token params that are then used for subsequent authorise requests' do - expect(auth.options[:query_time]).to_not eql(true) - auth.authorise({}, query_time: true) - expect(auth.options[:query_time]).to eql(true) + it 'updates the persisted auth options that are then used for subsequent authorise requests' do + expect(auth.options[:authUrl]).to be_nil + auth.authorise({}, authUrl: 'http://foo.com') + expect(auth.options[:authUrl]).to eql('http://foo.com') end context 'with a Proc for the :auth_callback option' do let(:client_id) { random_str } let!(:token) do