123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- require 'rails_helper'
- describe Agents::TelegramAgent do
- before do
- default_options = {
- auth_token: 'xxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
- chat_id: 'xxxxxxxx'
- }
- @checker = Agents::TelegramAgent.new name: 'Telegram Tester', options: default_options
- @checker.user = users(:bob)
- @checker.save!
- @sent_messages = []
- stub_methods
- end
- def stub_methods
- stub.any_instance_of(Agents::TelegramAgent).send_telegram_message do |method, params|
- @sent_messages << { method => params }
- end
- stub.any_instance_of(Agents::TelegramAgent).load_file do |_url|
- :stubbed_file
- end
- end
- def event_with_payload(payload)
- event = Event.new
- event.agent = agents(:bob_weather_agent)
- event.payload = payload
- event.save!
- event
- end
- describe 'validation' do
- before do
- expect(@checker).to be_valid
- end
- it 'should validate presence of of auth_token' do
- @checker.options[:auth_token] = ''
- expect(@checker).not_to be_valid
- end
- it 'should validate presence of of chat_id' do
- @checker.options[:chat_id] = ''
- expect(@checker).not_to be_valid
- end
- end
- describe '#receive' do
- it 'processes multiple events properly' do
- event_0 = event_with_payload text: 'Looks like its going to rain'
- event_1 = event_with_payload text: 'Another text message'
- @checker.receive [event_0, event_1]
- expect(@sent_messages).to eq([
- { sendMessage: { text: 'Looks like its going to rain' } },
- { sendMessage: { text: 'Another text message' } }
- ])
- end
- it 'accepts photo key and uses :send_photo to send the file' do
- event = event_with_payload photo: 'https://example.com/image.png'
- @checker.receive [event]
- expect(@sent_messages).to eq([{ sendPhoto: { photo: :stubbed_file } }])
- end
- it 'accepts audio key and uses :send_audio to send the file' do
- event = event_with_payload audio: 'https://example.com/sound.mp3'
- @checker.receive [event]
- expect(@sent_messages).to eq([{ sendAudio: { audio: :stubbed_file } }])
- end
- it 'accepts document key and uses :send_document to send the file' do
- event = event_with_payload document: 'https://example.com/document.pdf'
- @checker.receive [event]
- expect(@sent_messages).to eq([{ sendDocument: { document: :stubbed_file } }])
- end
- it 'accepts video key and uses :send_video to send the file' do
- event = event_with_payload video: 'https://example.com/video.avi'
- @checker.receive [event]
- expect(@sent_messages).to eq([{ sendVideo: { video: :stubbed_file } }])
- end
- end
- describe '#working?' do
- it 'is not working without having received an event' do
- expect(@checker).not_to be_working
- end
- it 'is working after receiving an event without error' do
- @checker.last_receive_at = Time.now
- expect(@checker).to be_working
- end
- end
- end
|