Update `RemoteDevelopment::Settings` to handle `vscode_extensions_marketplace_settings`
MR: Add extensions gallery support to Remote Dev se... (!149344 - merged)
Description
Based on Create User-Level Extension Marketplace settings (#451875) and blocked by Create `extensions_marketplace_opt_in_status` f... (#455158 - closed).
Let's update RemoteDevelopment::Settings
to support a new setting:
{
vscode_extensions_marketplace_settings: {
enabled: Boolean,
disabled_reason: Symbol # ExtensionsMarketplaceDisabledReason - only present if `enabled` is false
}
}
ExtensionsMarketDisabledReason
enum will have have the following values:
- :no_user
- :no_flag
- :instance_disabled
- :opt_in_unset
- :opt_in_disabled
- :enabled
And relevant RemoteDevelopment::Settings
functions should receive something like:
get_all_settings({ user:, extensions_marketplace_feature_flag_enabled })
Here's a rough draft of what the core logic is:
def self.generate_settings(user:, extensions_marketplace_feature_flag_enabled:)
return { enabled: false, disabled_reason: :no_user } unless user
return { enabled: false, disabled_reason: :no_flag } if extensions_marketplace_feature_flag_enabled.nil?
return { enabled: false, disabled_reason: :instance_disabled } unless extensions_marketplace_feature_flag_enabled
opt_in_status = user.extensions_marketplace_opt_in_status.to_sym
return { enabled: true } if opt_in_status == :enabled
return { enabled: false, disabled_reason: :opt_in_unset } if opt_in_status == :unset
return { enabled: false, disabled_reason: :opt_in_disabled } if opt_in_status == :disabled
raise "Invalid user.extensions_marketplace_opt_in_status: '#{opt_in_status}'"
end
Acceptance Criteria
-
get_all_settings
and relevantRemoteDevelopment::Settings
modules have been updated to encapsulate logic and support returning propervscode_extensions_marketplace_settings
for the specified user and flag
rails console
invocation and output
Example Invocation:
RemoteDevelopment::Settings.get_single_setting(:vscode_extensions_gallery_metadata, {user: User.find_by_username("root"), vscode_extensions_marketplace_feature_flag_enabled: false})
Output:
{:enabled=>false, :disabled_reason=>:instance_disabled}
NOTE: You can easily update the opt-in property of the current user (if you are logged in as root) with http://gdk.test:3000/-/graphql-explorer:
mutation userPreferencesUpdate {
userPreferencesUpdate(
input: {
extensionsMarketplaceOptInStatus: DISABLED
}
)
{
userPreferences {
extensionsMarketplaceOptInStatus
}
errors
}
}
Edited by Paul Slaughter