Files
Dena/spec/api/v2/management/engines_spec.rb
2026-08-13 19:50:53 +03:30

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