Handle Telegram users
This commit is contained in:
parent
3ec0d99b62
commit
79128fa5da
|
@ -8,6 +8,8 @@ class TelegramBotUpdatesController < ApplicationController
|
|||
def create
|
||||
logger.info params.inspect
|
||||
|
||||
handle_message params[:message] if params[:message]
|
||||
|
||||
render status: :no_content, json: {}
|
||||
end
|
||||
|
||||
|
@ -20,4 +22,19 @@ private
|
|||
def verify_telegram_bot_secret
|
||||
raise NotAuthorizedError unless params[:secret] == @telegram_bot.secret
|
||||
end
|
||||
|
||||
def handle_message(message)
|
||||
handle_user message[:from] if message[:from]
|
||||
end
|
||||
|
||||
def handle_user(user)
|
||||
TelegramUser.create!(
|
||||
remote_telegram_id: user[:id],
|
||||
is_bot: user[:is_bot],
|
||||
first_name: user[:first_name],
|
||||
last_name: user[:last_name],
|
||||
username: user[:username],
|
||||
language_code: user[:language_code],
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,6 +7,6 @@ FactoryBot.define do
|
|||
first_name { Faker::Name.first_name }
|
||||
last_name { Faker::Name.last_name }
|
||||
username { Faker::Internet.username }
|
||||
language_code { I18n.available_locales.sample }
|
||||
language_code { I18n.available_locales.sample.to_s }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,4 +40,50 @@ RSpec.describe 'POST /telegram_bot_updates' do
|
|||
expect(response).to have_http_status :unauthorized
|
||||
end
|
||||
end
|
||||
|
||||
context 'when message "from" attribute is set' do
|
||||
def make_request
|
||||
post '/telegram_bot_updates',
|
||||
params: { telegram_bot_id: telegram_bot.id,
|
||||
secret: telegram_bot.secret,
|
||||
message: { from: telegram_user_attributes } }
|
||||
end
|
||||
|
||||
let :telegram_user_attributes do
|
||||
{
|
||||
id: remote_telegram_id,
|
||||
is_bot: is_bot,
|
||||
first_name: first_name,
|
||||
last_name: last_name,
|
||||
username: username,
|
||||
language_code: language_code,
|
||||
}
|
||||
end
|
||||
|
||||
let(:remote_telegram_id) { rand 1..1_000_000 }
|
||||
let(:is_bot) { [false, true].sample }
|
||||
let(:first_name) { Faker::Name.first_name }
|
||||
let(:last_name) { Faker::Name.last_name }
|
||||
let(:username) { Faker::Internet.username }
|
||||
let(:language_code) { I18n.available_locales.sample.to_s }
|
||||
|
||||
specify do
|
||||
expect { make_request }.to change(TelegramUser, :count).from(0).to(1)
|
||||
end
|
||||
|
||||
context 'after request' do
|
||||
before { make_request }
|
||||
|
||||
specify do
|
||||
expect(TelegramUser.last).to have_attributes(
|
||||
remote_telegram_id: remote_telegram_id,
|
||||
is_bot: is_bot,
|
||||
first_name: first_name,
|
||||
last_name: last_name,
|
||||
username: username,
|
||||
language_code: language_code,
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Reference in New Issue