mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	fix: Show campaigns only if the feature is enabled (#11420)
If the feature is disabled (manually or due to plan changes), the customer cannot disable the existing campaigns. This PR would fix that. Fixes https://linear.app/chatwoot/issue/CW-3691/fix-disable-campaigns-on-plan-downgrade
This commit is contained in:
		| @@ -2,10 +2,15 @@ class Api::V1::Widget::CampaignsController < Api::V1::Widget::BaseController | |||||||
|   skip_before_action :set_contact |   skip_before_action :set_contact | ||||||
|  |  | ||||||
|   def index |   def index | ||||||
|     @campaigns = @web_widget |     account = @web_widget.inbox.account | ||||||
|                  .inbox |     @campaigns = if account.feature_enabled?('campaigns') | ||||||
|                  .campaigns |                    @web_widget | ||||||
|                  .where(enabled: true, account_id: @web_widget.inbox.account_id) |                      .inbox | ||||||
|                  .includes(:sender) |                      .campaigns | ||||||
|  |                      .where(enabled: true, account_id: account.id) | ||||||
|  |                      .includes(:sender) | ||||||
|  |                  else | ||||||
|  |                    [] | ||||||
|  |                  end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|   | |||||||
| @@ -9,7 +9,11 @@ RSpec.describe '/api/v1/widget/campaigns', type: :request do | |||||||
|   describe 'GET /api/v1/widget/campaigns' do |   describe 'GET /api/v1/widget/campaigns' do | ||||||
|     let(:params) { { website_token: web_widget.website_token } } |     let(:params) { { website_token: web_widget.website_token } } | ||||||
|  |  | ||||||
|     context 'with correct website token' do |     context 'when campaigns feature is enabled' do | ||||||
|  |       before do | ||||||
|  |         account.enable_features!('campaigns') | ||||||
|  |       end | ||||||
|  |  | ||||||
|       it 'returns the list of enabled campaigns' do |       it 'returns the list of enabled campaigns' do | ||||||
|         get '/api/v1/widget/campaigns', params: params |         get '/api/v1/widget/campaigns', params: params | ||||||
|  |  | ||||||
| @@ -21,8 +25,22 @@ RSpec.describe '/api/v1/widget/campaigns', type: :request do | |||||||
|       end |       end | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     context 'when campaigns feature is disabled' do | ||||||
|  |       before do | ||||||
|  |         account.disable_features!('campaigns') | ||||||
|  |       end | ||||||
|  |  | ||||||
|  |       it 'returns empty array' do | ||||||
|  |         get '/api/v1/widget/campaigns', params: params | ||||||
|  |  | ||||||
|  |         expect(response).to have_http_status(:success) | ||||||
|  |         json_response = response.parsed_body | ||||||
|  |         expect(json_response).to eq [] | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |  | ||||||
|     context 'with invalid website token' do |     context 'with invalid website token' do | ||||||
|       it 'returns the list of agents' do |       it 'returns not found status' do | ||||||
|         get '/api/v1/widget/campaigns', params: { website_token: '' } |         get '/api/v1/widget/campaigns', params: { website_token: '' } | ||||||
|         expect(response).to have_http_status(:not_found) |         expect(response).to have_http_status(:not_found) | ||||||
|       end |       end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Pranav
					Pranav