trabajo-afectivo/test/integration/slack_test.rb

193 lines
4.8 KiB
Ruby
Raw Normal View History

2016-04-15 21:56:10 +00:00
# encoding: utf-8
require 'integration_test_helper'
require 'slack'
class SlackTest < ActiveSupport::TestCase
# needed to check correct behavior
slack_group = Group.create_if_not_exists(
name: 'Slack',
updated_by_id: 1,
created_by_id: 1
)
# check
test 'base' do
if !ENV['SLACK_CI_CHANNEL']
raise "ERROR: Need SLACK_CI_CHANNEL - hint SLACK_CI_CHANNEL='ci-zammad'"
end
if !ENV['SLACK_CI_WEBHOOK']
raise "ERROR: Need SLACK_CI_WEBHOOK - hint SLACK_CI_WEBHOOK='https://hooks.slack.com/services/...'"
end
if !ENV['SLACK_CI_CHECKER_TOKEN']
raise "ERROR: Need SLACK_CI_CHECKER_TOKEN - hint SLACK_CI_CHECKER_TOKEN='...'"
end
channel = ENV['SLACK_CI_CHANNEL']
webhook = ENV['SLACK_CI_WEBHOOK']
# set system mode to done / to activate
Setting.set('system_init_done', true)
Setting.set('slack_integration', true)
items = [
{
group_ids: [slack_group.id],
types: %w(create update),
webhook: webhook,
channel: channel,
username: 'zammad bot',
expand: false,
}
]
Setting.set('slack_config', { items: items })
# case 1
customer = User.find(2)
hash = hash_gen
text = "#{rand_word}... #{hash}"
default_group = Group.first
ticket1 = Ticket.create(
title: text,
customer_id: customer.id,
group_id: default_group.id,
state: Ticket::State.find_by(name: 'new'),
priority: Ticket::Priority.find_by(name: '2 normal'),
updated_by_id: 1,
created_by_id: 1,
)
article1 = Ticket::Article.create(
ticket_id: ticket1.id,
body: text,
type: Ticket::Article::Type.find_by(name: 'note'),
sender: Ticket::Article::Sender.find_by(name: 'Customer'),
internal: false,
updated_by_id: 1,
created_by_id: 1,
)
Observer::Transaction.commit
Delayed::Worker.new.work_off
# check if message exists
assert_not(slack_check(channel, hash))
ticket1.state = Ticket::State.find_by(name: 'open')
ticket1.save
Observer::Transaction.commit
Delayed::Worker.new.work_off
# check if message exists
assert_not(slack_check(channel, hash))
# case 2
hash = hash_gen
text = "#{rand_word}... #{hash}"
ticket2 = Ticket.create(
title: text,
customer_id: customer.id,
group_id: slack_group.id,
state: Ticket::State.find_by(name: 'new'),
priority: Ticket::Priority.find_by(name: '2 normal'),
updated_by_id: 1,
created_by_id: 1,
)
article2 = Ticket::Article.create(
ticket_id: ticket2.id,
body: text,
type: Ticket::Article::Type.find_by(name: 'note'),
sender: Ticket::Article::Sender.find_by(name: 'Customer'),
internal: false,
updated_by_id: 1,
created_by_id: 1,
)
Observer::Transaction.commit
Delayed::Worker.new.work_off
# check if message exists
assert(slack_check(channel, hash))
hash = hash_gen
text = "#{rand_word}... #{hash}"
ticket2.title = text
ticket2.save
Observer::Transaction.commit
Delayed::Worker.new.work_off
# check if message exists
assert(slack_check(channel, hash))
end
def hash_gen
(0...10).map { ('a'..'z').to_a[rand(26)] }.join
end
def rand_word
words = [
'dog',
'cat',
'house',
'home',
'yesterday',
'tomorrow',
'new york',
'berlin',
'coffee script',
'java script',
'bob smith',
'be open',
'really nice',
'stay tuned',
'be a good boy',
'invent new things',
]
words[rand(words.length)]
end
def slack_check(channel_name, search_for)
Slack.configure do |config|
config.token = ENV['SLACK_CI_CHECKER_TOKEN']
end
Slack.auth_test
client = Slack::Client.new
channels = client.channels_list['channels']
channel_id = nil
channels.each {|channel|
next if channel['name'] != channel_name
channel_id = channel['id']
}
if !channel_id
raise "ERROR: No such channel '#{channel_name}'"
end
channel_history = client.channels_history(channel: channel_id)
if !channel_history
raise "ERROR: No history for channel #{channel_name}/#{channel_id}"
end
if !channel_history['messages']
raise "ERROR: No history messages for channel #{channel_name}/#{channel_id}"
end
channel_history['messages'].each {|message|
next if !message['text']
if message['text'] =~ /#{search_for}/i
p "SUCCESS: message with #{search_for} found!"
return true
end
}
#raise "ERROR: No such message containing #{search_for} in history of channel #{channel_name}/#{channel_id}"
false
end
end