diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb index a50e706bcb4aa236fed3c400a775512c12bf1e79..d7df03eac5de5fd3ed6354c18fdd509afaabd785 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_first_file_in_web_ide_spec.rb @@ -3,15 +3,11 @@ module QA RSpec.describe 'Create', :skip_live_env, product_group: :remote_development do describe 'Add first file in Web IDE' do + include_context 'Web IDE test prep' let(:project) { create(:project, :with_readme, name: 'webide-create-file-project') } before do - Flow::Login.sign_in - project.visit! - Page::Project::Show.perform(&:open_web_ide!) - Page::Project::WebIDE::VSCode.perform do |ide| - ide.wait_for_ide_to_load('README.md') - end + load_web_ide end context 'when a file with the same name already exists' do 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 864105ce76ba2cab97cc86795bac21ca357a8599..ee84b9db235e8fdb6023b6d9daa8949acad0aab6 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 @@ -3,13 +3,9 @@ module QA RSpec.describe 'Create', product_group: :remote_development do describe 'Add a directory in Web IDE' do + include_context 'Web IDE test prep' let(:project) { create(:project, :with_readme, name: 'webide-add-directory-project') } - before do - Flow::Login.sign_in - project.visit! - end - context 'when a directory with the same name already exists' do let(:directory_name) { 'first_directory' } diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb index 84699f696b41ee8774e0fd7c1faee94a2764a9a4..c653776a3d22765b5afc25b09da0f960ff1ad395 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/closing_web_ide_with_unsaved_changes_spec.rb @@ -3,16 +3,12 @@ module QA RSpec.describe 'Create', product_group: :remote_development do describe 'Closing Web IDE' do + include_context "Web IDE test prep" let(:file_name) { 'file.txt' } let(:project) { create(:project, :with_readme, name: 'webide-close-with-unsaved-changes') } before do - Flow::Login.sign_in - project.visit! - Page::Project::Show.perform(&:open_web_ide!) - Page::Project::WebIDE::VSCode.perform do |ide| - ide.wait_for_ide_to_load('README.md') - end + load_web_ide end it 'shows an alert when there are unsaved changes', :blocking, 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 52ba1e19a56e1fc8c66c72007883f2574cbbc1a6..f6d4e36548c48ac10910b196f8b2a308535ff42e 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 @@ -3,16 +3,12 @@ module QA RSpec.describe 'Create', product_group: :remote_development do describe 'Upload a file in Web IDE' do + include_context "Web IDE test prep" let(:file_path) { File.absolute_path(File.join('qa', 'fixtures', 'web_ide', file_name)) } let(:project) { create(:project, :with_readme, name: 'webide-upload-file-project') } before do - Flow::Login.sign_in - project.visit! - Page::Project::Show.perform(&:open_web_ide!) - Page::Project::WebIDE::VSCode.perform do |ide| - ide.wait_for_ide_to_load('README.md') - end + load_web_ide end context 'when a file with the same name already exists' do diff --git a/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb b/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb index 90985c625ed42d60e9b59d48b6bbe0bc552ee35b..6d74ae9eaca3202ad9c3dbb1298ae2c6c8f1ae51 100644 --- a/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb +++ b/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/code_suggestions_in_web_ide_spec.rb @@ -5,22 +5,16 @@ module QA # See https://docs.gitlab.com/ee/development/code_suggestions/#code-suggestions-development-setup RSpec.describe 'Create', product_group: :remote_development do describe 'Code Suggestions in Web IDE' do + include_context "Web IDE test prep" let(:project) { create(:project, :with_readme, name: 'webide-code-suggestions-project') } let(:file_name) { 'new_file.rb' } let(:prompt_data) { 'def reverse_string' } before do - Flow::Login.sign_in - create(:commit, project: project, actions: [ { action: 'create', file_path: file_name, content: '# test' } ]) - - project.visit! - Page::Project::Show.perform(&:open_web_ide!) - Page::Project::WebIDE::VSCode.perform do |ide| - ide.wait_for_ide_to_load(file_name) - end + load_web_ide(file_name) end shared_examples 'a code generation suggestion' do |testcase| diff --git a/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/duo_chat_in_web_ide_spec.rb b/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/duo_chat_in_web_ide_spec.rb index 5bf4733c074b0d68a17db1b08ecd1ce853083f05..7af8c560ebe58b4e9355ec082cd68a305bc1a25e 100644 --- a/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/duo_chat_in_web_ide_spec.rb +++ b/qa/qa/specs/features/ee/browser_ui/3_create/web_ide/duo_chat_in_web_ide_spec.rb @@ -4,6 +4,7 @@ module QA # https://docs.gitlab.com/ee/development/ai_features/duo_chat.html RSpec.describe 'Create', product_group: :remote_development do describe 'Duo Chat in Web IDE' do + include_context 'Web IDE test prep' shared_examples 'Duo Chat' do |testcase| it 'gets a response back from Duo Chat', testcase: testcase do Page::Project::WebIDE::VSCode.perform do |ide| @@ -25,12 +26,7 @@ module QA let(:project) { create(:project, :with_readme, name: 'webide-duo-chat-project') } before do - Flow::Login.sign_in - project.visit! - Page::Project::Show.perform(&:open_web_ide!) - Page::Project::WebIDE::VSCode.perform do |ide| - ide.wait_for_ide_to_load('README.md') - end + load_web_ide end context 'on GitLab.com', :external_ai_provider, diff --git a/qa/qa/specs/features/shared_contexts/web_ide_shared_context.rb b/qa/qa/specs/features/shared_contexts/web_ide_shared_context.rb new file mode 100644 index 0000000000000000000000000000000000000000..3a21f49670af33ba3487e9ad9e59fb59aac9b1f4 --- /dev/null +++ b/qa/qa/specs/features/shared_contexts/web_ide_shared_context.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module QA + include Support::API + + RSpec.shared_context 'Web IDE test prep' do + before do + Flow::Login.sign_in + project.visit! + end + + after(:context) do + clear_settings_sync_data + end + + def load_web_ide(file_name = 'README.md') + Page::Project::Show.perform(&:open_web_ide!) + Page::Project::WebIDE::VSCode.perform do |ide| + ide.wait_for_ide_to_load(file_name) + end + end + + private + + 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. + # https://gitlab.com/gitlab-org/gitlab-web-ide/-/issues/389 + token = Resource::PersonalAccessToken.fabricate!.token + url = "#{Runtime::Scenario.gitlab_address}/api/v4/vscode/settings_sync/v1/collection" + Support::API.delete(url, { + headers: { Authorization: "Bearer #{token}" } + }) + end + end +end