# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ require 'test_helper' class EmailProcessAutoResponseTest < ActiveSupport::TestCase include BackgroundJobsHelper test 'process auto reply check - 1' do roles = Role.where(name: 'Agent') agent1 = User.create!( login: 'ticket-auto-responder-agent1@example.com', firstname: 'AutoReponder', lastname: 'Agent1', email: 'ticket-auto-responder-agent1@example.com', password: 'agentpw', active: true, roles: roles, groups: Group.all, updated_by_id: 1, created_by_id: 1, ) Trigger.create!( name: '002 auto reply', condition: { 'ticket.action' => { 'operator' => 'is', 'value' => 'create', }, 'ticket.state_id' => { 'operator' => 'is', 'value' => Ticket::State.lookup(name: 'new').id.to_s, } }, perform: { 'notification.email' => { 'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}', 'recipient' => 'ticket_customer', 'subject' => 'Thanks for your inquiry (#{ticket.title})!', }, 'ticket.priority_id' => { 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s, }, 'ticket.tags' => { 'operator' => 'add', 'value' => 'aa, kk, auto-reply', }, }, disable_notification: true, active: true, created_by_id: 1, updated_by_id: 1, ) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(2, article_p.ticket.articles.count) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject X-Loop: yes Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Precedence: Bulk Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Auto-Submitted: auto-generated Some Text" perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) _ticket_p, _article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject X-Auto-Response-Suppress: All Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) fqdn = Setting.get('fqdn') email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Message-ID: <1234@#{fqdn}> Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) fqdn = Setting.get('fqdn') email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Message-ID: <1234@not_matching.#{fqdn}> Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(2, article_p.ticket.articles.count) email_raw_string = "Return-Path: X-Original-To: sales@zammad.com Received: from mail-qk0-f170.example.com (mail-qk0-f170.example.com [209.1.1.1]) by mail.zammad.com (Postfix) with ESMTPS id C3AED5FE2E for ; Mon, 22 Aug 2016 19:03:15 +0200 (CEST) Received: by mail-qk0-f170.example.com with SMTP id t7so87721720qkh.1 for ; Mon, 22 Aug 2016 10:03:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=XX.XX; s=example; h=to:from:date:message-id:subject:mime-version:precedence :auto-submitted:content-transfer-encoding:content-disposition; bh=SL5tTVvGdxsKjLic38irxzlP439P3jixJH0QTG1HJ5I=; b=CIk3PLELgjOCagyiFFbd6rlb8ZRDGYRUrg5Dntxa7e5X+PT4cgL+IE13N9TFkK8ZUJ GohlaPLGiBymIYLTtYMKUpcf22oiX8ZgGiSu1aEMC1Gsa1ZDf+vpy4kd4+7EecRT3IWF 4RafQxeaqe67budhQpO1Z6UAel6BdJj0xguKM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:date:message-id:subject:mime-version :precedence:auto-submitted:content-transfer-encoding :content-disposition; bh=SL5tTVvGdxsKjLic38irxzlP439P3jixJH0QTG1HJ5I=; b=PYULo3xigc4O/cuNZ79OathQ5HDMFWWIwUxz6CHbpXDQR5k3EPy/skJU1992hVz9Rl xiGwScBCkMqOjlxHjQSWhFJIxNtdvMk4m0bixBZ79IEvRuQa9cEbqjf6efnV58br5ftQ 2osHrtQczoSqLE/d61/o102RfQ0avVyX8XNJik0iepg8MiCY7LTOE9hrbnuDDLxgQecH rMEfkR7bafcUj1YEto5Vd7uV11cVZYx8UIQqVAVbfygv8dTSFeOzz3NyM0M41rRexfYH 79Yi5i7z/Wk6q2427wkJ3FIR1B7VQVQEmcq/Texbch+gAXPGBNPUHdg2WHt7NXGktrHL d3DA== X-Gm-Message-State: AE9vXwMCTnihGiG/tc7xNNlhFLcEK6DPp7otypJg5e4alD3xGK2R707BP29druIi/mcdNyaHg1vP5lSZ8EvrwvOF8iA0HNFhECGjBTJ40YrSJAR8E89xVwxFv/er+U3vEpqmPmt+hL4QhxK/+D2gKOcHSxku X-Received: by 10.1.1.1 with SMTP id 17mr25015996qkf.279.1471885393931; Mon, 22 Aug 2016 10:03:13 -0700 (PDT) To: sales@zammad.com From: \"XXX\" Date: Mon, 22 Aug 2016 10:03:13 -0700 Message-ID: Subject: XX PieroXXway - vacation response RE: Callback Request: XX XX [Ticket#1118974] MIME-Version: 1.0 Precedence: bulk X-Autoreply: yes Auto-Submitted: auto-replied Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline test" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) # add an agent notification Trigger.create!( name: '001 additional agent notification', condition: { 'ticket.state_id' => { 'operator' => 'is', 'value' => Ticket::State.lookup(name: 'new').id.to_s, } }, perform: { 'notification.email' => { 'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}', 'recipient' => 'ticket_agents', 'subject' => 'New Ticket add. info (#{ticket.title})!', }, 'ticket.priority_id' => { 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s, }, 'ticket.tags' => { 'operator' => 'add', 'value' => 'aa, kk, agent-notification', }, }, disable_notification: true, active: true, created_by_id: 1, updated_by_id: 1, ) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject X-Loop: yes Some Text" ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert_equal(3, tags.count) assert_equal(2, article_p.ticket.articles.count) article_customer = article_p.ticket.articles.first assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', true) ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert_equal(3, tags.count) assert_equal(2, article_p.ticket.articles.count) article_customer = article_p.ticket.articles.first assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', false) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Some Text" ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert(tags.include?('auto-reply')) assert_equal(3, article_p.ticket.articles.count) article_customer = article_p.ticket.articles[0] assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) article_auto_reply = article_p.ticket.articles[2] assert_match(%r{Thanks for your inquiry}, article_auto_reply.subject) assert_match(%r{me@example.com}, article_auto_reply.to) assert_equal('System', article_auto_reply.sender.name) assert_equal('email', article_auto_reply.type.name) Setting.set('ticket_trigger_recursive', true) ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert(tags.include?('auto-reply')) assert_equal(3, article_p.ticket.articles.count) article_customer = article_p.ticket.articles[0] assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) article_auto_reply = article_p.ticket.articles[2] assert_match(%r{Thanks for your inquiry}, article_auto_reply.subject) assert_match(%r{me@example.com}, article_auto_reply.to) assert_equal('System', article_auto_reply.sender.name) assert_equal('email', article_auto_reply.type.name) end test 'process auto reply check - 2' do roles = Role.where(name: 'Agent') agent1 = User.create!( login: 'ticket-auto-responder-agent1@example.com', firstname: 'AutoReponder', lastname: 'Agent1', email: 'ticket-auto-responder-agent1@example.com', password: 'agentpw', active: true, roles: roles, groups: Group.all, updated_by_id: 1, created_by_id: 1, ) Trigger.create!( name: '001 auto reply', condition: { 'ticket.action' => { 'operator' => 'is', 'value' => 'create', }, 'ticket.state_id' => { 'operator' => 'is', 'value' => Ticket::State.lookup(name: 'new').id.to_s, } }, perform: { 'notification.email' => { 'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}', 'recipient' => 'ticket_customer', 'subject' => 'Thanks for your inquiry (#{ticket.title})!', }, 'ticket.priority_id' => { 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s, }, 'ticket.tags' => { 'operator' => 'add', 'value' => 'aa, kk, auto-reply', }, }, disable_notification: true, active: true, created_by_id: 1, updated_by_id: 1, ) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(2, article_p.ticket.articles.count) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject X-Loop: yes Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Precedence: Bulk Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Auto-Submitted: auto-generated Some Text" perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) _ticket_p, _article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject X-Auto-Response-Suppress: All Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) fqdn = Setting.get('fqdn') email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Message-ID: <1234@#{fqdn}> Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) fqdn = Setting.get('fqdn') email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Message-ID: <1234@not_matching.#{fqdn}> Some Text" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(2, article_p.ticket.articles.count) email_raw_string = "Return-Path: X-Original-To: sales@zammad.com Received: from mail-qk0-f170.example.com (mail-qk0-f170.example.com [209.1.1.1]) by mail.zammad.com (Postfix) with ESMTPS id C3AED5FE2E for ; Mon, 22 Aug 2016 19:03:15 +0200 (CEST) Received: by mail-qk0-f170.example.com with SMTP id t7so87721720qkh.1 for ; Mon, 22 Aug 2016 10:03:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=XX.XX; s=example; h=to:from:date:message-id:subject:mime-version:precedence :auto-submitted:content-transfer-encoding:content-disposition; bh=SL5tTVvGdxsKjLic38irxzlP439P3jixJH0QTG1HJ5I=; b=CIk3PLELgjOCagyiFFbd6rlb8ZRDGYRUrg5Dntxa7e5X+PT4cgL+IE13N9TFkK8ZUJ GohlaPLGiBymIYLTtYMKUpcf22oiX8ZgGiSu1aEMC1Gsa1ZDf+vpy4kd4+7EecRT3IWF 4RafQxeaqe67budhQpO1Z6UAel6BdJj0xguKM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:to:from:date:message-id:subject:mime-version :precedence:auto-submitted:content-transfer-encoding :content-disposition; bh=SL5tTVvGdxsKjLic38irxzlP439P3jixJH0QTG1HJ5I=; b=PYULo3xigc4O/cuNZ79OathQ5HDMFWWIwUxz6CHbpXDQR5k3EPy/skJU1992hVz9Rl xiGwScBCkMqOjlxHjQSWhFJIxNtdvMk4m0bixBZ79IEvRuQa9cEbqjf6efnV58br5ftQ 2osHrtQczoSqLE/d61/o102RfQ0avVyX8XNJik0iepg8MiCY7LTOE9hrbnuDDLxgQecH rMEfkR7bafcUj1YEto5Vd7uV11cVZYx8UIQqVAVbfygv8dTSFeOzz3NyM0M41rRexfYH 79Yi5i7z/Wk6q2427wkJ3FIR1B7VQVQEmcq/Texbch+gAXPGBNPUHdg2WHt7NXGktrHL d3DA== X-Gm-Message-State: AE9vXwMCTnihGiG/tc7xNNlhFLcEK6DPp7otypJg5e4alD3xGK2R707BP29druIi/mcdNyaHg1vP5lSZ8EvrwvOF8iA0HNFhECGjBTJ40YrSJAR8E89xVwxFv/er+U3vEpqmPmt+hL4QhxK/+D2gKOcHSxku X-Received: by 10.1.1.1 with SMTP id 17mr25015996qkf.279.1471885393931; Mon, 22 Aug 2016 10:03:13 -0700 (PDT) To: sales@zammad.com From: \"XXX\" Date: Mon, 22 Aug 2016 10:03:13 -0700 Message-ID: Subject: XX PieroXXway - vacation response RE: Callback Request: XX XX [Ticket#1118974] MIME-Version: 1.0 Precedence: bulk X-Autoreply: yes Auto-Submitted: auto-replied Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline test" _ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs assert_equal(1, article_p.ticket.articles.count) # add an agent notification Trigger.create!( name: '002 additional agent notification', condition: { 'ticket.state_id' => { 'operator' => 'is', 'value' => Ticket::State.lookup(name: 'new').id.to_s, } }, perform: { 'notification.email' => { 'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}', 'recipient' => 'ticket_agents', 'subject' => 'New Ticket add. info (#{ticket.title})!', }, 'ticket.priority_id' => { 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s, }, 'ticket.tags' => { 'operator' => 'add', 'value' => 'aa, kk, agent-notification', }, }, disable_notification: true, active: true, created_by_id: 1, updated_by_id: 1, ) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject X-Loop: yes Some Text" ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert_equal(3, tags.count) assert_equal(2, article_p.ticket.articles.count) article_customer = article_p.ticket.articles.first assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', true) ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert_equal(3, tags.count) assert_equal(2, article_p.ticket.articles.count) article_customer = article_p.ticket.articles.first assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', false) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Some Text" ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert(tags.include?('auto-reply')) assert_equal(3, article_p.ticket.articles.count) article_customer = article_p.ticket.articles[0] assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_auto_reply = article_p.ticket.articles[1] assert_match(%r{Thanks for your inquiry}, article_auto_reply.subject) assert_match(%r{me@example.com}, article_auto_reply.to) assert_equal('System', article_auto_reply.sender.name) assert_equal('email', article_auto_reply.type.name) article_notification = article_p.ticket.articles[2] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', true) ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('new', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert(tags.include?('auto-reply')) assert_equal(3, article_p.ticket.articles.count) article_customer = article_p.ticket.articles[0] assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_auto_reply = article_p.ticket.articles[1] assert_match(%r{Thanks for your inquiry}, article_auto_reply.subject) assert_match(%r{me@example.com}, article_auto_reply.to) assert_equal('System', article_auto_reply.sender.name) assert_equal('email', article_auto_reply.type.name) article_notification = article_p.ticket.articles[2] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) end test 'process auto reply check - recursive' do roles = Role.where(name: 'Agent') agent1 = User.create!( login: 'ticket-auto-responder-agent1@example.com', firstname: 'AutoReponder', lastname: 'Agent1', email: 'ticket-auto-responder-agent1@example.com', password: 'agentpw', active: true, roles: roles, groups: Group.all, updated_by_id: 1, created_by_id: 1, ) Trigger.create!( name: '001 auto reply', condition: { 'ticket.action' => { 'operator' => 'is', 'value' => 'create', }, 'ticket.state_id' => { 'operator' => 'is', 'value' => Ticket::State.lookup(name: 'open').id.to_s, } }, perform: { 'notification.email' => { 'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}', 'recipient' => 'ticket_customer', 'subject' => 'Thanks for your inquiry (#{ticket.title})!', }, 'ticket.priority_id' => { 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s, }, 'ticket.tags' => { 'operator' => 'add', 'value' => 'aa, kk, auto-reply', }, }, disable_notification: true, active: true, created_by_id: 1, updated_by_id: 1, ) # add an agent notification Trigger.create!( name: '002 additional agent notification', condition: { 'ticket.state_id' => { 'operator' => 'is', 'value' => Ticket::State.lookup(name: 'new').id.to_s, } }, perform: { 'notification.email' => { 'body' => 'some text
#{ticket.customer.lastname}
#{ticket.title}', 'recipient' => 'ticket_agents', 'subject' => 'New Ticket add. info (#{ticket.title})!', }, 'ticket.priority_id' => { 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s, }, 'ticket.state_id' => { 'value' => Ticket::State.lookup(name: 'open').id.to_s, }, 'ticket.tags' => { 'operator' => 'add', 'value' => 'aa, kk, agent-notification', }, }, disable_notification: true, active: true, created_by_id: 1, updated_by_id: 1, ) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject X-Loop: yes Some Text" ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('open', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert_equal(3, tags.count) assert_equal(2, article_p.ticket.articles.count) article_customer = article_p.ticket.articles.first assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', true) ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(false, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('open', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert_equal(3, tags.count) assert_equal(2, article_p.ticket.articles.count) article_customer = article_p.ticket.articles.first assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', false) email_raw_string = "From: me@example.com To: customer@example.com Subject: some new subject Some Text" ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('open', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert_equal(2, article_p.ticket.articles.count) article_customer = article_p.ticket.articles[0] assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) Setting.set('ticket_trigger_recursive', true) ticket_p, article_p, _user_p, mail = Channel::EmailParser.new.process({}, email_raw_string) assert_equal(true, mail[:'x-zammad-send-auto-response']) perform_enqueued_jobs tags = ticket_p.tag_list assert_equal('open', ticket_p.state.name) assert_equal('3 high', ticket_p.priority.name) assert(tags.include?('aa')) assert(tags.include?('kk')) assert(tags.include?('agent-notification')) assert(tags.include?('auto-reply')) assert_equal(3, article_p.ticket.articles.count) article_customer = article_p.ticket.articles[0] assert_equal('me@example.com', article_customer.from) assert_equal('customer@example.com', article_customer.to) assert_equal('Customer', article_customer.sender.name) assert_equal('email', article_customer.type.name) article_notification = article_p.ticket.articles[1] assert_match(%r{New Ticket add. info}, article_notification.subject) assert_no_match(%r{me@example.com}, article_notification.to) assert_match(%r{#{agent1.email}}, article_notification.to) assert_equal('System', article_notification.sender.name) assert_equal('email', article_notification.type.name) article_auto_reply = article_p.ticket.articles[2] assert_match(%r{Thanks for your inquiry}, article_auto_reply.subject) assert_match(%r{me@example.com}, article_auto_reply.to) assert_equal('System', article_auto_reply.sender.name) assert_equal('email', article_auto_reply.type.name) end end