123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- require 'rails_helper'
- describe Agents::BeeperAgent do
- let(:base_params) {
- {
- 'type' => 'message',
- 'app_id' => 'some-app-id',
- 'api_key' => 'some-api-key',
- 'sender_id' => 'sender-id',
- 'phone' => '+111111111111',
- 'text' => 'Some text'
- }
- }
- subject {
- agent = described_class.new(name: 'beeper-agent', options: base_params)
- agent.user = users(:jane)
- agent.save! and return agent
- }
- context 'validation' do
- it 'valid' do
- expect(subject).to be_valid
- end
- [:type, :app_id, :api_key, :sender_id].each do |attr|
- it "invalid without #{attr}" do
- subject.options[attr] = nil
- expect(subject).not_to be_valid
- end
- end
- it 'invalid with group_id and phone' do
- subject.options['group_id'] ='some-group-id'
- expect(subject).not_to be_valid
- end
- context '#message' do
- it 'requires text' do
- subject.options[:text] = nil
- expect(subject).not_to be_valid
- end
- end
- context '#image' do
- before(:each) do
- subject.options[:type] = 'image'
- end
- it 'invalid without image' do
- expect(subject).not_to be_valid
- end
- it 'valid with image' do
- subject.options[:image] = 'some-url'
- expect(subject).to be_valid
- end
- end
- context '#event' do
- before(:each) do
- subject.options[:type] = 'event'
- end
- it 'invalid without start_time' do
- expect(subject).not_to be_valid
- end
- it 'valid with start_time' do
- subject.options[:start_time] = Time.now
- expect(subject).to be_valid
- end
- end
- context '#location' do
- before(:each) do
- subject.options[:type] = 'location'
- end
- it 'invalid without latitude and longitude' do
- expect(subject).not_to be_valid
- end
- it 'valid with latitude and longitude' do
- subject.options[:latitude] = 15.0
- subject.options[:longitude] = 16.0
- expect(subject).to be_valid
- end
- end
- context '#task' do
- before(:each) do
- subject.options[:type] = 'task'
- end
- it 'valid with text' do
- expect(subject).to be_valid
- end
- end
- end
- context 'payload_for' do
- it 'removes unwanted attributes' do
- result = subject.send(:payload_for, {'type' => 'message', 'text' => 'text',
- 'sender_id' => 'sender', 'phone' => '+1', 'random_attribute' => 'unwanted'})
- expect(result).to eq('{"text":"text","sender_id":"sender","phone":"+1"}')
- end
- end
- context 'headers' do
- it 'sets X-Beeper-Application-Id header with app_id' do
- expect(subject.send(:headers)['X-Beeper-Application-Id']).to eq(base_params['app_id'])
- end
- it 'sets X-Beeper-REST-API-Key header with api_key' do
- expect(subject.send(:headers)['X-Beeper-REST-API-Key']).to eq(base_params['api_key'])
- end
- it 'sets Content-Type' do
- expect(subject.send(:headers)['Content-Type']).to eq('application/json')
- end
- end
- context 'endpoint_for' do
- it 'returns valid URL for message' do
- expect(subject.send(:endpoint_for, 'message')).to eq('https://api.beeper.io/api/messages.json')
- end
- it 'returns valid URL for image' do
- expect(subject.send(:endpoint_for, 'image')).to eq('https://api.beeper.io/api/images.json')
- end
- it 'returns valid URL for event' do
- expect(subject.send(:endpoint_for, 'event')).to eq('https://api.beeper.io/api/events.json')
- end
- it 'returns valid URL for location' do
- expect(subject.send(:endpoint_for, 'location')).to eq('https://api.beeper.io/api/locations.json')
- end
- it 'returns valid URL for task' do
- expect(subject.send(:endpoint_for, 'task')).to eq('https://api.beeper.io/api/tasks.json')
- end
- end
- end
|