зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-07 11:25:52 +03:00
Specs for instrumentation
Этот коммит содержится в:
@@ -81,7 +81,8 @@ module Telegram
|
|||||||
include AbstractController::Translation
|
include AbstractController::Translation
|
||||||
include Rescue
|
include Rescue
|
||||||
include ReplyHelpers
|
include ReplyHelpers
|
||||||
prepend Instrumentation
|
include Instrumentation
|
||||||
|
|
||||||
extend Session::ConfigMethods
|
extend Session::ConfigMethods
|
||||||
|
|
||||||
PAYLOAD_TYPES = %w[
|
PAYLOAD_TYPES = %w[
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ module Telegram
|
|||||||
# Most methods are taken from ActionController::Instrumentation,
|
# Most methods are taken from ActionController::Instrumentation,
|
||||||
# some are slightly modified.
|
# some are slightly modified.
|
||||||
module Instrumentation
|
module Instrumentation
|
||||||
class << self
|
extend ActiveSupport::Concern
|
||||||
def prepended(base)
|
|
||||||
base.send :config_accessor, :logger
|
|
||||||
base.extend ClassMethods
|
|
||||||
end
|
|
||||||
|
|
||||||
|
included do
|
||||||
|
config_accessor :logger
|
||||||
|
end
|
||||||
|
|
||||||
|
class << self
|
||||||
def instrument(action, *args, &block)
|
def instrument(action, *args, &block)
|
||||||
ActiveSupport::Notifications.instrument(
|
ActiveSupport::Notifications.instrument(
|
||||||
"#{action}.updates_controller.bot.telegram",
|
"#{action}.updates_controller.bot.telegram",
|
||||||
|
|||||||
86
spec/telegram/bot/updates_controller/instrumentation_spec.rb
Обычный файл
86
spec/telegram/bot/updates_controller/instrumentation_spec.rb
Обычный файл
@@ -0,0 +1,86 @@
|
|||||||
|
RSpec.describe Telegram::Bot::UpdatesController::Instrumentation do
|
||||||
|
include_context 'telegram/bot/updates_controller'
|
||||||
|
|
||||||
|
subject { -> { dispatch } }
|
||||||
|
let(:update) do
|
||||||
|
build_update :message, default_message_options.merge(text: '/start')
|
||||||
|
end
|
||||||
|
|
||||||
|
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: update)
|
||||||
|
|
||||||
|
action = action_name(:process_action)
|
||||||
|
expect(events[action].size).to eq(1)
|
||||||
|
expect(events[action][0].last).to include(update: 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
|
||||||
|
throw :abort
|
||||||
|
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
|
||||||
Ссылка в новой задаче
Block a user