зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-07 11:25:52 +03:00
Support for testing bots in poller mode and non-Rails apps
Этот коммит содержится в:
115
spec/telegram/bot/rspec/message_helpers_spec.rb
Обычный файл
115
spec/telegram/bot/rspec/message_helpers_spec.rb
Обычный файл
@@ -0,0 +1,115 @@
|
||||
require 'telegram/bot/rspec/integration/poller'
|
||||
|
||||
RSpec.describe 'Integration: message helpers', telegram_bot: :poller do
|
||||
describe '#default_message_options' do
|
||||
subject { default_message_options }
|
||||
it { should eq from: {id: from_id}, chat: {id: chat_id} }
|
||||
end
|
||||
|
||||
describe '#dispatch_message' do
|
||||
subject { -> { dispatch_message text, options } }
|
||||
let(:text) { '/start asd qwe' }
|
||||
let(:options) { {} }
|
||||
let(:result) { double(:result) }
|
||||
|
||||
it 'invokes dispatch' do
|
||||
expect(self).to receive(:dispatch).with(
|
||||
message: hash_including(default_message_options.merge(
|
||||
text: text,
|
||||
)),
|
||||
) { result }
|
||||
expect(subject.call).to eq result
|
||||
end
|
||||
|
||||
context 'with options' do
|
||||
let(:options) { {option: 1} }
|
||||
it 'invokes dispatch' do
|
||||
expect(self).to receive(:dispatch).with(
|
||||
message: hash_including(default_message_options.merge(
|
||||
text: text,
|
||||
).merge(options)),
|
||||
) { result }
|
||||
expect(subject.call).to eq result
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#dispatch_command' do
|
||||
subject { -> { dispatch_command :start, *args } }
|
||||
let(:args) { [] }
|
||||
let(:result) { double(:result) }
|
||||
|
||||
it 'invokes dispatch' do
|
||||
expect(self).to receive(:dispatch).with(
|
||||
message: hash_including(default_message_options.merge(
|
||||
text: '/start',
|
||||
)),
|
||||
) { result }
|
||||
expect(subject.call).to eq result
|
||||
end
|
||||
|
||||
context 'with args & options' do
|
||||
let(:args) { [*params, options] }
|
||||
let(:params) { %w[qwe asd] }
|
||||
let(:options) { {option: 1} }
|
||||
it 'invokes dispatch' do
|
||||
expect(self).to receive(:dispatch).with(
|
||||
message: hash_including(default_message_options.merge(
|
||||
text: "/start #{params.join(' ')}",
|
||||
).merge(options)),
|
||||
) { result }
|
||||
expect(subject.call).to eq result
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Old specs
|
||||
RSpec.describe 'Integration: message helpers', telegram_bot: :poller do
|
||||
let(:bot) { Telegram::Bot::ClientStub.new('token') }
|
||||
let(:controller_class) do
|
||||
Class.new(Telegram::Bot::UpdatesController) do
|
||||
def start(*args)
|
||||
respond_with :message, text: "Start: #{args.inspect}, option: #{payload['option']}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#default_message_options' do
|
||||
subject { default_message_options }
|
||||
it { should eq from: {id: from_id}, chat: {id: chat_id} }
|
||||
end
|
||||
|
||||
describe '#dispatch_message' do
|
||||
subject { -> { dispatch_message "/start #{args.join ' '}", options } }
|
||||
let(:args) { %w[asd qwe] }
|
||||
let(:options) { {} }
|
||||
it { should respond_with_message "Start: #{args.inspect}, option: " }
|
||||
|
||||
context 'with options' do
|
||||
let(:options) { {option: 1} }
|
||||
it { should respond_with_message "Start: #{args.inspect}, option: 1" }
|
||||
|
||||
context 'and chat_id is not set' do
|
||||
let(:options) { super().merge(chat: nil) }
|
||||
it { should raise_error(/chat is not present/) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#dispatch_command' do
|
||||
subject { -> { dispatch_command :start, *args } }
|
||||
let(:args) { [] }
|
||||
it { should respond_with_message "Start: #{args.inspect}, option: " }
|
||||
|
||||
context 'with args' do
|
||||
let(:args) { %w[asd qwe] }
|
||||
it { should respond_with_message "Start: #{args.inspect}, option: " }
|
||||
end
|
||||
|
||||
context 'with options' do
|
||||
let(:args) { ['asd', 'qwe', option: 1] }
|
||||
it { should respond_with_message "Start: #{args[0...-1].inspect}, option: 1" }
|
||||
end
|
||||
end
|
||||
end
|
||||
Ссылка в новой задаче
Block a user