Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot
2025-01-11 03:35:32 +00:00
parent 64e27d8cbe
commit 745bcaf8be
12 changed files with 257 additions and 2961 deletions

View File

@ -85,6 +85,11 @@ export default {
},
actionPrimary: {
text: s__('PreferencesIntegrations|I understand'),
attributes: {
variant: 'confirm',
category: 'primary',
'data-testid': 'confirm-marketplace-acknowledgement',
},
},
TITLE: s__('PreferencesIntegrations|Third-Party Extensions Acknowledgement'),
WARNING_PARAGRAPH_1,

View File

@ -35,9 +35,11 @@ namespace :tw do
CodeOwnerRule.new('Container Registry', '@lyspin'),
CodeOwnerRule.new('Contributor Experience', '@eread'),
CodeOwnerRule.new('Custom Models', '@jglassman1'),
# CodeOwnerRule.new('Database', ''),
# CodeOwnerRule.new('Database Frameworks', ''),
# CodeOwnerRule.new('Database Operations', ''),
# CodeOwnerRule.new('DataOps', ''),
# CodeOwnerRule.new('Delivery', ''),
# CodeOwnerRule.new('Durability', ''),
CodeOwnerRule.new('Distribution', '@axil'),
CodeOwnerRule.new('Distribution (Charts)', '@axil'),
CodeOwnerRule.new('Distribution (Omnibus)', '@eread'),

View File

@ -65,7 +65,7 @@
"@gitlab/ui": "106.2.0",
"@gitlab/vue-router-vue3": "npm:vue-router@4.1.6",
"@gitlab/vuex-vue3": "npm:vuex@4.0.0",
"@gitlab/web-ide": "^0.0.1-dev-20250109203134",
"@gitlab/web-ide": "^0.0.1-dev-20250109231656",
"@mattiasbuelens/web-streams-adapter": "^0.1.0",
"@rails/actioncable": "7.0.807",
"@rails/ujs": "7.0.807",

File diff suppressed because one or more lines are too long

View File

@ -456,6 +456,14 @@ module QA
end
class << self
def skip_selectors_check!
@check_selectors = false
end
def check_selectors?
@check_selectors.nil? ? true : @check_selectors
end
def path
raise NotImplementedError
end
@ -465,6 +473,7 @@ module QA
end
def errors
return [] unless check_selectors?
return ["Page class does not have views / elements defined!"] if views.empty?
views.flat_map(&:errors)

View File

@ -27,6 +27,7 @@ module QA
element 'user-avatar-content', required: !Runtime::Env.phone_layout?
element 'sign-out-link'
element 'edit-profile-link'
element 'preferences-item'
end
view 'app/assets/javascripts/super_sidebar/components/user_menu_profile_item.vue' do
@ -141,6 +142,12 @@ module QA
end
end
def click_user_preferences_link
within_user_menu do
click_element('preferences-item')
end
end
def has_personal_area?(wait: Capybara.default_max_wait_time)
has_element?('user-avatar-content', wait: wait)
end

View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
module QA
module Page
module Profile
module Preferences
class Show < Page::Base
view 'app/assets/javascripts/profile/preferences/components/extensions_marketplace_warning.vue' do
element 'confirm-marketplace-acknowledgement'
end
def enable_extensions_marketplace
check_element('#user_extensions_marketplace_enabled', true)
click_element('confirm-marketplace-acknowledgement')
end
def save_preferences
click_element("button[type='submit']", text: 'Save changes')
end
end
end
end
end
end

View File

