mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-03 20:48:07 +00:00 
			
		
		
		
	- Add agent bots management UI in settings with avatar upload - Enable agent bot configuration for all inbox types - Implement proper CRUD operations with webhook URL support - Fix agent bots menu item visibility in settings sidebar - Remove all CSML-related code and features - Add migration to convert existing CSML bots to webhook bots - Simplify agent bot model and services to focus on webhook bots - Improve UI to differentiate between system bots and account bots ## Video https://github.com/user-attachments/assets/3f4edbb7-b758-468c-8dd6-a9537b983f7d --------- Co-authored-by: iamsivin <iamsivin@gmail.com> Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Pranav <pranav@chatwoot.com>
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require 'rails_helper'
 | 
						|
require Rails.root.join 'spec/models/concerns/access_tokenable_shared.rb'
 | 
						|
require Rails.root.join 'spec/models/concerns/avatarable_shared.rb'
 | 
						|
 | 
						|
RSpec.describe AgentBot do
 | 
						|
  describe 'associations' do
 | 
						|
    it { is_expected.to have_many(:agent_bot_inboxes) }
 | 
						|
    it { is_expected.to have_many(:inboxes) }
 | 
						|
  end
 | 
						|
 | 
						|
  describe 'concerns' do
 | 
						|
    it_behaves_like 'access_tokenable'
 | 
						|
    it_behaves_like 'avatarable'
 | 
						|
  end
 | 
						|
 | 
						|
  context 'when it validates outgoing_url length' do
 | 
						|
    let(:agent_bot) { create(:agent_bot) }
 | 
						|
 | 
						|
    it 'valid when within limit' do
 | 
						|
      agent_bot.outgoing_url = 'a' * Limits::URL_LENGTH_LIMIT
 | 
						|
      expect(agent_bot.valid?).to be true
 | 
						|
    end
 | 
						|
 | 
						|
    it 'invalid when crossed the limit' do
 | 
						|
      agent_bot.outgoing_url = 'a' * (Limits::URL_LENGTH_LIMIT + 1)
 | 
						|
      agent_bot.valid?
 | 
						|
      expect(agent_bot.errors[:outgoing_url]).to include("is too long (maximum is #{Limits::URL_LENGTH_LIMIT} characters)")
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  context 'when agent bot is deleted' do
 | 
						|
    let(:agent_bot) { create(:agent_bot) }
 | 
						|
    let(:message) { create(:message, sender: agent_bot) }
 | 
						|
 | 
						|
    it 'nullifies the message sender key' do
 | 
						|
      expect(message.sender).to eq agent_bot
 | 
						|
      agent_bot.destroy!
 | 
						|
 | 
						|
      expect(message.reload.sender).to be_nil
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  describe '#system_bot?' do
 | 
						|
    context 'when account_id is nil' do
 | 
						|
      let(:agent_bot) { create(:agent_bot, account_id: nil) }
 | 
						|
 | 
						|
      it 'returns true' do
 | 
						|
        expect(agent_bot.system_bot?).to be true
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when account_id is present' do
 | 
						|
      let(:account) { create(:account) }
 | 
						|
      let(:agent_bot) { create(:agent_bot, account: account) }
 | 
						|
 | 
						|
      it 'returns false' do
 | 
						|
        expect(agent_bot.system_bot?).to be false
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |