Initial commit

This commit is contained in:
Yaser
2026-08-13 19:56:46 +03:30
commit de1d57a67b
474 changed files with 43185 additions and 0 deletions

View 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