96 lines
3 KiB
Ruby
96 lines
3 KiB
Ruby
|
require 'rails_helper'
|
||
|
|
||
|
RSpec.describe NotificationFactory::Slack do
|
||
|
describe '.template' do
|
||
|
subject(:template) do
|
||
|
NotificationFactory::Slack.template(
|
||
|
template: action,
|
||
|
locale: 'en-us',
|
||
|
timezone: 'Europe/Berlin',
|
||
|
objects: {
|
||
|
ticket: ticket,
|
||
|
article: article,
|
||
|
recipient: agent,
|
||
|
current_user: current_user,
|
||
|
changes: changes,
|
||
|
}
|
||
|
)
|
||
|
end
|
||
|
|
||
|
let(:ticket) { article.ticket }
|
||
|
let(:article) { create(:ticket_article) }
|
||
|
let(:agent) { create(:agent_user) }
|
||
|
let(:current_user) { create(:agent_user) }
|
||
|
|
||
|
context 'for "ticket_create", with an empty "changes" hash' do
|
||
|
let(:action) { 'ticket_create' }
|
||
|
|
||
|
let(:changes) { {} }
|
||
|
|
||
|
it 'returns a hash with subject: <ticket title> (as Markdown heading)' do
|
||
|
expect(template).to include(subject: "# #{ticket.title}")
|
||
|
end
|
||
|
|
||
|
it 'returns a hash with body: <article author & body>' do
|
||
|
expect(template[:body])
|
||
|
.to match(/Created by #{current_user.fullname}/)
|
||
|
.and match(/#{article.body}\z/)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'for "ticket_update", with a populated "changes" hash' do
|
||
|
let(:action) { 'ticket_update' }
|
||
|
|
||
|
let(:changes) do
|
||
|
{
|
||
|
state: %w[aaa bbb],
|
||
|
group: %w[xxx yyy],
|
||
|
pending_time: [Time.zone.parse('2019-04-01T10:00:00Z0'), Time.zone.parse('2019-04-01T23:00:00Z0')],
|
||
|
}
|
||
|
end
|
||
|
|
||
|
it 'returns a hash with subject: <ticket title> (as Markdown heading)' do
|
||
|
expect(template).to include(subject: "# #{ticket.title}")
|
||
|
end
|
||
|
|
||
|
it 'returns a hash with body: <article editor, changes, & body>' do
|
||
|
expect(template[:body])
|
||
|
.to match(/Updated by #{current_user.fullname}/)
|
||
|
.and match(/state: aaa -> bbb/)
|
||
|
.and match(/group: xxx -> yyy/)
|
||
|
.and match(%r{pending_time: 04/01/2019 12:00 \(Europe/Berlin\) -> 04/02/2019 01:00 \(Europe/Berlin\)})
|
||
|
.and match(/#{article.body}\z/)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'for "ticket_escalate"' do
|
||
|
before { ticket.escalation_at = escalation_time }
|
||
|
let(:escalation_time) { Time.zone.parse('2019-04-01T10:00:00Z') }
|
||
|
|
||
|
subject(:template) do
|
||
|
NotificationFactory::Slack.template(
|
||
|
template: 'ticket_escalation',
|
||
|
locale: 'en-us',
|
||
|
timezone: 'Europe/Berlin',
|
||
|
objects: {
|
||
|
ticket: ticket,
|
||
|
article: article,
|
||
|
recipient: agent,
|
||
|
}
|
||
|
)
|
||
|
end
|
||
|
|
||
|
it 'returns a hash with subject: <ticket title> (as Markdown heading)' do
|
||
|
expect(template).to include(subject: "# #{ticket.title}")
|
||
|
end
|
||
|
|
||
|
it 'returns a hash with body: <ticket customer, escalation time, & body>' do
|
||
|
expect(template[:body])
|
||
|
.to match(/A ticket \(#{ticket.title}\) from "#{ticket.customer.fullname}"/)
|
||
|
.and match(%r{is escalated since "04/01/2019 12:00 \(Europe/Berlin\)"!})
|
||
|
.and match(/#{article.body}\z/)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|