Add auto configure of commands

This commit is contained in:
Z.J. van de Weg 2016-12-15 20:19:42 +01:00
parent 99d8d6f0d4
commit 0045996728
7 changed files with 50 additions and 33 deletions

View file

@ -32,16 +32,13 @@ class Projects::MattermostController < Projects::ApplicationController
end
def teams
# Mocking for frontend development
@teams = [{"id"=>"qz8gdr1fopncueb8n9on8ohk3h", "create_at"=>1479992105904, "update_at"=>1479992105904, "delete_at"=>0, "display_name"=>"chatops", "name"=>"chatops", "email"=>"admin@example.com", "type"=>"O", "company_name"=>"", "allowed_domains"=>"", "invite_id"=>"gthxi47gj7rxtcx6zama63zd1w", "allow_open_invite"=>false}]
# @teams =
# begin
# Mattermost::Mattermost.new(Gitlab.config.mattermost.host, current_user).with_session do
# Mattermost::Team.all
# end
# rescue Mattermost::NoSessionError
# @teams = []
# end
@teams =
begin
Mattermost::Mattermost.new(Gitlab.config.mattermost.host, current_user).with_session do
Mattermost::Team.team_admin
end
rescue Mattermost::NoSessionError
[]
end
end
end

View file

@ -25,10 +25,6 @@ class MattermostSlashCommandsService < ChatService
]
end
def auto_config?
Gitlab.config.mattermost.enabled
end
def configure(host, current_user, params)
token = Mattermost::Mattermost.new(host, current_user).with_session do
Mattermost::Commands.create(params[:team_id],

View file

@ -54,10 +54,6 @@ class Service < ActiveRecord::Base
template
end
def auto_config?
false
end
def category
read_attribute(:category).to_sym
end

View file

@ -1,7 +1,7 @@
module Mattermost
class Command
class Command < Session
def self.all(team_id)
Mattermost::Mattermost.get("/teams/#{team_id}/commands/list_team_commands")
get("/teams/#{team_id}/commands/list_team_commands").parsed_response
end
# params should be a hash, which supplies _at least_:
@ -9,18 +9,20 @@ module Mattermost
# - url => What is the URL to trigger here?
# - icon_url => Supply a link to the icon
def self.create(team_id, params)
params = {
command = {
auto_complete: true,
auto_complete_desc: 'List all available commands',
auto_complete_hint: '[help]',
description: 'Perform common operations on GitLab',
display_name: 'GitLab',
method: 'P',
user_name: 'GitLab'
}..merge(params)
user_name: 'GitLab',
trigger: 'gitlab',
}.merge(params)
Mattermost::Mattermost.post( "/teams/#{team_id}/commands/create", params.to_json).
parsed_response['token']
response = post( "/teams/#{team_id}/commands/create", body: command.to_json)
response.parsed_response['token']
end
end
end

View file

@ -65,6 +65,7 @@ module Mattermost
return unless token_uri
self.class.headers("Cookie" => "MMAUTHTOKEN=#{request_token}")
self.class.headers("X-Requested-With" => 'XMLHttpRequest')
request_token
end
@ -106,7 +107,6 @@ module Mattermost
def normalize_uri(uri)
uri << '/' unless uri.end_with?('/')
uri << 'api/v3'
end
end

View file

@ -1,10 +1,17 @@
module Mattermost
class Team < Mattermost
# After normalization this returns an array of hashes
#
# [{"id"=>"paf573pj9t81urupw3fanozeda", "display_name"=>"my team", <snip>}]
def self.all
@all_teams ||= get('/teams/all').parsed_response.values
class Team < Session
def self.team_admin
body = get('/users/initial_load').parsed_response
return [] unless body['team_members']
team_ids = body['team_members'].map do |team|
team['team_id'] if team['roles'].split.include?('team_admin')
end.compact
body['teams'].select do |team|
team_ids.include?(team['id'])
end
end
end
end

View file

@ -0,0 +1,19 @@
require 'spec_helper'
describe Mattermost::Team do
let(:session) { Mattermost::Session.new('http://localhost:8065/', nil) }
describe '.all' do
let(:result) { {id: 'abc', display_name: 'team'} }
before do
WebMock.stub_request(:get, 'http://localhost:8065/api/v3/teams/all').
and_return({ abc: result }.to_json)
end
xit 'gets the teams' do
allow(session).to receive(:with_session) { yield }
expect(described_class.all).to eq(result)
end
end
end