196 lines
7.2 KiB
Ruby
196 lines
7.2 KiB
Ruby
# encoding: UTF-8
|
|
# frozen_string_literal: true
|
|
|
|
describe API::V2::Admin::Members, type: :request do
|
|
let(:uid) { 'ID00FEE1DEAD' }
|
|
let(:email) { 'someone@mailbox.com' }
|
|
let(:admin) { create(:member, :admin, :level_3, email: email, uid: uid) }
|
|
let(:token) { jwt_for(admin) }
|
|
let(:member) { create(:member, :level_3) }
|
|
let(:member_token) { jwt_for(member) }
|
|
let!(:members) do
|
|
[
|
|
create(:member, role: 'admin', state: 'pending'),
|
|
create(:member, role: 'admin', state: 'active'),
|
|
create(:member, group: 'any'),
|
|
]
|
|
end
|
|
|
|
describe 'GET' do
|
|
context 'authentication' do
|
|
it 'requires token' do
|
|
get '/api/v2/admin/members'
|
|
expect(response.code).to eq '401'
|
|
end
|
|
|
|
it 'validates permissions' do
|
|
api_get'/api/v2/admin/members', token: member_token
|
|
expect(response.code).to eq '403'
|
|
expect(response).to include_api_error('admin.ability.not_permitted')
|
|
end
|
|
|
|
it 'authenticate admin' do
|
|
api_get'/api/v2/admin/members', token: token
|
|
expect(response).to be_successful
|
|
end
|
|
end
|
|
|
|
context 'filtering' do
|
|
it 'returns all members' do
|
|
api_get'/api/v2/admin/members', token: token
|
|
result = JSON.parse(response.body)
|
|
|
|
expect(result.length).to eq(Member.count)
|
|
end
|
|
|
|
it 'filters by role & state' do
|
|
api_get'/api/v2/admin/members', token: token, params: { role: 'admin', state: 'active' }
|
|
result = JSON.parse(response.body)
|
|
expected = Member.where(role: 'admin', state: 'active').pluck(:id)
|
|
|
|
expect(result.map { |r| r['id'] }).to match_array expected
|
|
end
|
|
|
|
it 'filters by group' do
|
|
api_get'/api/v2/admin/members', token: token, params: { group: 'any' }
|
|
result = JSON.parse(response.body)
|
|
expected = Member.where(group: 'any').pluck(:id)
|
|
|
|
expect(result.map { |r| r['id'] }).to match_array expected
|
|
end
|
|
|
|
it 'filters by uid' do
|
|
api_get'/api/v2/admin/members', token: token, params: { uid: uid }
|
|
result = JSON.parse(response.body)
|
|
expect(result.length).to eq 1
|
|
expect(result.first['id']).to eq admin.id
|
|
end
|
|
end
|
|
|
|
context 'accounts' do
|
|
before { admin.touch_accounts }
|
|
it 'returns accounts for all currencies' do
|
|
api_get'/api/v2/admin/members', token: token, params: { uid: uid }
|
|
result = JSON.parse(response.body)
|
|
expect(result.first['accounts'].count).to eq(Currency.count)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'Get by uid' do
|
|
context 'authentication' do
|
|
it 'requires token' do
|
|
get "/api/v2/admin/members/#{member.uid}"
|
|
expect(response.code).to eq '401'
|
|
end
|
|
|
|
it 'validates permissions' do
|
|
api_get "/api/v2/admin/members/#{member.uid}", token: member_token
|
|
expect(response.code).to eq '403'
|
|
expect(response).to include_api_error('admin.ability.not_permitted')
|
|
end
|
|
|
|
it 'authenticate admin' do
|
|
api_get "/api/v2/admin/members/#{member.uid}", token: token
|
|
expect(response).to be_successful
|
|
end
|
|
end
|
|
|
|
context 'get user by uid' do
|
|
let!(:account) { member.touch_accounts }
|
|
let(:address) { Faker::Blockchain::Ethereum.address }
|
|
let(:coin) { Currency.find(:btc) }
|
|
|
|
let!(:beneficiary) { create(:beneficiary,
|
|
member: member,
|
|
currency: coin,
|
|
state: :active,
|
|
data: generate(:coin_beneficiary_data).merge(address: address)) }
|
|
|
|
|
|
it 'returns user entities' do
|
|
api_get "/api/v2/admin/members/UID1234", token: token
|
|
expect(response.code).to eq '404'
|
|
|
|
expect(response).to include_api_error('record.not_found')
|
|
end
|
|
|
|
it 'returns user entities' do
|
|
api_get "/api/v2/admin/members/#{member.uid}", token: token
|
|
expect(response).to be_successful
|
|
result = JSON.parse(response.body)
|
|
|
|
expect(result['uid']).to eq(member.uid)
|
|
expect(result['email']).to eq(member.email)
|
|
expect(result['uid']).to eq(member.uid)
|
|
expect(result['group']).to eq(member.group)
|
|
expect(result['accounts'][0]['currency']).to eq(member.accounts[0].currency.id)
|
|
expect(result['accounts'][0]['balance']).to eq(member.accounts[0].balance.to_s)
|
|
expect(result['accounts'][0]['locked']).to eq(member.accounts[0].locked.to_s)
|
|
expect(result['beneficiaries'][0]['currency']).to eq(member.beneficiaries[0].currency_id)
|
|
expect(result['beneficiaries'][0]['data']['address']).to eq(member.beneficiaries[0].data['address'])
|
|
end
|
|
|
|
context 'fiat beneficiary' do
|
|
let(:fiat) { Currency.find(:usd) }
|
|
|
|
let!(:beneficiary) { create(:beneficiary,
|
|
member: member,
|
|
currency: fiat,
|
|
state: :active,
|
|
data: generate(:fiat_beneficiary_data)) }
|
|
|
|
it 'returns user entities' do
|
|
api_get "/api/v2/admin/members/#{member.uid}", token: token
|
|
expect(response).to be_successful
|
|
result = JSON.parse(response.body)
|
|
|
|
expect(result['uid']).to eq(member.uid)
|
|
expect(result['email']).to eq(member.email)
|
|
expect(result['uid']).to eq(member.uid)
|
|
expect(result['group']).to eq(member.group)
|
|
expect(result['accounts'][0]['currency']).to eq(member.accounts[0].currency.id)
|
|
expect(result['accounts'][0]['balance']).to eq(member.accounts[0].balance.to_s)
|
|
expect(result['accounts'][0]['locked']).to eq(member.accounts[0].locked.to_s)
|
|
expect(result['beneficiaries'][0]['currency']).to eq(member.beneficiaries[0].currency_id)
|
|
expect(result['beneficiaries'][0]['data']['address']).to eq(member.beneficiaries[0].data['address'])
|
|
expect(result['beneficiaries'][0]['data']['account_number']).to eq(member.beneficiaries[0].data['account_number'])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'GET /api/v2/admin/members/groups' do
|
|
it 'get list of all existing groups' do
|
|
api_get '/api/v2/admin/members/groups', token: token
|
|
expect(JSON.parse(response.body)).to match_array Member.groups.map &:to_s
|
|
end
|
|
end
|
|
|
|
describe 'POST /api/v2/admin/members/groups' do
|
|
it 'returns user with updated role' do
|
|
api_put "/api/v2/admin/members/#{member.uid}", token: token, params: { group: 'vip-2' }
|
|
expect(response).to have_http_status(201)
|
|
expect(JSON.parse(response.body)['group']).to eq('vip-2')
|
|
end
|
|
|
|
it 'returns user with updated group' do
|
|
api_put "/api/v2/admin/members/#{member.uid}", token: token, params: { group: ' Vip-2 ' }
|
|
expect(response).to have_http_status(201)
|
|
expect(JSON.parse(response.body)['group']).to eq('vip-2')
|
|
end
|
|
|
|
it 'returns status 404 and error' do
|
|
api_put "/api/v2/admin/members/U1234", token: token, params: { group: 'vip-2' }
|
|
expect(response).to have_http_status(404)
|
|
expect(response).to include_api_error('record.not_found')
|
|
end
|
|
|
|
it 'validate params' do
|
|
api_put "/api/v2/admin/members/#{member.uid}", token: token
|
|
expect(response).to have_http_status(422)
|
|
expect(response).to include_api_error('admin.member.missing_group')
|
|
end
|
|
end
|
|
end
|