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:
Pranav
2025-05-05 19:41:28 -07:00
committed by GitHub
parent 6b42305f59
commit 7cf051aba0
2 changed files with 30 additions and 7 deletions

View File

@@ -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

View File

@@ -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