spec/unit/models/token_request_spec.rb in ably-0.8.15 vs spec/unit/models/token_request_spec.rb in ably-1.0.0

- old
+ new

@@ -105,6 +105,80 @@ it 'returns a new TokenRequest object from the JSON' do expect(Ably::Models::TokenRequest(token_request_json).client_id).to eql(client_id) end end end + + context 'from_json (#TE6)' do + let(:timestamp) { Time.now } + let(:capabilities) { { '*' => ['publish'] } } + let(:ttl_seconds) { 60 * 1000 } + + context 'with Ruby idiomatic Hash object' do + subject { Ably::Models::TokenRequest.from_json(token_request_object) } + + let(:token_request_object) do + { + nonce: 'val1', + key_name: 'val2', + ttl: ttl_seconds * 1000, + timestamp: timestamp.to_i * 1000, + capability: capabilities, + client_id: 'val3' + } + end + + it 'returns a valid TokenRequest object' do + expect(subject.nonce).to eql('val1') + expect(subject.key_name).to eql('val2') + expect(subject.timestamp.to_f).to be_within(1).of(timestamp.to_f) + expect(subject.ttl).to eql(ttl_seconds) + expect(subject.capability).to eql(capabilities) + expect(subject.client_id).to eql('val3') + end + end + + context 'with JSON-like object' do + subject { Ably::Models::TokenRequest.from_json(token_request_object) } + + let(:token_request_object) do + { + 'keyName' => 'val2', + 'ttl' => ttl_seconds * 1000, + 'timestamp' => timestamp.to_i * 1000, + 'clientId' => 'val3' + } + end + + it 'returns a valid TokenRequest object' do + expect { subject.nonce }.to raise_error(Ably::Exceptions::InvalidTokenRequest) + expect(subject.key_name).to eql('val2') + expect(subject.timestamp.to_f).to be_within(1).of(timestamp.to_f) + expect(subject.ttl).to eql(ttl_seconds) + expect { subject.capability }.to raise_error(Ably::Exceptions::InvalidTokenRequest) + expect(subject.client_id).to eql('val3') + end + end + + context 'with JSON string' do + subject { Ably::Models::TokenRequest.from_json(JSON.dump(token_request_object)) } + + let(:token_request_object) do + { + 'nonce' => 'val1', + 'ttl' => ttl_seconds * 1000, + 'capability' => JSON.dump(capabilities), + 'clientId' => 'val3' + } + end + + it 'returns a valid TokenRequest object' do + expect(subject.nonce).to eql('val1') + expect { subject.key_name }.to raise_error(Ably::Exceptions::InvalidTokenRequest) + expect { subject.timestamp }.to raise_error(Ably::Exceptions::InvalidTokenRequest) + expect(subject.ttl).to eql(ttl_seconds) + expect(subject.capability).to eql(capabilities) + expect(subject.client_id).to eql('val3') + end + end + end end