1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-09-03 17:55:52 +03:00
Этот коммит содержится в:
Max Melentiev
2016-03-05 21:40:09 +06:00
родитель e767a65faa
Коммит e03e39bd53
4 изменённых файлов: 252 добавлений и 1 удалений

Просмотреть файл

@@ -0,0 +1,109 @@
RSpec.describe Telegram::Bot::UpdatesController::MessageContext do
include_context 'telegram/bot/updates_controller'
let(:controller_class) do
described_class = self.described_class
Class.new(Telegram::Bot::UpdatesController) do
include described_class
attr_accessor :filter_done
before_action only: :redirect do
self.filter_done = true
end
context_handler do |*args|
[:no_context, *args]
end
context_handler :block do |*args|
[:block_result, *args]
end
context_handler :redirect
context_handler :other_redirect, :redirect
def redirect(*args)
[:method_result, *args]
end
def action(*args)
[:action_result, *args]
end
private
def not_action
raise 'Should not be called!'
end
end
end
describe '#message' do
subject { -> { dispatch } }
let(:payload_type) { 'message' }
let(:payload) { {'text' => text} }
let(:text) { 'asd qwe zxc' }
context 'when context is not set' do
its(:call) { should eq [:no_context, payload] }
it { should_not change(controller, :filter_done) }
it { should_not change { session[:context] } }
end
context 'when context is handled by block' do
before { session[:context] = :block }
its(:call) { should eq [:block_result, payload] }
it { should_not change(controller, :filter_done) }
it { should change { session[:context] }.to nil }
end
context 'when context is handled by short redirect' do
before { session[:context] = :redirect }
its(:call) { should eq [:method_result, *text.split] }
it { should change(controller, :filter_done).to true }
it { should change { session[:context] }.to nil }
end
context 'when context is handled by custom redirect' do
before { session[:context] = :other_redirect }
its(:call) { should eq [:method_result, *text.split] }
it { should change(controller, :filter_done).to true }
it { should change { session[:context] }.to nil }
end
context 'when context is action`s name but not mapped' do
before { session[:context] = :action }
its(:call) { should eq nil }
it { should_not change(controller, :filter_done) }
it { should change { session[:context] }.to nil }
end
context 'when context_to_action is true' do
before { controller_class.context_to_action! }
context 'when context is action`s name but not mapped' do
before { session[:context] = :action }
its(:call) { should eq [:action_result, *text.split] }
it { should_not change(controller, :filter_done) }
it { should change { session[:context] }.to nil }
end
context 'when context is invalid' do
before { session[:context] = :invalid }
it 'raises error and clears context' do
expect do
should raise_error AbstractController::ActionNotFound
end.to change { session[:context] }.to nil
end
end
context 'when context is private method`s name' do
before { session[:context] = :not_action }
it 'raises error and clears context' do
expect do
should raise_error AbstractController::ActionNotFound
end.to change { session[:context] }.to nil
end
end
end
end
end