diff options
-rw-r--r-- | app/models/project_services/mattermost_slash_commands_service.rb | 4 | ||||
-rw-r--r-- | lib/mattermost/command.rb | 13 | ||||
-rw-r--r-- | lib/mattermost/session.rb | 4 | ||||
-rw-r--r-- | lib/mattermost/team.rb | 17 | ||||
-rw-r--r-- | spec/fixtures/mattermost_new_command.json | 1 | ||||
-rw-r--r-- | spec/lib/mattermost/command_spec.rb | 13 | ||||
-rw-r--r-- | spec/lib/mattermost/session_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/mattermost/team_spec.rb | 15 |
8 files changed, 31 insertions, 38 deletions
diff --git a/app/models/project_services/mattermost_slash_commands_service.rb b/app/models/project_services/mattermost_slash_commands_service.rb index 5dfc4cc2744..d9fd06e4ac7 100644 --- a/app/models/project_services/mattermost_slash_commands_service.rb +++ b/app/models/project_services/mattermost_slash_commands_service.rb @@ -26,8 +26,8 @@ class MattermostSlashCommandsService < ChatService end def configure(host, current_user, params) - new_token = Mattermost::Session.new(host, current_user).with_session do - Mattermost::Command.create(params[:team_id], command) + new_token = Mattermost::Session.new(current_user).with_session do |session| + Mattermost::Command.create(session, params[:team_id], command) end update!(token: new_token, active: true) diff --git a/lib/mattermost/command.rb b/lib/mattermost/command.rb index 9c37d0b0d79..830e61b015e 100644 --- a/lib/mattermost/command.rb +++ b/lib/mattermost/command.rb @@ -1,14 +1,7 @@ module Mattermost - class Command < Session - def self.create(team_id, trigger: 'gitlab', url:, icon_url:) - - post_command(command)['token'] - end - - private - - def post_command(command) - post( "/teams/#{team_id}/commands/create", body: command.to_json).parsed_response + class Command + def self.create(session, team_id, command) + session.post("/api/v3/teams/#{team_id}/commands/create", body: command.to_json)['token'] end end end diff --git a/lib/mattermost/session.rb b/lib/mattermost/session.rb index dcdff94814c..670f83bb6bc 100644 --- a/lib/mattermost/session.rb +++ b/lib/mattermost/session.rb @@ -30,6 +30,8 @@ module Mattermost begin yield self + rescue Errno::ECONNREFUSED + raise NoSessionError ensure destroy end @@ -112,4 +114,4 @@ module Mattermost end end end -end
\ No newline at end of file +end diff --git a/lib/mattermost/team.rb b/lib/mattermost/team.rb index 714748aea3c..9e1b22623a3 100644 --- a/lib/mattermost/team.rb +++ b/lib/mattermost/team.rb @@ -1,21 +1,20 @@ module Mattermost - class Team < Session - def self.team_admin - return [] unless initial_load['team_members'] + class Team + def self.team_admin(session) + 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') end.compact - initial_load['teams'].select do |team| + response_body['teams'].select do |team| team_ids.include?(team['id']) end end - private - - def initial_load - @initial_load ||= get('/users/initial_load').parsed_response + def self.initial_load(session) + session.get('/api/v3/users/initial_load').parsed_response end end end diff --git a/spec/fixtures/mattermost_new_command.json b/spec/fixtures/mattermost_new_command.json deleted file mode 100644 index 4b827f19926..00000000000 --- a/spec/fixtures/mattermost_new_command.json +++ /dev/null @@ -1 +0,0 @@ -{"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"} diff --git a/spec/lib/mattermost/command_spec.rb b/spec/lib/mattermost/command_spec.rb index 7c6457f639d..8c4b12c4d03 100644 --- a/spec/lib/mattermost/command_spec.rb +++ b/spec/lib/mattermost/command_spec.rb @@ -1,17 +1,14 @@ require 'spec_helper' describe Mattermost::Command do - describe '.create' do - let(:new_command) do - JSON.parse(File.read(Rails.root.join('spec/fixtures/', 'mattermost_new_command.json'))) - end + let(:session) { double("session") } + describe '.create' do it 'gets the teams' do - allow(described_class).to receive(:post_command).and_return(new_command) - - token = described_class.create('abc', url: 'http://trigger.url/trigger', icon_url: 'http://myicon.com/icon.png') + allow(session).to receive(:post).and_return('token' => 'token') + expect(session).to receive(:post) - expect(token).to eq('pzajm5hfbtni3r49ujpt8betpc') + described_class.create(session, 'abc', url: 'http://trigger.com') end end end diff --git a/spec/lib/mattermost/session_spec.rb b/spec/lib/mattermost/session_spec.rb index 752ac796b1c..3c2eddbd221 100644 --- a/spec/lib/mattermost/session_spec.rb +++ b/spec/lib/mattermost/session_spec.rb @@ -96,4 +96,4 @@ describe Mattermost::Session, type: :request do end end end -end
\ No newline at end of file +end diff --git a/spec/lib/mattermost/team_spec.rb b/spec/lib/mattermost/team_spec.rb index 0fe6163900d..b3db2999070 100644 --- a/spec/lib/mattermost/team_spec.rb +++ b/spec/lib/mattermost/team_spec.rb @@ -2,20 +2,23 @@ require 'spec_helper' describe Mattermost::Team do describe '.team_admin' do - let(:init_load) do - JSON.parse(File.read(Rails.root.join('spec/fixtures/', 'mattermost_initial_load.json'))) - end + let(:session) { double("session") } + let(:json) { File.read(Rails.root.join('spec/fixtures/', 'mattermost_initial_load.json')) } + let(:parsed_response) { JSON.parse(json) } 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 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 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") end end |