Do not create same Telegram user twice
This commit is contained in:
parent
79128fa5da
commit
98071229a1
2 changed files with 61 additions and 8 deletions
|
@ -28,13 +28,15 @@ private
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_user(user)
|
def handle_user(user)
|
||||||
TelegramUser.create!(
|
telegram_user =
|
||||||
remote_telegram_id: user[:id],
|
TelegramUser.find_or_initialize_by remote_telegram_id: user[:id]
|
||||||
is_bot: user[:is_bot],
|
|
||||||
first_name: user[:first_name],
|
telegram_user.is_bot = user[:is_bot]
|
||||||
last_name: user[:last_name],
|
telegram_user.first_name = user[:first_name]
|
||||||
username: user[:username],
|
telegram_user.last_name = user[:last_name]
|
||||||
language_code: user[:language_code],
|
telegram_user.username = user[:username]
|
||||||
)
|
telegram_user.language_code = user[:language_code]
|
||||||
|
|
||||||
|
telegram_user.save!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -86,4 +86,55 @@ RSpec.describe 'POST /telegram_bot_updates' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when message "from" attribute is set and ' \
|
||||||
|
'Telegram user already exist' do
|
||||||
|
let! :telegram_user do
|
||||||
|
create :telegram_user, remote_telegram_id: remote_telegram_id
|
||||||
|
end
|
||||||
|
|
||||||
|
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 }.not_to change(TelegramUser, :count).from(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
|
end
|
||||||
|
|
Reference in a new issue