123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- require 'rails_helper'
- RSpec.describe 'Ticket Zoom > Email Reply Body', authenticated_as: :authenticate, time_zone: 'Europe/London', type: :system do
- let(:agent) { create(:agent, groups: [Group.first]) }
- let(:customer) { create(:customer) }
- let(:ticket) { create(:ticket, customer: customer, group: Group.first) }
- def authenticate
- Setting.set 'ui_ticket_zoom_article_email_full_quote', full_quote_setting_enabled
- Setting.set 'ui_ticket_zoom_article_email_full_quote_header', full_quote_header_setting_enabled
- agent
- end
- # Create a ticket article with a specific timestamp and customer origin.
- # This will allow us to later compare citation header with expected format.
- before do
- timestamp = DateTime.parse('2022-10-06 12:40:00 UTC')
- create(:ticket_article, :inbound_email, ticket: ticket, origin_by: customer, created_at: timestamp)
- end
- context 'when replying to a message' do
- before do
- visit ticket_zoom_path
- end
- context 'without full quote' do
- let(:full_quote_setting_enabled) { false }
- let(:full_quote_header_setting_enabled) { false }
- it 'body keeps existing content' do
- fill_in_body 'keep me'
- click_reply
- find_reset
- expect(body).to have_text 'keep me'
- # repeat
- fill_in_body 'and me! '
- click_reply
- find_reset
- expect(body).to have_text('keep me').and have_text('and me!')
- end
- end
- context 'with full quote' do
- let(:full_quote_setting_enabled) { true }
- context 'with header' do
- let(:full_quote_header_setting_enabled) { true }
- it 'body contains citation header' do
- click_reply
- expect(body).to contain_citation_header("On Thursday, October 6, 2022 at 1:40:00 PM, #{customer.fullname} wrote:")
- end
- end
- context 'without header' do
- let(:full_quote_header_setting_enabled) { false }
- it 'body does not contain citation header' do
- click_reply
- expect(body).not_to contain_citation_header("On Thursday, October 6, 2022 at 1:40:00 PM, #{customer.fullname} wrote:")
- end
- end
- # Regression test for issue #2344 - Missing translation for Full-Quote-Text "on xy wrote"
- context 'with header in German locale' do
- let(:agent) { create(:agent, preferences: { locale: 'de-de' }, groups: [Group.first]) }
- let(:full_quote_header_setting_enabled) { true }
- it 'body contains localized citation header' do
- click_reply
- expect(body).to contain_citation_header("Am Donnerstag, 6. Oktober 2022 um 13:40:00, schrieb #{customer.fullname}:")
- end
- end
- end
- end
- def ticket_zoom_path
- "#ticket/zoom/#{ticket.id}"
- end
- def body
- find(:richtext)
- end
- def fill_in_body(text)
- body.send_keys text
- end
- def find_reset
- find('.js-reset')
- end
- def click_reply
- click '.js-ArticleAction[data-type=emailReply]'
- end
- define :contain_citation_header do
- match do
- contain_citation_header
- end
- match_when_negated do
- contain_no_citation_header
- end
- failure_message do
- return <<~MESSAGE
- expected that citation:
- #{citation_block}
- would contain header:
- #{expected_block}
- MESSAGE
- end
- failure_message_when_negated do
- return <<~MESSAGE
- expected that citation:
- #{citation_block}
- would NOT contain header:
- #{expected_block}
- MESSAGE
- end
- def contain_citation_header
- citation.text.match? expected_regexp
- end
- def contain_no_citation_header
- !citation.text.match? expected_regexp
- end
- def citation
- actual.first('blockquote[type=cite]')
- end
- def citation_block
- citation.text.gsub(%r{^}, '> ')
- end
- def expected_block
- "> #{expected}"
- end
- def expected_regexp
- Regexp.new expected.gsub(' ', '([[:space:]]{1})')
- end
- end
- end
|