f84b7eef3f
Irker is a gateway which sends IRC messages on git updates. This new service provides an interface to this gateway, integrated in Gitlab, for each updates. As per the guidelines, this commit adds the new feature in the CHANGELOG, tests and documentation. See http://www.catb.org/esr/irker/
103 lines
2.6 KiB
Ruby
103 lines
2.6 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: services
|
|
#
|
|
# id :integer not null, primary key
|
|
# type :string(255)
|
|
# title :string(255)
|
|
# project_id :integer not null
|
|
# created_at :datetime
|
|
# updated_at :datetime
|
|
# active :boolean default(FALSE), not null
|
|
# properties :text
|
|
#
|
|
|
|
require 'spec_helper'
|
|
require 'socket'
|
|
require 'json'
|
|
|
|
describe IrkerService do
|
|
describe 'Associations' do
|
|
it { should belong_to :project }
|
|
it { should have_one :service_hook }
|
|
end
|
|
|
|
describe 'Validations' do
|
|
before do
|
|
subject.active = true
|
|
subject.properties['recipients'] = _recipients
|
|
end
|
|
|
|
context 'active' do
|
|
let(:_recipients) { nil }
|
|
it { should validate_presence_of :recipients }
|
|
end
|
|
|
|
context 'too many recipients' do
|
|
let(:_recipients) { 'a b c d' }
|
|
it 'should add an error if there is too many recipients' do
|
|
subject.send :check_recipients_count
|
|
subject.errors.should_not be_blank
|
|
end
|
|
end
|
|
|
|
context '3 recipients' do
|
|
let(:_recipients) { 'a b c' }
|
|
it 'should not add an error if there is 3 recipients' do
|
|
subject.send :check_recipients_count
|
|
subject.errors.should be_blank
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'Execute' do
|
|
let(:irker) { IrkerService.new }
|
|
let(:user) { create(:user) }
|
|
let(:project) { create(:project) }
|
|
let(:sample_data) { Gitlab::PushDataBuilder.build_sample(project, user) }
|
|
|
|
let(:recipients) { '#commits' }
|
|
let(:colorize_messages) { '1' }
|
|
|
|
before do
|
|
irker.stub(
|
|
active: true,
|
|
project: project,
|
|
project_id: project.id,
|
|
service_hook: true,
|
|
properties: {
|
|
'recipients' => recipients,
|
|
'colorize_messages' => colorize_messages
|
|
}
|
|
)
|
|
irker.settings = {
|
|
server_ip: 'localhost',
|
|
server_port: 6659,
|
|
max_channels: 3,
|
|
default_irc_uri: 'irc://chat.freenode.net/'
|
|
}
|
|
irker.valid?
|
|
@irker_server = TCPServer.new 'localhost', 6659
|
|
end
|
|
|
|
after do
|
|
@irker_server.close
|
|
end
|
|
|
|
it 'should send valid JSON messages to an Irker listener' do
|
|
irker.execute(sample_data)
|
|
|
|
conn = @irker_server.accept
|
|
conn.readlines.each do |line|
|
|
msg = JSON.load(line.chomp("\n"))
|
|
msg.keys.should match_array(['to', 'privmsg'])
|
|
if msg['to'].is_a?(String)
|
|
msg['to'].should == 'irc://chat.freenode.net/#commits'
|
|
else
|
|
msg['to'].should match_array(['irc://chat.freenode.net/#commits'])
|
|
end
|
|
end
|
|
conn.close
|
|
end
|
|
end
|
|
end
|