320 lines
7.9 KiB
Ruby
320 lines
7.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe API::V2::Management::Phones, type: :request do
|
|
before do
|
|
defaults_for_management_api_v2_security_configuration!
|
|
management_api_v2_security_configuration.merge! \
|
|
scopes: {
|
|
write_phones: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] },
|
|
read_phones: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] },
|
|
}
|
|
end
|
|
let!(:create_admin_permission) do
|
|
create :permission,
|
|
role: 'admin'
|
|
end
|
|
let!(:create_member_permission) do
|
|
create :permission,
|
|
role: 'member'
|
|
end
|
|
let!(:user) { create(:user) }
|
|
|
|
describe 'POST /phones/get' do
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:data) { params.merge(scope: :read_phones) }
|
|
|
|
let(:do_request) do
|
|
post_json '/api/v2/management/phones/get',
|
|
multisig_jwt_management_api_v2({ data: data }, *signers)
|
|
end
|
|
|
|
let(:params) do
|
|
phone_params
|
|
end
|
|
|
|
context 'valid request' do
|
|
context 'user without phones' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid
|
|
}
|
|
end
|
|
|
|
it 'get list of phones' do
|
|
do_request
|
|
expect_status_to_eq 201
|
|
expect_body.to eq []
|
|
end
|
|
end
|
|
|
|
context 'user with phones' do
|
|
let!(:phone) { create(:phone, user: user) }
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid
|
|
}
|
|
end
|
|
|
|
it 'get list of phones' do
|
|
do_request
|
|
expect_status_to_eq 201
|
|
expect(json_body.count).to eq 1
|
|
expect(json_body.first[:number]).to eq phone.number
|
|
expect(json_body.first[:country]).to eq phone.country
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'invalid request' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: 'invalid_uid'
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'user.doesnt_exist')
|
|
expect_status.to eq 422
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'POST /phones' do
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:data) { params.merge(scope: :write_phones) }
|
|
|
|
let(:do_request) do
|
|
post_json '/api/v2/management/phones',
|
|
multisig_jwt_management_api_v2({ data: data }, *signers)
|
|
end
|
|
|
|
let(:params) do
|
|
phone_params
|
|
end
|
|
|
|
context 'valid request' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: '12345678911'
|
|
}
|
|
end
|
|
|
|
it 'creates a phone' do
|
|
expect { do_request }.to change { Phone.count }.by(1)
|
|
expect_status_to_eq 201
|
|
|
|
result = JSON.parse(response.body)
|
|
expect(result['country']).to eq 'US'
|
|
expect(result['number']).to eq phone_params[:number]
|
|
end
|
|
end
|
|
|
|
context 'invalid request' do
|
|
context 'when phone is invalid' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: '123'
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'management.phone.invalid_num')
|
|
expect_status.to eq 400
|
|
end
|
|
end
|
|
|
|
context 'when phone is missing' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_status.to eq 422
|
|
expect_body.to eq(error: 'number is missing, number is empty')
|
|
end
|
|
end
|
|
|
|
context 'when phone is already exists' do
|
|
let!(:phone) do
|
|
create(:phone, validated_at: validated_at)
|
|
end
|
|
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: phone.number
|
|
}
|
|
end
|
|
|
|
context 'when phone verified' do
|
|
let(:validated_at) { 1.minutes.ago }
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'management.phone.number_exist')
|
|
expect_status.to eq 400
|
|
end
|
|
end
|
|
|
|
context 'when phone verified but number is not sanitized' do
|
|
let(:validated_at) { 1.minutes.ago }
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: '++#{phone.number}'
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'management.phone.invalid_num')
|
|
expect_status.to eq 400
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when phone exists on international format' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: '+44 07418084106'
|
|
}
|
|
end
|
|
let(:international_phone) { '447418084106' }
|
|
let!(:phone) do
|
|
create(:phone, validated_at: 1.minute.ago, number: international_phone)
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'management.phone.number_exist')
|
|
expect_status.to eq 400
|
|
end
|
|
end
|
|
|
|
context 'when phone exists for current user' do
|
|
let!(:phone) { create(:phone, number: '447418084106', user_id: user.id)}
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: '447418084106'
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'management.phone.exists')
|
|
expect_status.to eq 400
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'POST /phone/delete' do
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:data) { params.merge(scope: :write_phones) }
|
|
|
|
let(:do_request) do
|
|
post_json '/api/v2/management/phones/delete',
|
|
multisig_jwt_management_api_v2({ data: data }, *signers)
|
|
end
|
|
|
|
let(:params) do
|
|
phone_params
|
|
end
|
|
|
|
context 'valid request' do
|
|
context 'user with one phone number' do
|
|
let!(:phone) { create(:phone, number: '447418084106', user_id: user.id)}
|
|
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: phone.number
|
|
}
|
|
end
|
|
|
|
it 'show deleted phone' do
|
|
expect { do_request }.to change { Phone.count }.by(-1)
|
|
expect_status.to eq 201
|
|
expect(json_body[:number]).to eq phone.number
|
|
expect(json_body[:country]).to eq phone.country
|
|
end
|
|
end
|
|
|
|
context 'user with several phone numbers' do
|
|
let!(:phone1) { create(:phone, number: '447418084106', user_id: user.id)}
|
|
let!(:phone2) { create(:phone, number: '447418084107', user_id: user.id)}
|
|
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: phone2.number
|
|
}
|
|
end
|
|
|
|
it 'show deleted phone' do
|
|
expect { do_request }.to change { Phone.count }.by(-1)
|
|
expect_status.to eq 201
|
|
expect(json_body[:number]).to eq phone2.number
|
|
expect(json_body[:country]).to eq phone2.country
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'invalid request' do
|
|
context 'invalid user' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: 'invalid_uid',
|
|
number: 'number'
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'user.doesnt_exist')
|
|
expect_status.to eq 422
|
|
end
|
|
end
|
|
|
|
context 'invalid phone number' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: 'invalid_number'
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'management.phone.doesnt_exists')
|
|
expect_status.to eq 422
|
|
end
|
|
end
|
|
|
|
context 'non existed phone number' do
|
|
let(:phone_params) do
|
|
{
|
|
uid: user.uid,
|
|
number: '1111111111'
|
|
}
|
|
end
|
|
|
|
it 'renders an error' do
|
|
do_request
|
|
expect_body.to eq(error: 'management.phone.doesnt_exists')
|
|
expect_status.to eq 422
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|