192 lines
4.5 KiB
Ruby
192 lines
4.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe API::V2::Management::Engines, type: :request do
|
|
before do
|
|
defaults_for_management_api_v1_security_configuration!
|
|
management_api_v1_security_configuration.merge! \
|
|
scopes: {
|
|
read_engines: { permitted_signers: %i[alex jeff], mandatory_signers: %i[alex] },
|
|
write_engines: { permitted_signers: %i[alex jeff james], mandatory_signers: %i[alex jeff] }
|
|
}
|
|
end
|
|
|
|
describe 'POST /engines/get' do
|
|
def request
|
|
post_json "/api/v2/management/engines/get", multisig_jwt_management_api_v1({ data: data }, *signers)
|
|
end
|
|
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:data) { params.merge(scope: :read_engines) }
|
|
|
|
let(:params) do
|
|
engines_params
|
|
end
|
|
|
|
context do
|
|
let(:engines_params) { {} }
|
|
|
|
it 'lists of engines' do
|
|
request
|
|
expect(response).to be_successful
|
|
|
|
result = JSON.parse(response.body)
|
|
expect(result.size).to eq 2
|
|
end
|
|
end
|
|
|
|
context do
|
|
let(:engines_params) do
|
|
{
|
|
ordering: 'asc'
|
|
}
|
|
end
|
|
|
|
it 'returns engines by ascending order' do
|
|
request
|
|
result = JSON.parse(response.body)
|
|
|
|
expect(response).to be_successful
|
|
expect(result.first['id']).to eq Engine.first.id
|
|
end
|
|
end
|
|
|
|
context do
|
|
let(:engines_params) do
|
|
{
|
|
limit: 1,
|
|
page: 1
|
|
}
|
|
end
|
|
|
|
it 'returns paginated engines' do
|
|
request
|
|
result = JSON.parse(response.body)
|
|
|
|
expect(response).to be_successful
|
|
expect(response.headers.fetch('Total')).to eq '2'
|
|
expect(result.size).to eq 1
|
|
|
|
params[:page] = 2
|
|
request
|
|
result = JSON.parse(response.body)
|
|
|
|
expect(response).to be_successful
|
|
expect(response.headers.fetch('Total')).to eq '2'
|
|
expect(result.size).to eq 1
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'POST /engines' do
|
|
def request
|
|
post_json "/api/v2/management/engines", multisig_jwt_management_api_v1({ data: data }, *signers)
|
|
end
|
|
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:data) { params.merge(scope: :write_engines) }
|
|
|
|
let(:params) do
|
|
engines_params
|
|
end
|
|
|
|
context do
|
|
let(:engines_params) do
|
|
{
|
|
name: 'new-engine',
|
|
driver: 'new_driver',
|
|
uid: 'UID123456',
|
|
key: 'your_key',
|
|
secret: 'your_secret',
|
|
data: { some_data: 'some data' }
|
|
}
|
|
end
|
|
|
|
it 'creates new engine' do
|
|
request
|
|
result = JSON.parse(response.body)
|
|
expect(response).to be_successful
|
|
expect(result['name']).to eq 'new-engine'
|
|
expect(result['data'].blank?).to eq true
|
|
|
|
request
|
|
expect(response).to have_http_status 422
|
|
result = JSON.parse(response.body)
|
|
expect(result['error']).to include('management.engine.duplicate_name')
|
|
end
|
|
end
|
|
|
|
context do
|
|
let(:engines_params) { {} }
|
|
it 'checked required params' do
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
result = JSON.parse(response.body)
|
|
expect(result['error']).to include('name is missing, driver is missing')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'POST /engines/update' do
|
|
def request
|
|
post_json "/api/v2/management/engines/update", multisig_jwt_management_api_v1({ data: data }, *signers)
|
|
end
|
|
|
|
let(:signers) { %i[alex jeff] }
|
|
let(:data) { params.merge(scope: :write_engines) }
|
|
|
|
let(:params) do
|
|
engines_params
|
|
end
|
|
|
|
let!(:engine) { create(:engine) }
|
|
|
|
context do
|
|
let(:engines_params) do
|
|
{
|
|
id: engine.id,
|
|
name: 'Second Engine',
|
|
driver: 'second_driver'
|
|
}
|
|
end
|
|
|
|
it 'updates attributes' do
|
|
request
|
|
result = JSON.parse(response.body)
|
|
|
|
expect(response).to be_successful
|
|
expect(result['name']).to eq 'Second Engine'
|
|
expect(result['driver']).to eq 'second_driver'
|
|
end
|
|
end
|
|
|
|
context do
|
|
let(:engines_params) do
|
|
{
|
|
id: engine.id,
|
|
name: 'Second Engine',
|
|
secret: 'my_secret'
|
|
}
|
|
end
|
|
|
|
it 'updates secret' do
|
|
request
|
|
expect(response).to be_successful
|
|
engine.reload
|
|
expect(engine.secret).to eq('my_secret')
|
|
end
|
|
end
|
|
|
|
context do
|
|
let(:engines_params) { {} }
|
|
it 'checkes required params' do
|
|
request
|
|
|
|
expect(response).to have_http_status 422
|
|
result = JSON.parse(response.body)
|
|
expect(result['error']).to include('id is missing')
|
|
end
|
|
end
|
|
end
|
|
end
|