зеркало из
https://github.com/glebtv/telegram-bot.git
synced 2026-09-04 02:05:52 +03:00
Support for testing bots in poller mode and non-Rails apps
Этот коммит содержится в:
@@ -2,6 +2,15 @@ module Telegram
|
||||
module Bot
|
||||
module RSpec
|
||||
autoload :ClientMatchers, 'telegram/bot/rspec/client_matchers'
|
||||
|
||||
module_function
|
||||
|
||||
# Yelds a block if `include_context` is supported.
|
||||
def with_include_context
|
||||
::RSpec.configure do |config|
|
||||
yield(config) if config.respond_to?(:include_context)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,7 +3,6 @@ require 'telegram/bot/rspec/message_helpers'
|
||||
|
||||
# Shared helpers for testing callback query updates.
|
||||
RSpec.shared_context 'telegram/bot/callback_query' do
|
||||
include_context 'telegram/bot/integration'
|
||||
include_context 'telegram/bot/message_helpers'
|
||||
|
||||
subject { -> { dispatch callback_query: payload } }
|
||||
@@ -38,9 +37,3 @@ RSpec.shared_context 'telegram/bot/callback_query' do
|
||||
).with(hash_including(options))
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
if config.respond_to?(:include_context)
|
||||
config.include_context 'telegram/bot/callback_query', :telegram_bot, :callback_query
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
require 'telegram/bot/rspec/message_helpers'
|
||||
require 'telegram/bot/rspec/callback_query_helpers'
|
||||
|
||||
RSpec.shared_context 'telegram/bot/integration' do
|
||||
include Telegram::Bot::RSpec::ClientMatchers
|
||||
include_context 'telegram/bot/message_helpers'
|
||||
|
||||
let(:bot) { Telegram.bot }
|
||||
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.try!(:clear) if clear_session? }
|
||||
|
||||
# Process update.
|
||||
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
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
if config.respond_to?(:include_context)
|
||||
config.include_context 'telegram/bot/integration', :telegram_bot
|
||||
end
|
||||
end
|
||||
14
lib/telegram/bot/rspec/integration/poller.rb
Обычный файл
14
lib/telegram/bot/rspec/integration/poller.rb
Обычный файл
@@ -0,0 +1,14 @@
|
||||
require 'telegram/bot/rspec/integration/shared'
|
||||
|
||||
RSpec.shared_context 'telegram/bot/integration/poller' do
|
||||
include_context 'telegram/bot/integration/shared'
|
||||
let(:controller_class) { described_class }
|
||||
|
||||
def dispatch(update)
|
||||
controller_class.dispatch(bot, update.as_json)
|
||||
end
|
||||
end
|
||||
|
||||
Telegram::Bot::RSpec.with_include_context do |config|
|
||||
config.include_context 'telegram/bot/integration/poller', telegram_bot: :poller
|
||||
end
|
||||
24
lib/telegram/bot/rspec/integration/rack.rb
Обычный файл
24
lib/telegram/bot/rspec/integration/rack.rb
Обычный файл
@@ -0,0 +1,24 @@
|
||||
require 'telegram/bot/rspec/integration/shared'
|
||||
require 'rack/test'
|
||||
|
||||
RSpec.shared_context 'telegram/bot/integration/rack' do
|
||||
include_context 'telegram/bot/integration/shared'
|
||||
include Rack::Test::Methods
|
||||
|
||||
let(:request_path) { raise '`let(:request_path) { path to bot }` is required' }
|
||||
let(:app) { raise '`let(:app) { your rack app here }` is required' }
|
||||
let(:request_headers) do
|
||||
{
|
||||
'ACCEPT' => 'application/json',
|
||||
'CONTENT_TYPE' => 'application/json',
|
||||
}
|
||||
end
|
||||
|
||||
def dispatch(update)
|
||||
post request_path, update.to_json, request_headers
|
||||
end
|
||||
end
|
||||
|
||||
Telegram::Bot::RSpec.with_include_context do |config|
|
||||
config.include_context 'telegram/bot/integration/rack', telegram_bot: :rack
|
||||
end
|
||||
30
lib/telegram/bot/rspec/integration/rails.rb
Обычный файл
30
lib/telegram/bot/rspec/integration/rails.rb
Обычный файл
@@ -0,0 +1,30 @@
|
||||
require 'telegram/bot/rspec/integration/shared'
|
||||
|
||||
#
|
||||
RSpec.shared_context 'telegram/bot/integration/rails', type: :request do
|
||||
include_context 'telegram/bot/integration/shared'
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
end
|
||||
|
||||
Telegram::Bot::RSpec.with_include_context do |config|
|
||||
config.include_context 'telegram/bot/integration/rails', :telegram_bot
|
||||
config.include_context 'telegram/bot/integration/rails', telegram_bot: :rails
|
||||
end
|
||||
14
lib/telegram/bot/rspec/integration/shared.rb
Обычный файл
14
lib/telegram/bot/rspec/integration/shared.rb
Обычный файл
@@ -0,0 +1,14 @@
|
||||
require 'active_support/json'
|
||||
require 'telegram/bot'
|
||||
require 'telegram/bot/rspec/message_helpers'
|
||||
require 'telegram/bot/rspec/callback_query_helpers'
|
||||
|
||||
RSpec.shared_context 'telegram/bot/integration/shared' do
|
||||
include Telegram::Bot::RSpec::ClientMatchers
|
||||
include_context 'telegram/bot/message_helpers'
|
||||
include_context 'telegram/bot/callback_query', :callback_query
|
||||
|
||||
let(:bot) { Telegram.bot }
|
||||
let(:clear_session?) { described_class.respond_to?(:session_store) }
|
||||
before { described_class.session_store.try!(:clear) if clear_session? }
|
||||
end
|
||||
@@ -1,9 +1,11 @@
|
||||
require 'telegram/bot/updates_controller/testing'
|
||||
require 'telegram/bot/rspec/message_helpers'
|
||||
require 'telegram/bot/rspec/callback_query_helpers'
|
||||
|
||||
RSpec.shared_context 'telegram/bot/updates_controller' do
|
||||
include Telegram::Bot::RSpec::ClientMatchers
|
||||
include_context 'telegram/bot/message_helpers'
|
||||
include_context 'telegram/bot/callback_query', :callback_query
|
||||
|
||||
let(:controller_class) { described_class }
|
||||
let(:controller) do
|
||||
@@ -34,8 +36,6 @@ RSpec.shared_context 'telegram/bot/updates_controller' do
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.configure do |config|
|
||||
if config.respond_to?(:include_context)
|
||||
config.include_context 'telegram/bot/updates_controller', type: :telegram_bot_controller
|
||||
end
|
||||
Telegram::Bot::RSpec.with_include_context do |config|
|
||||
config.include_context 'telegram/bot/updates_controller', type: :telegram_bot_controller
|
||||
end
|
||||
|
||||
Ссылка в новой задаче
Block a user