module Chatops::Controller::TestCaseHelpers

Public Instance Methods

chat(message, user, room_id = "123", message_id = "456") click to toggle source
# File lib/chatops/controller/test_case_helpers.rb, line 42
def chat(message, user, room_id = "123", message_id = "456")
  get :list
  json_response = JSON.load(response.body)
  matchers = json_response["methods"].map { |name, metadata|
    metadata = metadata.dup
    metadata["name"] = name
    prefix = chatops_prefix ? "#{chatops_prefix} " : ""
    metadata["regex"] = Regexp.new("^#{prefix}#{metadata["regex"]}$", "i")
    metadata
  }

  named_params, command = extract_named_params(message)

  matcher = matchers.find { |m| m["regex"].match(command) }

  raise NoMatchingCommandRegex.new("No command matches '#{command}'") unless matcher

  match_data = matcher["regex"].match(command)
  jsonrpc_params = named_params.dup
  matcher["params"].each do |param|
    jsonrpc_params[param] ||= match_data[param.to_sym]
  end
  jsonrpc_params.merge!(user: user, room_id: room_id, mention_slug: user, message_id: message_id)
  chatop matcher["name"].to_sym, jsonrpc_params
end
chatop(method, params = {}) click to toggle source
# File lib/chatops/controller/test_case_helpers.rb, line 19
def chatop(method, params = {})
  args = params.dup.symbolize_keys
  user = args.delete :user
  room_id = args.delete :room_id
  mention_slug = args.delete :mention_slug
  message_id = args.delete :message_id

  params = {
    :params => args,
    :room_id => room_id,
    :user => user,
    :mention_slug => mention_slug,
    :message_id => message_id,
  }

  major_version = Rails.version.split('.')[0].to_i
  if major_version >= 5
    post :execute_chatop, params: params.merge(chatop: method)
  else
    post :execute_chatop, params.merge(chatop: method)
  end
end
chatop_error() click to toggle source
# File lib/chatops/controller/test_case_helpers.rb, line 76
def chatop_error
  json_response = JSON.load(response.body)
  json_response["error"]["message"]
end
chatop_response() click to toggle source
# File lib/chatops/controller/test_case_helpers.rb, line 68
def chatop_response
  json_response = JSON.load(response.body)
  if json_response["error"].present?
    raise "There was an error instead of an expected successful response: #{json_response["error"]}"
  end
  json_response["result"]
end
chatops_auth!() click to toggle source
# File lib/chatops/controller/test_case_helpers.rb, line 5
def chatops_auth!
  request.env["CHATOPS_TESTING_AUTH"] = true
end
chatops_prefix(prefix = nil) click to toggle source
# File lib/chatops/controller/test_case_helpers.rb, line 9
def chatops_prefix(prefix = nil)
  # We abuse request.env here so that rails will cycle this with each test.
  # If we used an instance variable, one would always need to be resetting
  # it.
  if prefix
    request.env["CHATOPS_TESTING_PREFIX"] = prefix
  end
  request.env["CHATOPS_TESTING_PREFIX"]
end
extract_named_params(command_string) click to toggle source
# File lib/chatops/controller/test_case_helpers.rb, line 81
def extract_named_params(command_string)
  params = {}

  while last_index = command_string.rindex(" --")
    arg = command_string[last_index..-1]
    matches = arg.match(/ --(\S+)(.*)/)
    params[matches[1]] = matches[2].strip
    params[matches[1]] = "true" unless params[matches[1]].present?
    command_string = command_string.slice(0, last_index)
  end

  command_string = command_string.strip
  [params, command_string]
end