@ -0,0 +1,87 @@
# frozen_string_literal: true
module QA
module Page
module Project
module WebIDE
class SettingsSync < Page::Base
attr_reader :setting_type_to_ui_metadata_map
# Unable to use `data-testids` in Settings sync feature as it
# falls under the VSCode WebIDE, which is built off an iFrame application.
skip_selectors_check!
def initialize
@setting_type_to_ui_metadata_map = {
settings: {
label: 'Settings',
file_name: 'settings.json'
},
extensions: {
label: 'Extensions',
file_name: 'extensions.json'
},
globalState: {
label: 'UI State',
file_name: 'globalState.json'
}
}.freeze
super
end
def enabled?
VSCode.perform do |ide|
ide.within_vscode_editor do
ide.click_menu_item('Accounts')
has_text?('Settings Sync is On')
end
end
end
def go_to_synced_data_view
VSCode.perform do |ide|
ide.search_command_palette('Settings Sync: Show Synced Data')
end
end
def open_remote_synced_data(setting_type)
ui_metadata = get_ui_metadata(setting_type)
return unless ui_metadata
remote_sync_activity_selector = "div[aria-label='Sync Activity (Remote)']"
list_row_selector = '.monaco-list-row'
go_to_synced_data_view unless has_element?(remote_sync_activity_selector)
VSCode.perform do |ide|
ide.within_vscode_editor do
within_element(remote_sync_activity_selector) do
# click on row to expand the list
click_element(list_row_selector, text: ui_metadata[:label], visible: true, wait: 10)
click_element(list_row_selector, text: ui_metadata[:file_name], visible: true, wait: 10)
end
end
end
end
def has_opened_synced_data_item?(setting_type)
ui_metadata = get_ui_metadata(setting_type)
return unless ui_metadata
VSCode.perform do |ide|
ide.has_opened_file?(ui_metadata[:file_name])
end
end
private
def get_ui_metadata(setting_type)
setting_type_to_ui_metadata_map.fetch(setting_type.to_sym, nil)
end
end
end
end
end
end

View File

@ -56,6 +56,22 @@ module QA
find_element('input[type="file"]', visible: false).send_keys(file)
end
def search_command_palette(text)
mod = page.driver.browser.capabilities.platform_name.include?("mac") ? :command : :control
send_keys([mod, :shift, 'p'])
within_vscode_editor do
enter_text_for_input(text)
end
end
def has_opened_file?(file_name)
within_vscode_editor do
within_element('.monaco-scrollable-element > .tabs-container') do
has_element?("div[data-resource-name='#{file_name}'][aria-selected='true']")
end
end
end
def has_commit_pending_tab?(wait: Capybara.default_max_wait_time)
has_element?('.scm-viewlet-label', wait: wait)
end

View File

@ -0,0 +1,87 @@
# frozen_string_literal: true
module QA
RSpec.describe 'Create' do
describe 'Settings Sync in Web IDE', product_group: :remote_development do
include_context 'Web IDE test prep'
let(:project) { create(:project, :with_readme, name: 'webide-settings-sync-project') }
let(:settings_sync_data) do
[
{ setting_type: "settings", content: { settings: '{ "test": true }' } },
{ setting_type: "extensions", content: [{ identifier: "test-extension", version: "1.0.0" }] },
{ setting_type: "globalState", content: [{ storage: { "test-storage": true } }] }
]
end
before do
load_web_ide(with_extensions_marketplace: true)
settings_context_hash = get_settings_context_hash
settings_sync_data.each do |data|
populate_settings_sync(setting_type: data[:setting_type], content: data[:content],
settings_context_hash: settings_context_hash)
end
populate_settings_sync(
setting_type: "extensions",
content: [{ identifier: "bad-test-extension", version: "1.0.0" }],
settings_context_hash: '1234'
)
end
it 'is enabled by default', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/508735' do
Page::Project::WebIDE::SettingsSync.perform do |settings_sync|
expect(settings_sync.enabled?).to be(true)
end
end
it 'loads remote synced data', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/508736' do
Page::Project::WebIDE::SettingsSync.perform do |settings_sync|
settings_sync_data.each do |data|
setting_type = data[:setting_type]
settings_sync.open_remote_synced_data(setting_type)
expect(settings_sync.has_opened_synced_data_item?(setting_type)).to be(true)
end
end
end
it 'loads correct extensions settings based on settings context hash',
testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/508737' do
Page::Project::WebIDE::SettingsSync.perform do |settings_sync|
settings_sync.open_remote_synced_data('extensions')
expect(settings_sync.has_opened_synced_data_item?('extensions')).to be(true)
Page::Project::WebIDE::VSCode.perform do |ide|
ide.within_vscode_editor do
expect(has_text?('"identifier": "test-extension"')).to be(true)
expect(has_text?('"identifier": "bad-test-extension"')).to be(false)
end
end
end
end
end
private
def get_settings_context_hash
Page::Project::WebIDE::VSCode.perform do |ide|
ide.within_vscode_editor do
config_element = find('meta#gl-config-json', visible: false)
config = JSON.parse(config_element[:'data-settings'])
config['settingsContextHash']
end
end
end
def populate_settings_sync(setting_type:, content:, settings_context_hash: nil)
settings_data = {
version: 2,
machineId: "ad91474f-10ea-4479-8076-8367e5e4bf68",
content: content.to_json
}
client = Runtime::User::Store.default_api_client
url = Runtime::API::Request.new(client,
"vscode/settings_sync/#{settings_context_hash}/v1/resource/#{setting_type}").url
Support::API.post(url, settings_data)
end
end
end

View File

@ -15,7 +15,9 @@ module QA
clear_settings_sync_data
end
def load_web_ide(file_name = 'README.md')
def load_web_ide(file_name: 'README.md', with_extensions_marketplace: false)
enable_extensions_marketplace if with_extensions_marketplace
Page::Project::Show.perform(&:open_web_ide!)
Page::Project::WebIDE::VSCode.perform do |ide|
ide.wait_for_ide_to_load(file_name)
@ -24,6 +26,16 @@ module QA
private
def enable_extensions_marketplace
Page::Main::Menu.perform(&:click_user_preferences_link)
Page::Profile::Preferences::Show.perform do |preferences|
preferences.enable_extensions_marketplace
preferences.save_preferences
end
project.visit!
end
def clear_settings_sync_data
# why: since the same user is used to run QA tests, the Web IDE settings can grow significantly.
# For example: The Web IDE keeps track of recently opened files with no upper limit set.

View File

@ -1410,6 +1410,7 @@
integrity sha512-DoMUIN3DqjEn7wvcxBg/b7Ite5fTdF5EmuOZoBRo2j0UBGweDXmNBi+9HrTZs4cBU660dOxcf1hATFcG3npbPg==
"@gitlab/noop@^1.0.0", jackspeak@^2.3.5, "jackspeak@npm:@gitlab/noop@1.0.0":
name jackspeak
version "1.0.0"
resolved "https://registry.yarnpkg.com/@gitlab/noop/-/noop-1.0.0.tgz#b1ecb8ae6b2abf9b2e28927e4fbb05b7a1b2704b"
integrity sha512-nOltttik5o2BjBo8LnyeTFzHoLpMY/XcCVOC+lm9ZwU+ivEam8wafacMF0KTbRn1KVrIoHYdo70QnqS+vJiOVw==
@ -1459,10 +1460,10 @@
resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.0.0.tgz#ac877aa76a9c45368c979471e461b520d38e6cf5"
integrity sha512-56VPujlHscP5q/e7Jlpqc40sja4vOhC4uJD1llBCWolVI8ND4+VzisDVkUMl+z5y0MpIImW6HjhNc+ZvuizgOw==
"@gitlab/web-ide@^0.0.1-dev-20250109203134":
version "0.0.1-dev-20250109203134"
resolved "https://registry.yarnpkg.com/@gitlab/web-ide/-/web-ide-0.0.1-dev-20250109203134.tgz#277e7f9d259a2c0b42d584edb0852c5848e9dd36"
integrity sha512-kJHDMs/qgxq/1ooJj/fyUOH4yMRMVEHNgP/vA1QVq1gaxuaqednNPKvneRo8FRwatnA87FVdz4/58bl68LPuwQ==
"@gitlab/web-ide@^0.0.1-dev-20250109231656":
version "0.0.1-dev-20250109231656"
resolved "https://registry.yarnpkg.com/@gitlab/web-ide/-/web-ide-0.0.1-dev-20250109231656.tgz#dd8afb853ae04dae09e53b37710869975092bea7"
integrity sha512-AO6uo8fKkmlavWfqHgYNgzMz6U+ppl1uK23uiWEy3aU16xL1/MIGda4LVxzmWLVnxz3BGg0xdqA/Ipsd4VcxVw==
"@graphiql/react@^0.26.2":
version "0.26.2"