diff --git a/qa/qa/page/project/web_ide/edit.rb b/qa/qa/page/project/web_ide/edit.rb index 293fcd1e6767602eac8682a815fe40874ea59d50..975d3c8ea1417eae4e1608b67a0d316f6ace0856 100644 --- a/qa/qa/page/project/web_ide/edit.rb +++ b/qa/qa/page/project/web_ide/edit.rb @@ -109,6 +109,14 @@ class Edit < Page::Base element :file_to_commit_content end + # Used for stablility, due to feature_caching of vscode_web_ide + def wait_until_ide_loads + Support::Waiter.wait_until(sleep_interval: 2, max_duration: 60, reload_page: page, + retry_on_exception: true) do + has_element?(:commit_mode_tab) + end + end + def has_file?(file_name) within_element(:file_list_container) do has_element?(:file_name_content, file_name: file_name) diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb index 8ea65e17e130978d746eb6cab26b6d62fbf44df9..93f804f1e39cd9356a21141862d7b27355f0c461 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'Web IDE file templates' do include Runtime::Fixtures @@ -11,6 +11,11 @@ module QA project.description = 'Add file templates via the Web IDE' project.initialize_with_readme = true end + Runtime::Feature.disable(:vscode_web_ide, project: @project) + end + + after(:all) do + Runtime::Feature.enable(:vscode_web_ide, project: @project) end templates = [ @@ -54,6 +59,7 @@ module QA Page::Project::Show.perform(&:open_web_ide!) Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.create_new_file_from_template template[:file_name], template[:name] expect(ide.has_file?(template[:file_name])).to be_truthy diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb index 1da9ed652fee35be0141a8acf5b67514127be19b..a001dee891ad87e3b472fe16461ddaa7fb100562 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_new_directory_in_web_ide_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'Add a directory in Web IDE' do let(:project) do Resource::Project.fabricate_via_api! do |project| @@ -11,11 +11,15 @@ module QA end before do + Runtime::Feature.disable(:vscode_web_ide, project: project) Flow::Login.sign_in - project.visit! end + after do + Runtime::Feature.enable(:vscode_web_ide, project: project) + end + context 'when a directory with the same name already exists' do let(:directory_name) { 'first_directory' } @@ -38,6 +42,11 @@ module QA it 'throws an error', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347733' do Page::Project::WebIDE::Edit.perform do |ide| + # Support::Waiter.wait_until(sleep_interval: 2, max_duration: 60, reload_page: page, + # retry_on_exception: true) do + # expect(ide).to have_element(:commit_mode_tab) + # end + ide.wait_until_ide_loads ide.add_directory(directory_name) end @@ -54,6 +63,7 @@ module QA it 'shows in the tree view but cannot be committed', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347732' do Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.add_directory(directory_name) expect(ide).to have_file(directory_name) diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb index 1dfda1608f4b9a9c3a7c3f64557bbb16c58ed328..cb0da601a88640aa2fa0d3676ac48d5b9a5dcf53 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'First file using Web IDE' do let(:project) do Resource::Project.fabricate_via_api! do |project| @@ -13,14 +13,20 @@ module QA let(:file_name) { 'the very first file.txt' } before do + Runtime::Feature.disable(:vscode_web_ide, project: project) Flow::Login.sign_in end + after do + Runtime::Feature.enable(:vscode_web_ide, project: project) + end + it "creates the first file in an empty project via Web IDE", testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347803' do project.visit! Page::Project::Show.perform(&:create_first_new_file!) Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.create_first_file(file_name) ide.commit_changes end diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/link_to_line_in_web_ide_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/link_to_line_in_web_ide_spec.rb index 56cf2a08bd9c8aa5695ea835ffd8b4b28e26154d..2007fe4a667f68cc540df46cdff1d21d091fdbf6 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/link_to_line_in_web_ide_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/link_to_line_in_web_ide_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'Link to line in Web IDE' do let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) } let(:project) do @@ -11,10 +11,12 @@ module QA end before do + Runtime::Feature.disable(:vscode_web_ide, project: project) Flow::Login.sign_in end after do + Runtime::Feature.enable(:vscode_web_ide, project: project) project.remove_via_api! end @@ -25,6 +27,7 @@ module QA Page::Project::Show.perform(&:open_web_ide_via_shortcut) Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.select_file('app.js') @link = ide.link_line('26') end diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb index 820b47a31759abd9340eac38f96652f7828d4a59..dc9f68c5c734282a4ca656b2110b4da9bcb7ca6e 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/open_fork_in_web_ide_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'Open a fork in Web IDE', skip: { issue: "https://gitlab.com/gitlab-org/gitlab/-/issues/351696", @@ -14,6 +14,14 @@ module QA end end + before do + Runtime::Feature.disable(:vscode_web_ide, project: parent_project) + end + + after do + Runtime::Feature.enable(:vscode_web_ide, project: parent_project) + end + context 'when a user does not have permissions to commit to the project' do let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_2, Runtime::Env.gitlab_qa_password_2) } @@ -57,6 +65,7 @@ module QA def submit_merge_request_upstream Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads expect(ide).to have_project_path("#{user.username}/#{parent_project.name}") ide.add_file('new file', 'some random text') diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/open_web_ide_from_diff_tab_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/open_web_ide_from_diff_tab_spec.rb index 685cd2d4ad6336cd61ef347e2c3e9263bc6a9064..039d25477bf92316c4d0123f312aa47e3ca9ac00 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/open_web_ide_from_diff_tab_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/open_web_ide_from_diff_tab_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'Open Web IDE from Diff Tab' do files = [ { @@ -44,11 +44,15 @@ module QA end before do + Runtime::Feature.disable(:vscode_web_ide, project: project) Flow::Login.sign_in - merge_request.visit! end + after do + Runtime::Feature.enable(:vscode_web_ide, project: project) + end + it 'opens and edits a multi-file merge request in Web IDE from Diff Tab', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347724' do Page::MergeRequest::Show.perform do |show| show.click_diffs_tab @@ -56,6 +60,7 @@ module QA end Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads files.each do |files| expect(ide).to have_file(files[:file_path]) expect(ide).to have_file_content(files[:file_path], files[:content]) diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb index 69557fb359a048a03bcd24428f62cddd1efc5467..fe0060e9bbc3590798f1b4cd37cfd1832591f60d 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb @@ -1,31 +1,44 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'Review a merge request in Web IDE' do let(:new_file) { 'awesome_new_file.txt' } let(:original_text) { 'Text' } let(:review_text) { 'Reviewed ' } + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'review-merge-request-spec-project' + project.initialize_with_readme = true + end + end + let(:merge_request) do Resource::MergeRequest.fabricate_via_api! do |mr| mr.file_name = new_file mr.file_content = original_text + mr.project = project end end before do + Runtime::Feature.disable(:vscode_web_ide, project: project) Flow::Login.sign_in - merge_request.visit! end + after do + Runtime::Feature.enable(:vscode_web_ide, project: project) + end + it 'opens and edits a merge request in Web IDE', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347786' do Page::MergeRequest::Show.perform do |show| show.click_open_in_web_ide end Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.has_file?(new_file) ide.add_to_modified_content(review_text) ide.commit_changes diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/server_hooks_custom_error_message_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/server_hooks_custom_error_message_spec.rb index 0972e4f3e3d85b935c641903cbf5934ebb7dc2eb..3cd14ecd7991c35a512fa9a78b322e7d954ee865 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/server_hooks_custom_error_message_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/server_hooks_custom_error_message_spec.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', :skip_live_env, except: { job: 'review-qa-*' }, product_group: :editor do + RSpec.describe 'Create', :skip_live_env, except: { job: 'review-qa-*' }, + feature_flag: { name: 'vscode_web_ide', scope: :project }, + product_group: :editor do describe 'Git Server Hooks' do let(:file_path) { File.absolute_path(File.join('qa', 'fixtures', 'web_ide', 'README.md')) } @@ -14,15 +16,21 @@ module QA end before do + Runtime::Feature.disable(:vscode_web_ide, project: project) Flow::Login.sign_in project.visit! end + after do + Runtime::Feature.enable(:vscode_web_ide, project: project) + end + context 'Custom error messages' do it 'renders preconfigured error message when user hook failed on commit in WebIDE', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/364751' do Page::Project::Show.perform(&:open_web_ide_via_shortcut) Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.upload_file(file_path) ide.commit_changes(wait_for_success: false) expect(ide).to have_text('Custom error message rejecting prereceive hook for projects with GL_PROJECT_PATH') diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb index c0f65416a1cee28aded23a0cf2f40d1c29178bf6..c6e283f67e0751c3907f0c0b220616babd0aba68 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/upload_new_file_in_web_ide_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module QA - RSpec.describe 'Create', product_group: :editor do + RSpec.describe 'Create', feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor do describe 'Upload a file in Web IDE' do let(:file_path) { File.absolute_path(File.join('qa', 'fixtures', 'web_ide', file_name)) } @@ -13,17 +13,23 @@ module QA end before do + Runtime::Feature.disable(:vscode_web_ide, project: project) Flow::Login.sign_in project.visit! Page::Project::Show.perform(&:open_web_ide!) end + after do + Runtime::Feature.enable(:vscode_web_ide, project: project) + end + context 'when a file with the same name already exists' do let(:file_name) { 'README.md' } it 'throws an error', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347850' do Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.upload_file(file_path) end @@ -36,6 +42,7 @@ module QA it 'shows the Edit tab with the text', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/347852' do Page::Project::WebIDE::Edit.perform do |ide| + ide.wait_until_ide_loads ide.upload_file(file_path) expect(ide).to have_file(file_name) diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb index f90676ee15a9be9830b24e83889097fb7c2e9799..695b295bd867546d632b7409e484174ba3636b52 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb @@ -10,10 +10,12 @@ module QA issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338179', type: :bug }, + feature_flag: { name: 'vscode_web_ide', scope: :project }, product_group: :editor ) do describe 'Web IDE web terminal' do before do + Runtime::Feature.disable(:vscode_web_ide, project: project) project = Resource::Project.fabricate_via_api! do |project| project.name = 'web-terminal-project' end @@ -56,6 +58,7 @@ module QA end after do + Runtime::Feature.enable(:vscode_web_ide, project: project) @runner.remove_via_api! if @runner end @@ -76,6 +79,7 @@ module QA # There are also FE specs # * spec/frontend/ide/components/terminal/terminal_controls_spec.js Page::Project::WebIDE::Edit.perform do |edit| + edit.wait_until_ide_loads edit.start_web_terminal expect(edit).to have_no_alert