This commit is contained in:
Kamil Trzcinski 2016-12-20 19:11:53 +01:00
parent 0cf23fde7c
commit 61d09a7b15
No known key found for this signature in database
GPG Key ID: 4505F5C7E12C6A5A
8 changed files with 39 additions and 48 deletions

View File

@ -12,13 +12,17 @@ class Projects::MattermostsController < Projects::ApplicationController
end end
def create def create
@service.configure!(current_user, configure_params) result, message = @service.configure(current_user, configure_params)
flash[:notice] = 'This service is now configured' if result
redirect_to edit_namespace_project_service_path(@project.namespace, @project, service) flash[:notice] = 'This service is now configured'
rescue => e redirect_to edit_namespace_project_service_path(
flash[:alert] = e.message @project.namespace, @project, service)
redirect_to new_namespace_project_mattermost_path(@project.namespace, @project) else
flash[:alert] = message || 'Failed to configure service'
redirect_to new_namespace_project_mattermost_path(
@project.namespace, @project)
end
end end
private private
@ -31,9 +35,6 @@ class Projects::MattermostsController < Projects::ApplicationController
def teams def teams
@teams ||= @service.list_teams(current_user) @teams ||= @service.list_teams(current_user)
rescue => e
@teams = []
flash[:alert] = e.message
end end
def service def service

View File

@ -294,8 +294,4 @@ module ApplicationHelper
def page_class def page_class
"issue-boards-page" if current_controller?(:boards) "issue-boards-page" if current_controller?(:boards)
end end
def pretty_url(url)
url.gsub(/\A.*?:\/\//, '')
end
end end

View File

@ -148,14 +148,6 @@ module ProjectsHelper
).html_safe ).html_safe
end end
def mattermost_teams_options(teams)
teams_options = teams.map do |id, options|
[options['display_name'] || options['name'], id]
end
teams_options.compact.unshift(['Select team...', '0'])
end
private private
def repo_children_classes(field) def repo_children_classes(field)

View File

@ -19,15 +19,19 @@ class MattermostSlashCommandsService < ChatSlashCommandsService
'mattermost_slash_commands' 'mattermost_slash_commands'
end end
def configure!(user, params) def configure(user, params)
token = Mattermost::Command.new(user). token = Mattermost::Command.new(user).
create(command(params)) create(command(params))
update!(active: true, token: token) update(active: true, token: token) if token
rescue => Mattermost::Error => e
false, e.message
end end
def list_teams(user) def list_teams(user)
Mattermost::Team.new(user).all Mattermost::Team.new(user).all
rescue => Mattermost::Error => e
[]
end end
private private

View File

@ -29,13 +29,13 @@ module Mattermost
def json_response(response) def json_response(response)
json_response = JSON.parse(response.body) json_response = JSON.parse(response.body)
if response.success? unless response.success?
json_response raise ClientError(json_response['message'] || 'Undefined error')
elsif json_response['message']
raise ClientError(json_response['message'])
else
raise ClientError('Undefined error')
end end
json_response
rescue JSON::JSONError => e
raise ClientError('Cannot parse response')
end end
end end
end end

View File

@ -3,15 +3,11 @@ module Mattermost
class NoSessionError < Error class NoSessionError < Error
def message def message
'No session could be set up, is Mattermost configured with Single Sign on?' 'No session could be set up, is Mattermost configured with Single Sign On?'
end end
end end
class ConnectionError < Error class ConnectionError < Error; end
def message
'Could not connect. Is Mattermost up?'
end
end
# This class' prime objective is to obtain a session token on a Mattermost # This class' prime objective is to obtain a session token on a Mattermost
# instance with SSO configured where this GitLab instance is the provider. # instance with SSO configured where this GitLab instance is the provider.
@ -74,12 +70,16 @@ module Mattermost
def get(path, options = {}) def get(path, options = {})
self.class.get(path, options.merge(headers: @headers)) self.class.get(path, options.merge(headers: @headers))
rescue Errno::ECONNREFUSED rescue HTTParty::Error => e
raise ConnectionError raise ConnectionError(e.message)
rescue Errno::ECONNREFUSED => e
raise ConnectionError(e.message)
end end
def post(path, options = {}) def post(path, options = {})
self.class.post(path, options.merge(headers: @headers)) self.class.post(path, options.merge(headers: @headers))
rescue HTTParty::Error => e
raise ConnectionError(e.message)
rescue Errno::ECONNREFUSED rescue Errno::ECONNREFUSED
raise ConnectionError raise ConnectionError
end end

View File

@ -1,19 +1,17 @@
require 'spec_helper' require 'spec_helper'
describe Mattermost::Command do describe Mattermost::Command do
let(:session) { double("session") }
let(:hash) { { 'token' => 'token' } } let(:hash) { { 'token' => 'token' } }
let(:user) { create(:user) }
describe '.create' do before do
before do Mattermost::Session.base_uri("http://mattermost.example.com")
allow(session).to receive(:post).and_return(hash) end
allow(hash).to receive(:parsed_response).and_return(hash)
end
it 'gets the teams' do describe '#create' do
expect(session).to receive(:post) it 'creates a command' do
described_class.new(user).
described_class.create(session, 'abc', url: 'http://trigger.com') create(team_id: 'abc', url: 'http://trigger.com')
end end
end end
end end

View File

@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe Mattermost::Team do describe Mattermost::Team do
describe '.team_admin' do describe '#all' do
let(:session) { double("session") } let(:session) { double("session") }
let(:response) do let(:response) do