chore: Allow feature flag parameters in platform API for account creation (#5589)
Co-authored-by: Pranav Raj S <pranav@chatwoot.com>
This commit is contained in:
parent
a3277b45af
commit
fa73b5290c
6 changed files with 69 additions and 9 deletions
|
@ -3,16 +3,12 @@ class Platform::Api::V1::AccountsController < PlatformController
|
||||||
@resource = Account.new(account_params)
|
@resource = Account.new(account_params)
|
||||||
@resource.save!
|
@resource.save!
|
||||||
@platform_app.platform_app_permissibles.find_or_create_by(permissible: @resource)
|
@platform_app.platform_app_permissibles.find_or_create_by(permissible: @resource)
|
||||||
render json: @resource
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show; end
|
||||||
render json: @resource
|
|
||||||
end
|
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@resource.update!(account_params)
|
@resource.update!(account_params)
|
||||||
render json: @resource
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
|
@ -27,6 +23,14 @@ class Platform::Api::V1::AccountsController < PlatformController
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_params
|
def account_params
|
||||||
params.permit(:name, :locale)
|
if permitted_params[:enabled_features]
|
||||||
|
return permitted_params.except(:enabled_features).merge(selected_feature_flags: permitted_params[:enabled_features].map(&:to_sym))
|
||||||
|
end
|
||||||
|
|
||||||
|
permitted_params
|
||||||
|
end
|
||||||
|
|
||||||
|
def permitted_params
|
||||||
|
params.permit(:name, :locale, enabled_features: [], limits: {})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
1
app/views/platform/api/v1/accounts/create.json.jbuilder
Normal file
1
app/views/platform/api/v1/accounts/create.json.jbuilder
Normal file
|
@ -0,0 +1 @@
|
||||||
|
json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource
|
1
app/views/platform/api/v1/accounts/show.json.jbuilder
Normal file
1
app/views/platform/api/v1/accounts/show.json.jbuilder
Normal file
|
@ -0,0 +1 @@
|
||||||
|
json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource
|
1
app/views/platform/api/v1/accounts/update.json.jbuilder
Normal file
1
app/views/platform/api/v1/accounts/update.json.jbuilder
Normal file
|
@ -0,0 +1 @@
|
||||||
|
json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource
|
9
app/views/platform/api/v1/models/_account.json.jbuilder
Normal file
9
app/views/platform/api/v1/models/_account.json.jbuilder
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
json.id resource.id
|
||||||
|
json.name resource.name
|
||||||
|
json.locale resource.locale
|
||||||
|
json.domain resource.domain
|
||||||
|
json.support_email resource.support_email
|
||||||
|
json.enabled_features resource.enabled_features
|
||||||
|
json.custom_attributes resource.custom_attributes
|
||||||
|
json.limits resource.limits
|
||||||
|
json.status resource.status
|
|
@ -32,12 +32,49 @@ RSpec.describe 'Platform Accounts API', type: :request do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates an account with locale' do
|
it 'creates an account with locale' do
|
||||||
|
InstallationConfig.where(name: 'ACCOUNT_LEVEL_FEATURE_DEFAULTS').first_or_create!(value: [{ 'name' => 'agent_management',
|
||||||
|
'enabled' => true }])
|
||||||
post '/platform/api/v1/accounts', params: { name: 'Test Account', locale: 'es' },
|
post '/platform/api/v1/accounts', params: { name: 'Test Account', locale: 'es' },
|
||||||
headers: { api_access_token: platform_app.access_token.token }, as: :json
|
headers: { api_access_token: platform_app.access_token.token }, as: :json
|
||||||
|
|
||||||
|
expect(response).to have_http_status(:success)
|
||||||
|
|
||||||
|
json_response = JSON.parse(response.body)
|
||||||
|
expect(json_response['name']).to eq('Test Account')
|
||||||
|
expect(json_response['locale']).to eq('es')
|
||||||
|
expect(json_response['enabled_features']).to eq(
|
||||||
|
{
|
||||||
|
'agent_management' => true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates an account with feature flags' do
|
||||||
|
InstallationConfig.where(name: 'ACCOUNT_LEVEL_FEATURE_DEFAULTS').first_or_create!(value: [{ 'name' => 'inbox_management',
|
||||||
|
'enabled' => true }])
|
||||||
|
|
||||||
|
post '/platform/api/v1/accounts', params: { name: 'Test Account', enabled_features: %w[feature_ip_lookup feature_help_center] },
|
||||||
|
headers: { api_access_token: platform_app.access_token.token }, as: :json
|
||||||
|
|
||||||
|
json_response = JSON.parse(response.body)
|
||||||
|
expect(json_response['name']).to include('Test Account')
|
||||||
|
expect(json_response['enabled_features']).to eq(
|
||||||
|
{
|
||||||
|
'inbox_management' => true,
|
||||||
|
'ip_lookup' => true,
|
||||||
|
'help_center' => true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates an account with limits settings' do
|
||||||
|
post '/platform/api/v1/accounts', params: { name: 'Test Account', limits: { agents: 5, inboxes: 10 } },
|
||||||
|
headers: { api_access_token: platform_app.access_token.token }, as: :json
|
||||||
|
|
||||||
expect(response).to have_http_status(:success)
|
expect(response).to have_http_status(:success)
|
||||||
expect(response.body).to include('Test Account')
|
expect(response.body).to include('Test Account')
|
||||||
expect(response.body).to include('es')
|
expect(response.body).to include('5')
|
||||||
|
expect(response.body).to include('10')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -105,11 +142,18 @@ RSpec.describe 'Platform Accounts API', type: :request do
|
||||||
it 'updates an account when its permissible object' do
|
it 'updates an account when its permissible object' do
|
||||||
create(:platform_app_permissible, platform_app: platform_app, permissible: account)
|
create(:platform_app_permissible, platform_app: platform_app, permissible: account)
|
||||||
|
|
||||||
patch "/platform/api/v1/accounts/#{account.id}", params: { name: 'Test Account' },
|
patch "/platform/api/v1/accounts/#{account.id}", params: {
|
||||||
headers: { api_access_token: platform_app.access_token.token }, as: :json
|
name: 'Test Account',
|
||||||
|
enabled_features: %w[feature_ip_lookup feature_help_center],
|
||||||
|
limits: { agents: 5, inboxes: 10 }
|
||||||
|
}, headers: { api_access_token: platform_app.access_token.token }, as: :json
|
||||||
|
|
||||||
expect(response).to have_http_status(:success)
|
expect(response).to have_http_status(:success)
|
||||||
expect(account.reload.name).to eq('Test Account')
|
expect(account.reload.name).to eq('Test Account')
|
||||||
|
expect(account.reload.enabled_features['ip_lookup']).to be(true)
|
||||||
|
expect(account.reload.enabled_features['help_center']).to be(true)
|
||||||
|
expect(account.reload.limits['agents']).to eq(5)
|
||||||
|
expect(account.reload.limits['inboxes']).to eq(10)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue