Skip to content

Commit

Permalink
chore: Update data format for platform API feature management (#5718)
Browse files Browse the repository at this point in the history
Updated JSON data format for Platform API for account creation update API endpoints features flags to accept false values on each feature. 

fixes: #5717
  • Loading branch information
smartdev58 committed Nov 8, 2022
1 parent 4837362 commit b50890d
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 27 deletions.
19 changes: 13 additions & 6 deletions app/controllers/platform/api/v1/accounts_controller.rb
@@ -1,14 +1,17 @@
class Platform::Api::V1::AccountsController < PlatformController
def create
@resource = Account.new(account_params)
update_resource_features
@resource.save!
@platform_app.platform_app_permissibles.find_or_create_by(permissible: @resource)
end

def show; end

def update
@resource.update!(account_params)
@resource.assign_attributes(account_params)
update_resource_features
@resource.save!
end

def destroy
Expand All @@ -23,14 +26,18 @@ def set_resource
end

def account_params
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.except(:features)
end

permitted_params
def update_resource_features
return if permitted_params[:features].blank?

permitted_params[:features].each do |key, value|
value.present? ? @resource.enable_features(key) : @resource.disable_features(key)
end
end

def permitted_params
params.permit(:name, :locale, enabled_features: [], limits: {})
params.permit(:name, :locale, :domain, :support_email, :status, features: {}, limits: {}, custom_attributes: {})
end
end
2 changes: 1 addition & 1 deletion app/models/concerns/featurable.rb
Expand Up @@ -16,7 +16,7 @@ module Featurable
include FlagShihTzu
has_flags FEATURES.merge(column: 'feature_flags').merge(QUERY_MODE)

before_create :enable_default_features
after_initialize :enable_default_features
end

def enable_features(*names)
Expand Down
45 changes: 25 additions & 20 deletions spec/controllers/platform/api/v1/accounts_controller_spec.rb
Expand Up @@ -42,29 +42,28 @@
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
}
)
expect(json_response['enabled_features']['agent_management']).to be(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 },
{ 'name' => 'disable_branding',
'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
post '/platform/api/v1/accounts', params: { name: 'Test Account', features: {
ip_lookup: true,
help_center: true,
disable_branding: false

} }, 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
}
)
expect(json_response['enabled_features']['inbox_management']).to be(true)
expect(json_response['enabled_features']['ip_lookup']).to be(true)
expect(json_response['enabled_features']['help_center']).to be(true)
expect(json_response['enabled_features']['disable_branding']).to be_nil
end

it 'creates an account with limits settings' do
Expand Down Expand Up @@ -141,19 +140,25 @@

it 'updates an account when its permissible object' do
create(:platform_app_permissible, platform_app: platform_app, permissible: account)
account.enable_features!('inbox_management', 'channel_facebook')

patch "/platform/api/v1/accounts/#{account.id}", params: {
name: 'Test Account',
enabled_features: %w[feature_ip_lookup feature_help_center],
features: {
ip_lookup: true,
help_center: true,
channel_facebook: false
},
limits: { agents: 5, inboxes: 10 }
}, headers: { api_access_token: platform_app.access_token.token }, as: :json

expect(response).to have_http_status(:success)
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)
account.reload
expect(account.name).to eq('Test Account')
expect(account.enabled_features.keys).to match_array(%w[inbox_management ip_lookup help_center])
expect(account.enabled_features['channel_facebook']).to be_nil
expect(account.limits['agents']).to eq(5)
expect(account.limits['inboxes']).to eq(10)
end
end
end
Expand Down

0 comments on commit b50890d

Please sign in to comment.