require 'rails_helper' RSpec.describe NotificationFactory::Slack do describe '.template' do subject(:template) do described_class.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) } let(:current_user) { create(:agent) } context 'for "ticket_create", with an empty "changes" hash' do let(:action) { 'ticket_create' } let(:changes) { {} } it 'returns a hash with subject: (as Markdown heading)' do expect(template).to include(subject: "# #{ticket.title}") end it 'returns a hash with 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: (as Markdown heading)' do expect(template).to include(subject: "# #{ticket.title}") end it 'returns a hash with 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 subject(:template) do described_class.template( template: 'ticket_escalation', locale: 'en-us', timezone: 'Europe/Berlin', objects: { ticket: ticket, article: article, recipient: agent, } ) end before { ticket.escalation_at = escalation_time } let(:escalation_time) { Time.zone.parse('2019-04-01T10:00:00Z') } it 'returns a hash with subject: (as Markdown heading)' do expect(template).to include(subject: "# #{ticket.title}") end it 'returns a hash with 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