1
0
зеркало из https://github.com/glebtv/telegram-bot.git synced 2026-08-28 15:26:18 +03:00
Files
telegram-bot/spec/telegram/bot/updates_controller/instrumentation_spec.rb
Max Melentiev 57b17f068c Update rubopcop (#227)
* Update rubopcop [WIP]

* Further rubocop fixes

* Fix rubocop-rails cops

* Fix spec

* Disable rubocop suggestions

* Run rubocop in github actions rather than in codeclimate
2023-12-30 15:20:27 +00:00

92 строки
2.5 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Telegram::Bot::UpdatesController::Instrumentation do
include_context 'telegram/bot/updates_controller'
subject { -> { dispatch } }
let(:update) { {message: default_message_options.merge(text: '/start')} }
let(:controller_class) do
Class.new(Telegram::Bot::UpdatesController) do
def start!(*)
end
end
end
let(:action_scope) { 'updates_controller.bot.telegram' }
let(:events) { Hash.new { |h, k| h[k] = [] } }
let!(:subscriber) do
ActiveSupport::Notifications.subscribe(/#{action_scope}/) do |action, *args|
events[action] << args
end
end
after { ActiveSupport::Notifications.unsubscribe(subscriber) }
def actions_list(*prefixes)
prefixes.map { |x| action_name(x) }
end
def action_name(prefix)
"#{prefix}.#{action_scope}"
end
describe '#process_action' do
it 'fires start_processing and process_action events' do
should change(events, :keys).by(actions_list(:start_processing, :process_action))
action = action_name(:start_processing)
expect(events[action].size).to eq(1)
expect(events[action][0].last).to include(update: deep_stringify(update))
action = action_name(:process_action)
expect(events[action].size).to eq(1)
expect(events[action][0].last).to include(update: deep_stringify(update))
end
end
describe '#halted_callback_hook' do
let(:controller_class) do
super().try(:class_eval) do |x|
x.before_action :halter_method
def halter_method
require 'active_support/version'
if ActiveSupport::VERSION::MAJOR >= 5
throw :abort
else
false
end
end
self
end
end
it 'fires halted_callback event' do
should change(events, :keys).
by(actions_list(:start_processing, :halted_callback, :process_action))
action = action_name(:halted_callback)
expect(events[action].size).to eq(1)
expect(events[action][0].last).to include(filter: :halter_method)
end
end
describe '#respond_with' do
before do
def controller.start!(*)
respond_with :message, text: 'sample response'
end
end
it 'fires respond_with event' do
should change(events, :keys).
by(actions_list(:start_processing, :respond_with, :process_action))
action = action_name(:respond_with)
expect(events[action].size).to eq(1)
expect(events[action][0].last).to include(type: :message)
end
end
end