mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 11:08:04 +00:00 
			
		
		
		
	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
	 Tejaswini Chile
					Tejaswini Chile