Commit 6d14a664 authored by Z.J. van de Weg's avatar Z.J. van de Weg

Minor adjustments API Mattermost

[ci skip]
parent 4213bd56
...@@ -26,8 +26,8 @@ class MattermostSlashCommandsService < ChatService ...@@ -26,8 +26,8 @@ class MattermostSlashCommandsService < ChatService
end end
def configure(host, current_user, params) def configure(host, current_user, params)
new_token = Mattermost::Session.new(host, current_user).with_session do new_token = Mattermost::Session.new(current_user).with_session do |session|
Mattermost::Command.create(params[:team_id], command) Mattermost::Command.create(session, params[:team_id], command)
end end
update!(token: new_token, active: true) update!(token: new_token, active: true)
......
module Mattermost module Mattermost
class Command < Session class Command
def self.create(team_id, trigger: 'gitlab', url:, icon_url:) def self.create(session, team_id, command)
session.post("/api/v3/teams/#{team_id}/commands/create", body: command.to_json)['token']
post_command(command)['token']
end
private
def post_command(command)
post( "/teams/#{team_id}/commands/create", body: command.to_json).parsed_response
end end
end end
end end
...@@ -30,6 +30,8 @@ module Mattermost ...@@ -30,6 +30,8 @@ module Mattermost
begin begin
yield self yield self
rescue Errno::ECONNREFUSED
raise NoSessionError
ensure ensure
destroy destroy
end end
......
module Mattermost module Mattermost
class Team < Session class Team
def self.team_admin def self.team_admin(session)
return [] unless initial_load['team_members'] response_body = initial_load(session)
return [] unless response_body['team_members']
team_ids = initial_load['team_members'].map do |team| team_ids = response_body['team_members'].map do |team|
team['team_id'] if team['roles'].split.include?('team_admin') team['team_id'] if team['roles'].split.include?('team_admin')
end.compact end.compact
initial_load['teams'].select do |team| response_body['teams'].select do |team|
team_ids.include?(team['id']) team_ids.include?(team['id'])
end end
end end
private def self.initial_load(session)
session.get('/api/v3/users/initial_load').parsed_response
def initial_load
@initial_load ||= get('/users/initial_load').parsed_response
end end
end end
end end
{"id":"y8j1nexrdirj5nubq5uzdwwidr","token":"pzajm5hfbtni3r49ujpt8betpc","create_at":1481897117122,"update_at":1481897117122,"delete_at":0,"creator_id":"78nm4euoc7dypergdc13ekxgpo","team_id":"w59qt5a817f69jkxdz6xe7y4ir","trigger":"display","method":"P","username":"GitLab","icon_url":"","auto_complete":false,"auto_complete_desc":"","auto_complete_hint":"","display_name":"Display name","description":"the description","url":"http://trigger.url/trigger"}
require 'spec_helper' require 'spec_helper'
describe Mattermost::Command do describe Mattermost::Command do
describe '.create' do let(:session) { double("session") }
let(:new_command) do
JSON.parse(File.read(Rails.root.join('spec/fixtures/', 'mattermost_new_command.json')))
end
describe '.create' do
it 'gets the teams' do it 'gets the teams' do
allow(described_class).to receive(:post_command).and_return(new_command) allow(session).to receive(:post).and_return('token' => 'token')
expect(session).to receive(:post)
token = described_class.create('abc', url: 'http://trigger.url/trigger', icon_url: 'http://myicon.com/icon.png')
expect(token).to eq('pzajm5hfbtni3r49ujpt8betpc') described_class.create(session, 'abc', url: 'http://trigger.com')
end end
end end
end end
...@@ -2,20 +2,23 @@ require 'spec_helper' ...@@ -2,20 +2,23 @@ require 'spec_helper'
describe Mattermost::Team do describe Mattermost::Team do
describe '.team_admin' do describe '.team_admin' do
let(:init_load) do let(:session) { double("session") }
JSON.parse(File.read(Rails.root.join('spec/fixtures/', 'mattermost_initial_load.json'))) let(:json) { File.read(Rails.root.join('spec/fixtures/', 'mattermost_initial_load.json')) }
end let(:parsed_response) { JSON.parse(json) }
before do before do
allow(described_class).to receive(:initial_load).and_return(init_load) allow(session).to receive(:get).with('/api/v3/users/initial_load').
and_return(json)
allow(json).to receive(:parsed_response).and_return(parsed_response)
end end
it 'gets the teams' do it 'gets the teams' do
expect(described_class.team_admin.count).to be(2) expect(described_class.team_admin(session).count).to be(2)
end end
it 'filters on being team admin' do it 'filters on being team admin' do
ids = described_class.team_admin.map { |team| team['id'] } ids = described_class.team_admin(session).map { |team| team['id'] }
expect(ids).to include("w59qt5a817f69jkxdz6xe7y4ir", "my9oujxf5jy1zqdgu9rihd66do") expect(ids).to include("w59qt5a817f69jkxdz6xe7y4ir", "my9oujxf5jy1zqdgu9rihd66do")
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment