From 700853a178f7a512408c08ff7da9737e68b783ce Mon Sep 17 00:00:00 2001 From: Jennifer Louie Date: Tue, 2 Jul 2019 08:05:31 +0000 Subject: QA: transfer project spec --- app/views/layouts/nav/sidebar/_project.html.haml | 2 +- app/views/projects/_commit_button.html.haml | 2 +- app/views/projects/blob/_editor.html.haml | 2 +- app/views/projects/edit.html.haml | 2 +- app/views/shared/_confirm_modal.html.haml | 6 +-- qa/qa.rb | 5 ++ qa/qa/page/component/confirm_modal.rb | 25 ++++++++++ qa/qa/page/component/select2.rb | 4 ++ qa/qa/page/file/edit.rb | 13 +++++ qa/qa/page/file/form.rb | 27 +--------- qa/qa/page/file/shared/commit_button.rb | 21 ++++++++ qa/qa/page/file/shared/editor.rb | 33 +++++++++++++ qa/qa/page/file/show.rb | 2 + qa/qa/page/project/settings/advanced.rb | 16 ++++++ qa/qa/page/project/settings/main.rb | 2 + qa/qa/page/project/sub_menus/project.rb | 29 +++++++++++ qa/qa/page/project/sub_menus/settings.rb | 9 ++++ qa/qa/resource/group.rb | 4 ++ .../1_manage/group/transfer_project_spec.rb | 57 ++++++++++++++++++++++ 19 files changed, 229 insertions(+), 32 deletions(-) create mode 100644 qa/qa/page/component/confirm_modal.rb create mode 100644 qa/qa/page/file/edit.rb create mode 100644 qa/qa/page/file/shared/commit_button.rb create mode 100644 qa/qa/page/file/shared/editor.rb create mode 100644 qa/qa/page/project/sub_menus/project.rb create mode 100644 qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index e401488ecff..a9af5ba5008 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -347,7 +347,7 @@ = _('Settings') %li.divider.fly-out-top-item = nav_link(path: %w[projects#edit]) do - = link_to edit_project_path(@project), title: _('General') do + = link_to edit_project_path(@project), title: _('General'), class: 'qa-general-settings-link' do %span = _('General') = nav_link(controller: :project_members) do diff --git a/app/views/projects/_commit_button.html.haml b/app/views/projects/_commit_button.html.haml index 1e27c71d20d..b6689f4b57a 100644 --- a/app/views/projects/_commit_button.html.haml +++ b/app/views/projects/_commit_button.html.haml @@ -1,5 +1,5 @@ .form-actions - = button_tag 'Commit changes', class: 'btn commit-btn js-commit-button btn-success' + = button_tag 'Commit changes', class: 'btn commit-btn js-commit-button btn-success qa-commit-button' = link_to 'Cancel', cancel_path, class: 'btn btn-cancel', data: {confirm: leave_edit_message} diff --git a/app/views/projects/blob/_editor.html.haml b/app/views/projects/blob/_editor.html.haml index a54460f1196..283b845e40d 100644 --- a/app/views/projects/blob/_editor.html.haml +++ b/app/views/projects/blob/_editor.html.haml @@ -32,7 +32,7 @@ = select_tag :encoding, options_for_select([ "base64", "text" ], "text"), class: 'select2', tabindex: '-1' .file-editor.code - %pre.js-edit-mode-pane#editor= params[:content] || local_assigns[:blob_data] + %pre.js-edit-mode-pane.qa-editor#editor= params[:content] || local_assigns[:blob_data] - if local_assigns[:path] .js-edit-mode-pane#preview.hide .center diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index 29b7c45201c..3403564992e 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -121,7 +121,7 @@ %li= _('You can only transfer the project to namespaces you manage.') %li= _('You will need to update your local repositories to point to the new location.') %li= _('Project visibility level will be changed to match namespace rules when transferring to a group.') - = f.submit 'Transfer project', class: "btn btn-remove js-confirm-danger", data: { "confirm-danger-message" => transfer_project_message(@project) } + = f.submit 'Transfer project', class: "btn btn-remove js-confirm-danger qa-transfer-button", data: { "confirm-danger-message" => transfer_project_message(@project) } - if @project.forked? && can?(current_user, :remove_fork_project, @project) .sub-section diff --git a/app/views/shared/_confirm_modal.html.haml b/app/views/shared/_confirm_modal.html.haml index 3967c8148d2..8e3b482e27d 100644 --- a/app/views/shared/_confirm_modal.html.haml +++ b/app/views/shared/_confirm_modal.html.haml @@ -1,4 +1,4 @@ -#modal-confirm-danger.modal{ tabindex: -1 } +#modal-confirm-danger.modal.qa-confirm-modal{ tabindex: -1 } .modal-dialog .modal-content .modal-header @@ -17,6 +17,6 @@ to proceed or close this modal to cancel. .form-group - = text_field_tag 'confirm_name_input', '', class: 'form-control js-confirm-danger-input' + = text_field_tag 'confirm_name_input', '', class: 'form-control js-confirm-danger-input qa-confirm-input' .form-actions - = submit_tag _('Confirm'), class: "btn btn-danger js-confirm-danger-submit" + = submit_tag _('Confirm'), class: "btn btn-danger js-confirm-danger-submit qa-confirm-button" diff --git a/qa/qa.rb b/qa/qa.rb index 944dcc31917..10d44b6f6d9 100644 --- a/qa/qa.rb +++ b/qa/qa.rb @@ -162,9 +162,12 @@ module QA module File autoload :Form, 'qa/page/file/form' autoload :Show, 'qa/page/file/show' + autoload :Edit, 'qa/page/file/edit' module Shared autoload :CommitMessage, 'qa/page/file/shared/commit_message' + autoload :CommitButton, 'qa/page/file/shared/commit_button' + autoload :Editor, 'qa/page/file/shared/editor' end end @@ -218,6 +221,7 @@ module QA autoload :Operations, 'qa/page/project/sub_menus/operations' autoload :Repository, 'qa/page/project/sub_menus/repository' autoload :Settings, 'qa/page/project/sub_menus/settings' + autoload :Project, 'qa/page/project/sub_menus/project' end module Issue @@ -323,6 +327,7 @@ module QA autoload :DropdownFilter, 'qa/page/component/dropdown_filter' autoload :UsersSelect, 'qa/page/component/users_select' autoload :Note, 'qa/page/component/note' + autoload :ConfirmModal, 'qa/page/component/confirm_modal' module Issuable autoload :Common, 'qa/page/component/issuable/common' diff --git a/qa/qa/page/component/confirm_modal.rb b/qa/qa/page/component/confirm_modal.rb new file mode 100644 index 00000000000..355e2783fb7 --- /dev/null +++ b/qa/qa/page/component/confirm_modal.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module QA + module Page + module Component + module ConfirmModal + def self.included(base) + base.view 'app/views/shared/_confirm_modal.html.haml' do + element :confirm_modal + element :confirm_input + element :confirm_button + end + end + + def fill_confirmation_text(text) + fill_element :confirm_input, text + end + + def click_confirm_button + click_element :confirm_button + end + end + end + end +end diff --git a/qa/qa/page/component/select2.rb b/qa/qa/page/component/select2.rb index e40bc4b1d3e..85d4abcde9b 100644 --- a/qa/qa/page/component/select2.rb +++ b/qa/qa/page/component/select2.rb @@ -18,6 +18,10 @@ module QA find('.select2-input').set(item_text) select_item(item_text) end + + def expand_select_list + find('span.select2-arrow').click + end end end end diff --git a/qa/qa/page/file/edit.rb b/qa/qa/page/file/edit.rb new file mode 100644 index 00000000000..3a4a1837b1c --- /dev/null +++ b/qa/qa/page/file/edit.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module QA + module Page + module File + class Edit < Page::Base + include Shared::CommitMessage + include Shared::CommitButton + include Shared::Editor + end + end + end +end diff --git a/qa/qa/page/file/form.rb b/qa/qa/page/file/form.rb index e42de7d65c5..a6251f185f9 100644 --- a/qa/qa/page/file/form.rb +++ b/qa/qa/page/file/form.rb @@ -6,14 +6,11 @@ module QA class Form < Page::Base include Shared::CommitMessage include Page::Component::DropdownFilter + include Shared::CommitButton + include Shared::Editor view 'app/views/projects/blob/_editor.html.haml' do element :file_name, "text_field_tag 'file_name'" # rubocop:disable QA/ElementWithPattern - element :editor, '#editor' # rubocop:disable QA/ElementWithPattern - end - - view 'app/views/projects/_commit_button.html.haml' do - element :commit_changes, "button_tag 'Commit changes'" # rubocop:disable QA/ElementWithPattern end view 'app/views/projects/blob/_template_selectors.html.haml' do @@ -28,20 +25,6 @@ module QA fill_in 'file_name', with: name end - def add_content(content) - text_area.set content - end - - def remove_content - text_area.send_keys([:command, 'a'], :backspace) - end - - def commit_changes - click_on 'Commit changes' - - finished_loading? - end - def select_template(template_type, template) click_element :template_type_dropdown click_link template_type @@ -60,12 +43,6 @@ module QA end filter_and_select template end - - private - - def text_area - find('#editor>textarea', visible: false) - end end end end diff --git a/qa/qa/page/file/shared/commit_button.rb b/qa/qa/page/file/shared/commit_button.rb new file mode 100644 index 00000000000..d8e751dd7b6 --- /dev/null +++ b/qa/qa/page/file/shared/commit_button.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +module QA + module Page + module File + module Shared + module CommitButton + def self.included(base) + base.view 'app/views/projects/_commit_button.html.haml' do + element :commit_button + end + end + + def commit_changes + click_element(:commit_button) + end + end + end + end + end +end diff --git a/qa/qa/page/file/shared/editor.rb b/qa/qa/page/file/shared/editor.rb new file mode 100644 index 00000000000..448c09cfbca --- /dev/null +++ b/qa/qa/page/file/shared/editor.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module QA + module Page + module File + module Shared + module Editor + def self.included(base) + base.view 'app/views/projects/blob/_editor.html.haml' do + element :editor + end + end + + def add_content(content) + text_area.set content + end + + def remove_content + text_area.send_keys([:command, 'a'], :backspace) + end + + private + + def text_area + within_element :editor do + find('textarea', visible: false) + end + end + end + end + end + end +end diff --git a/qa/qa/page/file/show.rb b/qa/qa/page/file/show.rb index eaf88c6e69e..92f9181f99d 100644 --- a/qa/qa/page/file/show.rb +++ b/qa/qa/page/file/show.rb @@ -5,6 +5,8 @@ module QA module File class Show < Page::Base include Shared::CommitMessage + include Project::SubMenus::Settings + include Project::SubMenus::Common view 'app/helpers/blob_helper.rb' do element :edit_button, "_('Edit')" # rubocop:disable QA/ElementWithPattern diff --git a/qa/qa/page/project/settings/advanced.rb b/qa/qa/page/project/settings/advanced.rb index 75530832860..ab4e3d757b6 100644 --- a/qa/qa/page/project/settings/advanced.rb +++ b/qa/qa/page/project/settings/advanced.rb @@ -5,9 +5,13 @@ module QA module Project module Settings class Advanced < Page::Base + include Component::Select2 + include Component::ConfirmModal + view 'app/views/projects/edit.html.haml' do element :project_path_field element :change_path_button + element :transfer_button end def update_project_path_to(path) @@ -22,6 +26,18 @@ module QA def click_change_path_button click_element :change_path_button end + + def select_transfer_option(namespace) + search_and_select(namespace) + end + + def transfer_project!(project_name, namespace) + expand_select_list + select_transfer_option(namespace) + click_element(:transfer_button) + fill_confirmation_text(project_name) + click_confirm_button + end end end end diff --git a/qa/qa/page/project/settings/main.rb b/qa/qa/page/project/settings/main.rb index d1f3b15f950..dbbe62e3b1d 100644 --- a/qa/qa/page/project/settings/main.rb +++ b/qa/qa/page/project/settings/main.rb @@ -6,6 +6,8 @@ module QA module Settings class Main < Page::Base include Common + include Component::Select2 + include SubMenus::Project view 'app/views/projects/edit.html.haml' do element :advanced_settings diff --git a/qa/qa/page/project/sub_menus/project.rb b/qa/qa/page/project/sub_menus/project.rb new file mode 100644 index 00000000000..5e0ee3c274a --- /dev/null +++ b/qa/qa/page/project/sub_menus/project.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module QA + module Page + module Project + module SubMenus + module Project + include Common + + def self.included(base) + base.class_eval do + view 'app/views/layouts/nav/sidebar/_project.html.haml' do + element :link_project + end + end + end + + def click_project + retry_on_exception do + within_sidebar do + click_element(:link_project) + end + end + end + end + end + end + end +end diff --git a/qa/qa/page/project/sub_menus/settings.rb b/qa/qa/page/project/sub_menus/settings.rb index 22743ebd0a1..88b45ec55ae 100644 --- a/qa/qa/page/project/sub_menus/settings.rb +++ b/qa/qa/page/project/sub_menus/settings.rb @@ -10,6 +10,7 @@ module QA view 'app/views/layouts/nav/sidebar/_project.html.haml' do element :settings_item element :link_members_settings + element :general_settings_link end end end @@ -38,6 +39,14 @@ module QA end end + def go_to_general_settings + hover_settings do + within_submenu do + click_element :general_settings_link + end + end + end + def click_settings within_sidebar do click_on 'Settings' diff --git a/qa/qa/resource/group.rb b/qa/qa/resource/group.rb index 0b567a474c8..44d9dc8f296 100644 --- a/qa/qa/resource/group.rb +++ b/qa/qa/resource/group.rb @@ -67,6 +67,10 @@ module QA visibility: 'public' } end + + def full_path + sandbox.path + ' / ' + path + end end end end diff --git a/qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb new file mode 100644 index 00000000000..a9de64e357a --- /dev/null +++ b/qa/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module QA + context 'Manage' do + describe 'Project transfer between groups' do + it 'user transfers a project between groups' do + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.act { sign_in_using_credentials } + + source_group = Resource::Group.fabricate! do |group| + group.path = 'source-group' + end + + target_group = Resource::Group.fabricate! do |group| + group.path = 'target-group' + end + + project = Resource::Project.fabricate! do |project| + project.group = source_group + project.name = 'transfer-project' + project.initialize_with_readme = true + end + + project.visit! + + Page::Project::Show.perform do |project| + project.click_file('README.md') + end + + Page::File::Show.perform(&:click_edit) + + edited_readme_content = 'Here is the edited content.' + + Page::File::Edit.perform do |file| + file.remove_content + file.add_content(edited_readme_content) + file.commit_changes + end + + Page::File::Show.perform(&:go_to_general_settings) + + Page::Project::Settings::Main.perform(&:expand_advanced_settings) + + Page::Project::Settings::Advanced.perform do |advanced| + advanced.transfer_project!(project.name, target_group.full_path) + end + + Page::Project::Settings::Main.perform(&:click_project) + + Page::Project::Show.perform do |project| + expect(project).to have_text(target_group.path) + expect(project).to have_text(edited_readme_content) + end + end + end + end +end -- cgit v1.2.1