Initial commit
This commit is contained in:
319
spec/api/v2/management/phones_spec.rb
Normal file
319
spec/api/v2/management/phones_spec.rb
Normal file
@@ -0,0 +1,319 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user