fix: Update automation to use case-insensitive filter (#5302)
This commit is contained in:
@@ -88,9 +88,13 @@ class AutomationRules::ConditionsFilterService < FilterService
|
|||||||
|
|
||||||
case current_filter['attribute_type']
|
case current_filter['attribute_type']
|
||||||
when 'standard'
|
when 'standard'
|
||||||
|
if current_filter['data_type'] == 'text'
|
||||||
|
" LOWER(messages.#{attribute_key}) #{filter_operator_value} #{query_operator} "
|
||||||
|
else
|
||||||
" messages.#{attribute_key} #{filter_operator_value} #{query_operator} "
|
" messages.#{attribute_key} #{filter_operator_value} #{query_operator} "
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# This will be used in future for contact automation rule
|
# This will be used in future for contact automation rule
|
||||||
def contact_query_string(current_filter, query_hash, current_index)
|
def contact_query_string(current_filter, query_hash, current_index)
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ class FilterService
|
|||||||
query_hash['values'].map { |x| Conversation.statuses[x.to_sym] }
|
query_hash['values'].map { |x| Conversation.statuses[x.to_sym] }
|
||||||
when 'message_type'
|
when 'message_type'
|
||||||
query_hash['values'].map { |x| Message.message_types[x.to_sym] }
|
query_hash['values'].map { |x| Message.message_types[x.to_sym] }
|
||||||
|
when 'content'
|
||||||
|
string_filter_values(query_hash)
|
||||||
else
|
else
|
||||||
query_hash['values']
|
query_hash['values']
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -175,7 +175,7 @@
|
|||||||
"message_type": {
|
"message_type": {
|
||||||
"attribute_name": "Message Type",
|
"attribute_name": "Message Type",
|
||||||
"input_type": "search_box with name tags/plain text",
|
"input_type": "search_box with name tags/plain text",
|
||||||
"data_type": "text",
|
"data_type": "numeric",
|
||||||
"filter_operators": [ "equal_to", "not_equal_to" ],
|
"filter_operators": [ "equal_to", "not_equal_to" ],
|
||||||
"attribute_type": "standard"
|
"attribute_type": "standard"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -362,16 +362,20 @@ describe AutomationRuleListener do
|
|||||||
event_name: 'message_created',
|
event_name: 'message_created',
|
||||||
name: 'Call actions message created based on case in-sensitive filter',
|
name: 'Call actions message created based on case in-sensitive filter',
|
||||||
description: 'Add labels, assign team after message created',
|
description: 'Add labels, assign team after message created',
|
||||||
conditions: [{ 'values': ['KYC'], 'attribute_key': 'content', 'query_operator': nil, 'filter_operator': 'contains' }]
|
conditions: [
|
||||||
|
{ 'values': ['KYC'], 'attribute_key': 'content', 'query_operator': nil, 'filter_operator': 'contains' }
|
||||||
|
]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
let!(:message) { create(:message, account: account, conversation: conversation, message_type: 'incoming', content: 'kyc message') }
|
let!(:message) { create(:message, account: account, conversation: conversation, message_type: 'incoming', content: 'KyC message') }
|
||||||
|
let!(:message_2) { create(:message, account: account, conversation: conversation, message_type: 'incoming', content: 'SALE') }
|
||||||
|
|
||||||
let!(:event) do
|
let!(:event) do
|
||||||
Events::Base.new('message_created', Time.zone.now, { conversation: conversation, message: message })
|
Events::Base.new('message_created', Time.zone.now, { conversation: conversation, message: message })
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'triggers automation rule based on case in-sensitive filter' do
|
it 'triggers automation rule on contains filter' do
|
||||||
expect(conversation.labels).to eq([])
|
expect(conversation.labels).to eq([])
|
||||||
expect(TeamNotifications::AutomationNotificationMailer).to receive(:conversation_creation)
|
expect(TeamNotifications::AutomationNotificationMailer).to receive(:conversation_creation)
|
||||||
listener.message_created(event)
|
listener.message_created(event)
|
||||||
@@ -379,6 +383,23 @@ describe AutomationRuleListener do
|
|||||||
|
|
||||||
expect(conversation.labels.pluck(:name)).to contain_exactly('support', 'priority_customer')
|
expect(conversation.labels.pluck(:name)).to contain_exactly('support', 'priority_customer')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'triggers automation on equal_to filter' do
|
||||||
|
automation_rule.update!(
|
||||||
|
conditions: [
|
||||||
|
{ 'values': ['sale'], 'attribute_key': 'content', 'query_operator': nil, 'filter_operator': 'equal_to' }
|
||||||
|
],
|
||||||
|
actions: [
|
||||||
|
{ 'action_name' => 'add_label', 'action_params' => %w[sale_enquiry] }
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
event = Events::Base.new('message_created', Time.zone.now, { conversation: conversation, message: message_2 })
|
||||||
|
listener.message_created(event)
|
||||||
|
|
||||||
|
conversation.reload
|
||||||
|
expect(conversation.labels.pluck(:name)).to contain_exactly('sale_enquiry')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#message_created' do
|
describe '#message_created' do
|
||||||
|
|||||||
Reference in New Issue
Block a user