2018-07-18 16:03:33 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-07-20 15:12:06 +00:00
|
|
|
module TestHooks
|
|
|
|
class BaseService
|
|
|
|
attr_accessor :hook, :current_user, :trigger
|
|
|
|
|
|
|
|
def initialize(hook, current_user, trigger)
|
|
|
|
@hook = hook
|
|
|
|
@current_user = current_user
|
|
|
|
@trigger = trigger
|
|
|
|
end
|
|
|
|
|
|
|
|
def execute
|
2017-12-08 13:17:15 +00:00
|
|
|
trigger_key = hook.class.triggers.key(trigger.to_sym)
|
2017-07-20 15:12:06 +00:00
|
|
|
trigger_data_method = "#{trigger}_data"
|
|
|
|
|
2017-09-07 11:29:12 +00:00
|
|
|
if trigger_key.nil? || !self.respond_to?(trigger_data_method, true)
|
2017-07-20 15:12:06 +00:00
|
|
|
return error('Testing not available for this hook')
|
|
|
|
end
|
|
|
|
|
|
|
|
error_message = catch(:validation_error) do
|
2017-08-10 16:39:26 +00:00
|
|
|
sample_data = self.__send__(trigger_data_method) # rubocop:disable GitlabSecurity/PublicSend
|
2017-07-20 15:12:06 +00:00
|
|
|
|
2018-04-18 09:19:40 +00:00
|
|
|
return hook.execute(sample_data, trigger_key) # rubocop:disable Cop/AvoidReturnFromBlocks
|
2017-07-20 15:12:06 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
error(error_message)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def error(message, http_status = nil)
|
|
|
|
result = {
|
|
|
|
message: message,
|
|
|
|
status: :error
|
|
|
|
}
|
|
|
|
|
|
|
|
result[:http_status] = http_status if http_status
|
|
|
|
result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|