diff options
Diffstat (limited to 'qa/qa/specs/features/browser_ui/3_create')
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/jira/jira_basic_integration_spec.rb | 105 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb | 10 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb | 101 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb (renamed from qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb) | 4 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb | 30 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb | 39 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb | 42 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_creation_spec.rb | 93 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_manipulation_spec.rb | 51 |
9 files changed, 429 insertions, 46 deletions
diff --git a/qa/qa/specs/features/browser_ui/3_create/jira/jira_basic_integration_spec.rb b/qa/qa/specs/features/browser_ui/3_create/jira/jira_basic_integration_spec.rb new file mode 100644 index 00000000000..05a932fd53e --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/jira/jira_basic_integration_spec.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +module QA + context 'Create' do + include Support::Api + + describe 'Jira integration', :jira, :orchestrated, :requires_admin do + let(:jira_project_key) { 'JITP' } + + before(:all) do + page.visit Vendor::Jira::JiraAPI.perform(&:base_url) + + QA::Support::Retrier.retry_until(sleep_interval: 3, reload_page: page, max_attempts: 20, raise_on_failure: true) do + page.has_text? 'Welcome to Jira' + end + + @project = Resource::Project.fabricate_via_api! do |project| + project.name = "project_with_jira_integration" + end + + # Retry is required because allow_local_requests_from_web_hooks_and_services + # takes some time to get enabled. + # Bug issue: https://gitlab.com/gitlab-org/gitlab/-/issues/217010 + QA::Support::Retrier.retry_on_exception(max_attempts: 5, sleep_interval: 3) do + Runtime::ApplicationSettings.set_application_settings(allow_local_requests_from_web_hooks_and_services: true) + + page.visit Runtime::Scenario.gitlab_address + Flow::Login.sign_in_unless_signed_in + + @project.visit! + + Page::Project::Menu.perform(&:go_to_integrations_settings) + QA::Page::Project::Settings::Integrations.perform(&:click_jira_link) + + QA::Page::Project::Settings::Services::Jira.perform do |jira| + jira.setup_service_with(url: Vendor::Jira::JiraAPI.perform(&:base_url)) + end + + expect(page).not_to have_text("Requests to the local network are not allowed") + end + end + + it 'closes an issue via pushing a commit' do + issue_key = Vendor::Jira::JiraAPI.perform do |jira_api| + jira_api.create_issue(jira_project_key) + end + + push_commit("Closes #{issue_key}") + + expect_issue_done(issue_key) + end + + it 'closes an issue via a merge request' do + issue_key = Vendor::Jira::JiraAPI.perform do |jira_api| + jira_api.create_issue(jira_project_key) + end + + page.visit Runtime::Scenario.gitlab_address + Flow::Login.sign_in_unless_signed_in + + merge_request = create_mr_with_description("Closes #{issue_key}") + + merge_request.visit! + + Page::MergeRequest::Show.perform(&:merge!) + + expect_issue_done(issue_key) + end + + def create_mr_with_description(description) + Resource::MergeRequest.fabricate! do |merge_request| + merge_request.project = @project + merge_request.target_new_branch = !master_branch_exists? + merge_request.description = description + end + end + + def push_commit(commit_message) + Resource::Repository::ProjectPush.fabricate! do |push| + push.branch_name = 'master' + push.commit_message = commit_message + push.file_content = commit_message + push.project = @project + push.new_branch = !master_branch_exists? + end + end + + def expect_issue_done(issue_key) + expect do + Support::Waiter.wait_until(raise_on_failure: true) do + jira_issue = Vendor::Jira::JiraAPI.perform do |jira_api| + jira_api.fetch_issue(issue_key) + end + + jira_issue[:fields][:status][:name] == 'Done' + end + end.not_to raise_error + end + + def master_branch_exists? + @project.repository_branches.map { |item| item[:name] }.include?("master") + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb index 9b504ad76b4..21ae10774c9 100644 --- a/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb @@ -3,6 +3,12 @@ module QA context 'Create', :requires_admin do describe 'push after setting the file size limit via admin/application_settings' do + # Note: The file size limits in this test should be greater than the limits in + # ee/browser_ui/3_create/repository/push_rules_spec to prevent that test from + # triggering the limit set in this test (which can happen on Staging where the + # tests are run in parallel). + # See: https://gitlab.com/gitlab-org/gitlab/-/issues/218620#note_361634705 + include Support::Api before(:context) do @@ -31,7 +37,7 @@ module QA end it 'push fails when the file size is above the limit' do - set_file_size_limit(1) + set_file_size_limit(2) retry_on_fail do expect { push_new_file('oversize_file_2.bin', wait_for_push: false) } @@ -52,7 +58,7 @@ module QA output = Resource::Repository::Push.fabricate! do |p| p.repository_http_uri = @project.repository_http_location.uri p.file_name = file_name - p.file_content = SecureRandom.random_bytes(2000000) + p.file_content = SecureRandom.random_bytes(3000000) p.commit_message = commit_message p.new_branch = false end diff --git a/qa/qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb b/qa/qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb new file mode 100644 index 00000000000..a3011550db8 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/snippet/clone_push_pull_project_snippet_spec.rb @@ -0,0 +1,101 @@ +# frozen_string_literal: true + +module QA + context 'Create' do + describe 'Version control for project snippets' do + let(:new_file) { 'new_snippet_file' } + let(:changed_content) { 'changes' } + let(:commit_message) { 'Changes to snippets' } + let(:added_content) { 'updated ' } + let(:branch_name) { 'master' } + + let(:snippet) do + Resource::ProjectSnippet.fabricate! do |snippet| + snippet.file_name = new_file + end + end + + let(:ssh_key) do + Resource::SSHKey.fabricate_via_api! do |resource| + resource.title = "my key title #{Time.now.to_f}" + end + end + + let(:repository_uri_http) do + snippet + Page::Dashboard::Snippet::Show.perform(&:get_repository_uri_http) + end + + let(:repository_uri_ssh) do + ssh_key + snippet + Page::Dashboard::Snippet::Show.perform(&:get_repository_uri_ssh) + end + + before do + Flow::Login.sign_in + end + + it 'clones, pushes, and pulls a project snippet over HTTP, edits via UI' do + Resource::Repository::Push.fabricate! do |push| + push.repository_http_uri = repository_uri_http + push.file_name = new_file + push.file_content = changed_content + push.commit_message = commit_message + push.new_branch = false + end + + page.refresh + verify_changes_in_ui + + Page::Dashboard::Snippet::Show.perform(&:click_edit_button) + + Page::Dashboard::Snippet::Edit.perform do |snippet| + snippet.add_to_file_content(added_content) + snippet.save_changes + end + + Git::Repository.perform do |repository| + repository.init_repository + repository.pull(repository_uri_http, branch_name) + + expect(repository.commits.size).to eq 3 + expect(repository.commits.first).to include 'Update snippet' + expect(repository.file_content(new_file)).to include "#{added_content}#{changed_content}" + end + end + + it 'clones, pushes, and pulls a project snippet over SSH, deletes via UI' do + Resource::Repository::Push.fabricate! do |push| + push.repository_ssh_uri = repository_uri_ssh + push.ssh_key = ssh_key + push.file_name = new_file + push.file_content = changed_content + push.commit_message = commit_message + push.new_branch = false + end + + page.refresh + verify_changes_in_ui + Page::Dashboard::Snippet::Show.perform(&:click_delete_button) + + # attempt to pull a deleted snippet, get a missing repository error + Git::Repository.perform do |repository| + repository.uri = repository_uri_ssh + repository.use_ssh_key(ssh_key) + repository.init_repository + + expect { repository.pull(repository_uri_ssh, branch_name) } + .to raise_error(QA::Git::Repository::RepositoryCommandError, /[fatal: Could not read from remote repository.]+/) + end + end + + def verify_changes_in_ui + Page::Dashboard::Snippet::Show.perform do |snippet| + expect(snippet).to have_file_name(new_file) + expect(snippet).to have_file_content(changed_content) + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb b/qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb index dfcbf4b44c8..451a7847f8b 100644 --- a/qa/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/snippet/create_personal_snippet_spec.rb @@ -2,8 +2,8 @@ module QA context 'Create', :smoke do - describe 'Snippet creation' do - it 'User creates a snippet' do + describe 'Personal snippet creation' do + it 'User creates a personal snippet' do Flow::Login.sign_in Page::Main::Menu.perform(&:go_to_snippets) diff --git a/qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb b/qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb new file mode 100644 index 00000000000..8fc4427bda7 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/snippet/create_project_snippet_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module QA + context 'Create' do # to be converted to a smoke test once proved to be stable + describe 'Project snippet creation' do + it 'User creates a project snippet' do + Flow::Login.sign_in + + Resource::ProjectSnippet.fabricate_via_browser_ui! do |snippet| + snippet.title = 'Project snippet' + snippet.description = ' ' + snippet.visibility = 'Private' + snippet.file_name = 'markdown_file.md' + snippet.file_content = "### Snippet heading\n\n[Gitlab link](https://gitlab.com/)" + end + + Page::Dashboard::Snippet::Show.perform do |snippet| + expect(snippet).to have_snippet_title('Project snippet') + expect(snippet).to have_no_snippet_description + expect(snippet).to have_visibility_type(/private/i) + expect(snippet).to have_file_name('markdown_file.md') + expect(snippet).to have_file_content('Snippet heading') + expect(snippet).to have_file_content('Gitlab link') + expect(snippet).not_to have_file_content('###') + expect(snippet).not_to have_file_content('https://gitlab.com/') + end + end + end + end +end 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 new file mode 100644 index 00000000000..3bf6e156967 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/create_first_file_in_web_ide_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module QA + context 'Create' do + describe 'First file using Web IDE' do + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'empty-project' + project.initialize_with_readme = false + end + end + + let(:web_ide_url) { current_url + '-/ide/project/' + project.path_with_namespace } + let(:file_name) { 'the very first file.txt' } + + before do + Flow::Login.sign_in + end + + it "creates the first file in an empty project via Web IDE" do + # In the first iteration, the test opens Web IDE by modifying the URL to address past regressions. + # Once the Web IDE button is introduced for empty projects, the test will be modified to go through UI. + # See https://gitlab.com/gitlab-org/gitlab/-/issues/27915 and https://gitlab.com/gitlab-org/gitlab/-/issues/27535. + page.visit(web_ide_url) + + Page::Project::WebIDE::Edit.perform do |ide| + ide.create_first_file(file_name) + ide.commit_changes + end + + project.visit! + + Page::Project::Show.perform do |project| + expect(project).to have_file(file_name) + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb b/qa/qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb deleted file mode 100644 index 185d10a64ed..00000000000 --- a/qa/qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -module QA - context 'Create' do - describe 'Wiki management' do - it 'user creates, edits, clones, and pushes to the wiki' do - Flow::Login.sign_in - - wiki = Resource::Wiki.fabricate_via_browser_ui! do |resource| - resource.title = 'Home' - resource.content = '# My First Wiki Content' - resource.message = 'Update home' - end - - validate_content('My First Wiki Content') - - Page::Project::Wiki::Edit.perform(&:click_edit) - Page::Project::Wiki::New.perform do |wiki| - wiki.set_content("My Second Wiki Content") - wiki.save_changes - end - - validate_content('My Second Wiki Content') - - Resource::Repository::WikiPush.fabricate! do |push| - push.wiki = wiki - push.file_name = 'Home.md' - push.file_content = '# My Third Wiki Content' - push.commit_message = 'Update Home.md' - end - Page::Project::Menu.perform(&:click_wiki) - - expect(page).to have_content('My Third Wiki Content') - end - - def validate_content(content) - expect(page).to have_content('Wiki was successfully updated') - expect(page).to have_content(/#{content}/) - end - end - end -end diff --git a/qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_creation_spec.rb b/qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_creation_spec.rb new file mode 100644 index 00000000000..1d0c8ee60d4 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_creation_spec.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: true + +module QA + context 'Create' do + context 'Wiki' do + describe 'testing wiki content creation inside a project' do + let(:new_wiki_title) { "just_another_wiki_page" } + let(:new_wiki_content) { "this content is changed or added" } + let(:commit_message) { "this is a new addition to the wiki" } + + let(:project) { Resource::Project.fabricate_via_api! } + let(:wiki) { Resource::Wiki::ProjectPage.fabricate_via_api! } + + before do + Flow::Login.sign_in + end + + it 'by adding a home page to the wiki' do + project.visit! + + Page::Project::Menu.perform(&:click_wiki) + Page::Project::Wiki::Show.perform(&:click_create_your_first_page) + + Page::Project::Wiki::Edit.perform do |edit| + edit.set_title new_wiki_title + edit.set_content new_wiki_content + edit.set_message commit_message + end + + Page::Project::Wiki::Edit.perform(&:click_create_page) + + Page::Project::Wiki::Show.perform do |wiki| + expect(wiki).to have_title new_wiki_title + expect(wiki).to have_content new_wiki_content + end + end + + it 'by adding a second page to the wiki' do + wiki.visit! + + Page::Project::Wiki::Show.perform(&:click_new_page) + + Page::Project::Wiki::Edit.perform do |edit| + edit.set_title new_wiki_title + edit.set_content new_wiki_content + edit.set_message commit_message + end + + Page::Project::Wiki::Edit.perform(&:click_create_page) + + Page::Project::Wiki::Show.perform do |wiki| + expect(wiki).to have_title new_wiki_title + expect(wiki).to have_content new_wiki_content + end + end + + it 'by adding a home page to the wiki using git push' do + empty_wiki = Resource::Wiki::ProjectPage.new do |empty_wiki| + empty_wiki.project = project + end + + Resource::Repository::WikiPush.fabricate! do |push| + push.file_name = "#{new_wiki_title}.md" + push.file_content = new_wiki_content + push.commit_message = commit_message + push.wiki = empty_wiki + push.new_branch = true + end.visit! + + Page::Project::Wiki::Show.perform do |wiki| + expect(wiki).to have_title new_wiki_title + expect(wiki).to have_content new_wiki_content + end + end + + it 'by adding a second page to the wiki using git push' do + Resource::Repository::WikiPush.fabricate! do |push| + push.file_name = "#{new_wiki_title}.md" + push.file_content = new_wiki_content + push.commit_message = commit_message + push.wiki = wiki + push.new_branch = false + end.visit! + + Page::Project::Wiki::Show.perform do |wiki| + expect(wiki).to have_title new_wiki_title + expect(wiki).to have_content new_wiki_content + end + end + end + end + end +end diff --git a/qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_manipulation_spec.rb b/qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_manipulation_spec.rb new file mode 100644 index 00000000000..10370c80476 --- /dev/null +++ b/qa/qa/specs/features/browser_ui/3_create/wiki/project_based_content_manipulation_spec.rb @@ -0,0 +1,51 @@ +# frozen_string_literal: true + +module QA + context 'Create' do + context 'Wiki' do + describe 'testing wiki content manipulation inside a project' do + let(:new_wiki_title) { "just_another_wiki_page" } + let(:new_wiki_content) { "this content is changed or added" } + let(:commit_message) { "this is a new addition to the wiki" } + + let(:wiki) { Resource::Wiki::ProjectPage.fabricate_via_api! } + + before do + Flow::Login.sign_in + end + + it 'by manipulating content on the page' do + wiki.visit! + + Page::Project::Wiki::Show.perform(&:click_edit) + + Page::Project::Wiki::Edit.perform do |edit| + edit.set_title new_wiki_title + edit.set_content new_wiki_content + edit.set_message commit_message + end + + Page::Project::Wiki::Edit.perform(&:click_save_changes) + + Page::Project::Wiki::Show.perform do |wiki| + expect(wiki).to have_title new_wiki_title + expect(wiki).to have_content new_wiki_content + end + end + + it 'by manipulating content on the page using git push' do + Resource::Repository::WikiPush.fabricate! do |push| + push.file_content = new_wiki_content + push.commit_message = commit_message + push.wiki = wiki + push.new_branch = false + end.visit! + + Page::Project::Wiki::Show.perform do |wiki| + expect(wiki).to have_content new_wiki_content + end + end + end + end + end +end |