зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-06 19:15:50 +03:00
Inegration context for RSpec
ActionDispatch::Testing::Integration requires smth else and defines Rails, so had to change `defined?(Rails)` all over the code.
Этот коммит содержится в:
@@ -20,7 +20,7 @@ module Telegram
|
||||
def bot_poller_mode?
|
||||
return @bot_poller_mode if defined?(@bot_poller_mode)
|
||||
@bot_poller_mode = ENV.fetch('BOT_POLLER_MODE') do
|
||||
Rails.env.development? if defined?(Rails)
|
||||
Rails.env.development? if defined?(Rails.env)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -47,7 +47,7 @@ module Telegram
|
||||
# Can be overwritten with .bots_config=
|
||||
def bots_config
|
||||
@bots_config ||=
|
||||
if defined?(Rails)
|
||||
if defined?(Rails.application)
|
||||
telegram_config = Rails.application.secrets[:telegram] || {}
|
||||
(telegram_config['bots'] || {}).symbolize_keys.tap do |config|
|
||||
default = telegram_config['bot']
|
||||
|
||||
49
lib/telegram/bot/rspec/integration.rb
Обычный файл
49
lib/telegram/bot/rspec/integration.rb
Обычный файл
@@ -0,0 +1,49 @@
|
||||
RSpec.shared_context 'telegram/bot/integration' do
|
||||
let(:bot) { Telegram.bot }
|
||||
let(:from_id) { 123 }
|
||||
let(:chat_id) { 456 }
|
||||
let(:default_message_options) { {from: {id: from_id}, chat: {id: chat_id}} }
|
||||
let(:controller_path) do
|
||||
route_name = Telegram::Bot::RoutesHelper.route_name_for_bot(bot)
|
||||
Rails.application.routes.url_helpers.public_send("#{route_name}_path")
|
||||
end
|
||||
let(:request_headers) do
|
||||
{
|
||||
'ACCEPT' => 'application/json',
|
||||
'Content-Type' => 'application/json',
|
||||
}
|
||||
end
|
||||
let(:clear_session?) { described_class.respond_to?(:session_store) }
|
||||
before { described_class.session_store.clear if clear_session? }
|
||||
|
||||
include Telegram::Bot::RSpec::ClientMatchers
|
||||
|
||||
def dispatch(update)
|
||||
if ActionPack::VERSION::MAJOR >= 5
|
||||
post(controller_path, params: update.to_json, headers: request_headers)
|
||||
else
|
||||
post(controller_path, update.to_json, request_headers)
|
||||
end
|
||||
end
|
||||
|
||||
def dispatch_message(text, options = {})
|
||||
dispatch message: default_message_options.merge(options).merge(text: text)
|
||||
end
|
||||
|
||||
def dispatch_command(*args)
|
||||
options = args.last.is_a?(Hash) ? args.pop : {}
|
||||
dispatch_message("/#{args.join ' '}", options)
|
||||
end
|
||||
|
||||
# Matcher to check response. Make sure to define `let(:chat_id)`.
|
||||
def respond_with_message(expected)
|
||||
raise 'Define chat_id to use respond_with_message' unless defined?(chat_id)
|
||||
send_telegram_message(bot, expected, chat_id: chat_id)
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
if config.respond_to?(:include_context)
|
||||
config.include_context 'telegram/bot/integration', :telegram_bot
|
||||
end
|
||||
end
|
||||
@@ -13,6 +13,9 @@ RSpec.shared_context 'telegram/bot/updates_controller' do
|
||||
let(:bot) { Telegram::Bot::ClientStub.new(bot_name) }
|
||||
let(:bot_name) { 'bot' }
|
||||
let(:session) { controller.send(:session) }
|
||||
let(:from_id) { 123 }
|
||||
let(:chat_id) { 456 }
|
||||
let(:default_message_options) { {from: {id: from_id}, chat: {id: chat_id}} }
|
||||
|
||||
include Telegram::Bot::RSpec::ClientMatchers
|
||||
|
||||
@@ -20,9 +23,8 @@ RSpec.shared_context 'telegram/bot/updates_controller' do
|
||||
controller.dispatch_again(bot, update)
|
||||
end
|
||||
|
||||
def dispatch_message(text, options = nil)
|
||||
options ||= respond_to?(:default_message_options) ? default_message_options : {}
|
||||
update = build_update :message, options.merge(text: text)
|
||||
def dispatch_message(text, options = {})
|
||||
update = build_update :message, default_message_options.merge(options).merge(text: text)
|
||||
dispatch bot, update
|
||||
end
|
||||
|
||||
@@ -43,3 +45,9 @@ RSpec.shared_context 'telegram/bot/updates_controller' do
|
||||
send_telegram_message(bot, expected, chat_id: chat_id)
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
if config.respond_to?(:include_context)
|
||||
config.include_context 'telegram/bot/updates_controller', type: :telegram_bot_controller
|
||||
end
|
||||
end
|
||||
|
||||
@@ -27,12 +27,12 @@ module Telegram
|
||||
attr_reader :bot, :controller, :timeout, :offset, :logger, :running, :reload
|
||||
|
||||
def initialize(bot, controller, **options)
|
||||
@logger = options.fetch(:logger) { defined?(Rails) && Rails.logger }
|
||||
@logger = options.fetch(:logger) { defined?(Rails.logger) && Rails.logger }
|
||||
@bot = bot
|
||||
@controller = controller
|
||||
@timeout = options.fetch(:timeout) { DEFAULT_TIMEOUT }
|
||||
@offset = options[:offset]
|
||||
@reload = options.fetch(:reload) { defined?(Rails) && Rails.env.development? }
|
||||
@reload = options.fetch(:reload) { defined?(Rails.env) && Rails.env.development? }
|
||||
end
|
||||
|
||||
def log(&block)
|
||||
@@ -85,7 +85,7 @@ module Telegram
|
||||
end
|
||||
end
|
||||
|
||||
if defined?(Rails) && Rails.application.respond_to?(:reloader)
|
||||
if defined?(Rails.application) && Rails.application.respond_to?(:reloader)
|
||||
def reloading_code
|
||||
Rails.application.reloader.wrap do
|
||||
yield
|
||||
|
||||
Ссылка в новой задаче
Block a user