diff --git a/app/assets/javascripts/app/controllers/agent_ticket_merge.coffee b/app/assets/javascripts/app/controllers/agent_ticket_merge.coffee index aad33ceb4..d71087198 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_merge.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_merge.coffee @@ -98,9 +98,13 @@ class App.TicketMerge extends App.ControllerModal type: 'error' msg: App.i18n.translateContent(data['message']) timeout: 6000 - @formEnable(e) - error: => + error: (data) => + details = data.responseJSON || {} + @notify + type: 'error' + msg: App.i18n.translateContent(details.error_human || details.error || 'Unable to merge!') + timeout: 6000 @formEnable(e) ) diff --git a/app/controllers/tickets_controller.rb b/app/controllers/tickets_controller.rb index 69aa617ac..b6c7a6f07 100644 --- a/app/controllers/tickets_controller.rb +++ b/app/controllers/tickets_controller.rb @@ -332,15 +332,6 @@ class TicketsController < ApplicationController end access!(ticket_slave, 'full') - # check different ticket ids - if ticket_slave.id == ticket_master.id - render json: { - result: 'failed', - message: 'Can\'t merge ticket with it self!', - } - return - end - # merge ticket ticket_slave.merge_to( ticket_id: ticket_master.id, diff --git a/app/models/ticket.rb b/app/models/ticket.rb index e7f1a1fca..5f4fee0bb 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -245,9 +245,12 @@ returns def merge_to(data) # prevent cross merging tickets - target_ticket = Ticket.find(data[:ticket_id]) + target_ticket = Ticket.find_by(id: data[:ticket_id]) raise 'no target ticket given' if !target_ticket - raise 'invalid state for target ticket' if target_ticket.state.name == 'merged' + raise Exceptions::UnprocessableEntity, 'ticket already merged, no merge into merged ticket possible' if target_ticket.state.state_type.name == 'merged' + + # check different ticket ids + raise Exceptions::UnprocessableEntity, 'Can\'t merge ticket with it self!' if id == target_ticket.id # update articles Transaction.execute do diff --git a/spec/models/ticket_spec.rb b/spec/models/ticket_spec.rb index bd19972eb..7125e116d 100644 --- a/spec/models/ticket_spec.rb +++ b/spec/models/ticket_spec.rb @@ -47,7 +47,18 @@ RSpec.describe Ticket do ticket_id: source_ticket.id, user_id: 1, ) - }.to raise_error('invalid state for target ticket') + }.to raise_error('ticket already merged, no merge into merged ticket possible') + end + + it 'prevents merging ticket in it self' do + source_ticket = create(:ticket) + + expect { + result = source_ticket.merge_to( + ticket_id: source_ticket.id, + user_id: 1, + ) + }.to raise_error('Can\'t merge ticket with it self!') end end