mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 04:57:51 +00:00 
			
		
		
		
	# Pull Request Template ## Description Fixes [CW-4620](https://linear.app/chatwoot/issue/CW-4620/rethinking-custom-domains-in-chatwoot) <img width="642" height="187" alt="Screenshot 2025-07-29 at 8 17 44 PM" src="https://github.com/user-attachments/assets/ad2f5dac-4b27-4dce-93ca-6cbba74443fb" /> ## Type of change - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Vishnu Narayanan <iamwishnu@gmail.com> Co-authored-by: Pranav <pranavrajs@gmail.com> Co-authored-by: Pranav <pranav@chatwoot.com>
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'rails_helper'
 | 
						|
 | 
						|
RSpec.describe PortalInstructionsMailer do
 | 
						|
  describe 'send_cname_instructions' do
 | 
						|
    let!(:account) { create(:account) }
 | 
						|
    let!(:portal) { create(:portal, account: account, custom_domain: 'help.example.com') }
 | 
						|
    let(:recipient_email) { 'admin@example.com' }
 | 
						|
    let(:class_instance) { described_class.new }
 | 
						|
 | 
						|
    before do
 | 
						|
      allow(described_class).to receive(:new).and_return(class_instance)
 | 
						|
      allow(class_instance).to receive(:smtp_config_set_or_development?).and_return(true)
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when target domain is available' do
 | 
						|
      it 'sends email with cname instructions' do
 | 
						|
        with_modified_env HELPCENTER_URL: 'https://help.chatwoot.com' do
 | 
						|
          mail = described_class.send_cname_instructions(portal: portal, recipient_email: recipient_email).deliver_now
 | 
						|
 | 
						|
          expect(mail.to).to eq([recipient_email])
 | 
						|
          expect(mail.subject).to eq("Finish setting up #{portal.custom_domain}")
 | 
						|
          expect(mail.body.encoded).to include('help.example.com CNAME help.chatwoot.com')
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when helpcenter url is not available but frontend url is' do
 | 
						|
      it 'uses frontend url as target domain' do
 | 
						|
        with_modified_env HELPCENTER_URL: '', FRONTEND_URL: 'https://app.chatwoot.com' do
 | 
						|
          mail = described_class.send_cname_instructions(portal: portal, recipient_email: recipient_email).deliver_now
 | 
						|
 | 
						|
          expect(mail.to).to eq([recipient_email])
 | 
						|
          expect(mail.body.encoded).to include('help.example.com CNAME app.chatwoot.com')
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    context 'when no target domain is available' do
 | 
						|
      it 'does not send email' do
 | 
						|
        with_modified_env HELPCENTER_URL: '', FRONTEND_URL: '' do
 | 
						|
          mail = described_class.send_cname_instructions(portal: portal, recipient_email: recipient_email).deliver_now
 | 
						|
 | 
						|
          expect(mail).to be_nil
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |