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:
smartdev58 2022-10-20 06:16:36 +02:00 committed by GitHub
parent a3277b45af
commit fa73b5290c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 69 additions and 9 deletions

View file

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

View file

@ -0,0 +1 @@
json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource

View file

@ -0,0 +1 @@
json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource

View file

@ -0,0 +1 @@
json.partial! 'platform/api/v1/models/account', formats: [:json], resource: @resource

View 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

View file

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