trabajo-afectivo/spec/requests/macro_spec.rb

180 lines
4.3 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
require 'rails_helper'
RSpec.describe 'Macro', type: :request, authenticated_as: :user do
let(:successful_params) do
{
name: 'asd',
perform: {
'ticket.state_id': {
value: '2'
}
},
ux_flow_next_up: 'none',
note: '',
group_ids: nil,
active: true
}
end
describe '#create' do
before do
post '/api/v1/macros', params: successful_params, as: :json
end
context 'when user is not allowed to create macro' do
let(:user) { create(:agent) }
it 'does not create macro' do
expect(response).to have_http_status(:forbidden)
end
end
context 'when user is allowed to create macros' do
let(:user) { create(:admin) }
it 'creates macro' do
expect(response).to have_http_status(:created)
end
end
end
describe '#update' do
let(:macro) { create(:macro, name: 'test') }
before do
put "/api/v1/macros/#{macro.id}", params: successful_params, as: :json
end
context 'when user is not allowed to update macro' do
let(:user) { create(:agent) }
it 'does not update macro' do
expect(response).to have_http_status(:forbidden)
end
it 'macro is not changed' do
expect(macro.reload.name).to eq 'test'
end
end
context 'when user is allowed to update macros' do
let(:user) { create(:admin) }
it 'request is successful' do
expect(response).to have_http_status(:ok)
end
it 'macro is changed' do
expect(macro.reload.name).to eq 'asd'
end
end
end
describe '#destroy' do
let(:macro) { create(:macro) }
before do
delete "/api/v1/macros/#{macro.id}", as: :json
end
context 'when user is not allowed to destroy macro' do
let(:user) { create(:agent) }
it 'does not destroy macro' do
expect(response).to have_http_status(:forbidden)
end
it 'macro is not destroyed' do
expect(macro).not_to be_destroyed
end
end
context 'when user is allowed to create macros' do
let(:user) { create(:admin) }
it 'request is successful' do
expect(response).to have_http_status(:ok)
end
it 'macro is destroyed' do
expect(Macro).not_to be_exist(macro.id)
end
end
end
describe '#index' do
before do
get '/api/v1/macros', as: :json
end
context 'when user is not allowed to use macros' do
let(:user) { create(:customer) }
it 'returns exception' do
expect(response).to have_http_status(:forbidden)
end
end
context 'when user is allowed to use macros' do
let(:user) { create(:agent) }
it 'request is successful' do
expect(response).to have_http_status(:ok)
end
it 'returns array of macros' do
expect(json_response.map { |elem| elem['id'] }).to eq [Macro.first.id]
end
end
context 'when user is admin only' do
let(:user) { create(:admin_only) }
it 'returns array of macros' do
expect(json_response.map { |elem| elem['id'] }).to eq [Macro.first.id]
end
end
end
describe '#show' do
let(:macro) { create(:macro, groups: [create(:group)]) }
before do
get "/api/v1/macros/#{macro.id}", as: :json
end
context 'when user is not allowed to use macros' do
let(:user) { create(:customer) }
it 'returns exception' do
expect(response).to have_http_status(:forbidden)
end
end
context 'when user is allowed to use macros' do
let(:user) { create(:agent) }
it 'returns exception when user has no access to related group' do
expect(response).to have_http_status(:not_found)
end
context 'when user has acess to this group' do
let(:user) { create(:agent, groups: macro.groups) }
it 'returns macro when user has access to related group' do
expect(response).to have_http_status(:ok)
end
end
end
context 'when user is admin only' do
let(:user) { create(:admin_only) }
it 'returns array of macros' do
expect(response).to have_http_status(:ok)
end
end
end
end