Sha256: 6938216755f6a65c770ef1397084be094a0988056787275c7959aae7f17c5923

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

require 'telegram/bot/updates_controller/testing'

RSpec.shared_context 'telegram/bot/updates_controller' do
  let(:controller_class) { described_class }
  let(:controller) do
    controller_class.new(bot, update).tap do |x|
      x.extend Telegram::Bot::UpdatesController::Testing
    end
  end
  let(:update) { build_update(payload_type, payload) }
  let(:payload_type) { :some_type }
  let(:payload) { double(:payload) }
  let(:bot) { Telegram::Bot::ClientStub.new(bot_name) }
  let(:bot_name) { 'bot' }
  let(:session) { controller.send(:session) }

  include Telegram::Bot::RSpec::ClientMatchers

  def dispatch(bot = self.bot, update = self.update)
    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)
    dispatch bot, update
  end

  def build_update(type, content)
    deep_stringify type => content
  end

  def deep_stringify(input)
    case input
    when Array then input.map(&method(__callee__))
    when Hash then input.transform_keys(&:to_s).transform_values(&method(__callee__))
    else input
    end
  end

  # Matcher to check response. Make sure to define `let(:chat_id)`.
  def respond_with_message(expected)
    send_telegram_message(bot, expected, chat_id: chat_id)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
telegram-bot-0.9.0 lib/telegram/bot/updates_controller/rspec_helpers.rb