1# frozen_string_literal: true 2 3module QA 4 module Page 5 module Project 6 class Show < Page::Base 7 include Layout::Flash 8 include Page::Component::ClonePanel 9 include Page::Component::Breadcrumbs 10 include Page::Project::SubMenus::Settings 11 include Page::File::Shared::CommitMessage 12 prepend Mobile::Page::Project::Show if Runtime::Env.mobile_layout? 13 14 view 'app/assets/javascripts/repository/components/preview/index.vue' do 15 element :blob_viewer_content 16 end 17 18 view 'app/assets/javascripts/repository/components/table/row.vue' do 19 element :file_name_link 20 end 21 22 view 'app/assets/javascripts/repository/components/table/index.vue' do 23 element :file_tree_table 24 end 25 26 view 'app/views/layouts/header/_new_dropdown.html.haml' do 27 element :new_menu_toggle 28 end 29 30 view 'app/helpers/nav/new_dropdown_helper.rb' do 31 element :new_issue_link 32 end 33 34 view 'app/views/projects/_last_push.html.haml' do 35 element :create_merge_request 36 end 37 38 view 'app/views/projects/_home_panel.html.haml' do 39 element :forked_from_link 40 element :project_name_content 41 element :project_id_content 42 end 43 44 view 'app/views/projects/_files.html.haml' do 45 element :tree_holder, '.tree-holder' # rubocop:disable QA/ElementWithPattern 46 end 47 48 view 'app/views/projects/buttons/_fork.html.haml' do 49 element :fork_label, "%span= s_('ProjectOverview|Fork')" # rubocop:disable QA/ElementWithPattern 50 element :fork_link, "link_to new_project_fork_path(@project)" # rubocop:disable QA/ElementWithPattern 51 end 52 53 view 'app/views/projects/empty.html.haml' do 54 element :quick_actions 55 end 56 57 view 'app/assets/javascripts/repository/components/breadcrumbs.vue' do 58 element :add_to_tree 59 element :new_file_option 60 end 61 62 view 'app/assets/javascripts/vue_shared/components/web_ide_link.vue' do 63 element :web_ide_button 64 end 65 66 view 'app/views/shared/_ref_switcher.html.haml' do 67 element :branches_select 68 element :branches_dropdown 69 end 70 71 view 'app/views/projects/blob/viewers/_loading.html.haml' do 72 element :spinner 73 end 74 75 view 'app/views/projects/buttons/_download.html.haml' do 76 element :download_source_code_button 77 end 78 79 def wait_for_viewers_to_load 80 has_no_element?(:spinner, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME) 81 end 82 83 def create_first_new_file! 84 within_element(:quick_actions) do 85 click_link_with_text 'New file' 86 end 87 end 88 89 def create_new_file! 90 click_element :add_to_tree 91 click_element :new_file_option 92 end 93 94 def fork_project 95 click_on 'Fork' 96 end 97 98 def forked_from?(parent_project_name) 99 has_element?(:forked_from_link, text: parent_project_name) 100 end 101 102 def click_file(filename) 103 within_element(:file_tree_table) do 104 click_element(:file_name_link, text: filename) 105 end 106 end 107 108 def click_commit(commit_msg) 109 wait_for_requests 110 111 within_element(:file_tree_table) do 112 click_on commit_msg 113 end 114 end 115 116 def go_to_new_issue 117 click_element(:new_menu_toggle) 118 click_element(:new_issue_link) 119 end 120 121 def has_file?(name) 122 within_element(:file_tree_table) do 123 has_element?(:file_name_link, text: name) 124 end 125 end 126 127 def has_no_file?(name) 128 within_element(:file_tree_table) do 129 has_no_element?(:file_name_link, text: name) 130 end 131 end 132 133 def has_name?(name) 134 has_element?(:project_name_content, text: name) 135 end 136 137 def has_readme_content?(text) 138 has_element?(:blob_viewer_content, text: text) 139 end 140 141 def new_merge_request 142 wait_until(reload: true) do 143 has_css?(element_selector_css(:create_merge_request)) 144 end 145 146 click_element :create_merge_request 147 end 148 149 def open_web_ide! 150 click_element(:web_ide_button) 151 end 152 153 def open_web_ide_via_shortcut 154 page.driver.send_keys('.') 155 end 156 157 def has_edit_fork_button? 158 has_element?(:web_ide_button, text: 'Edit fork in Web IDE') 159 end 160 161 def project_name 162 find_element(:project_name_content).text 163 end 164 165 def project_id 166 find_element(:project_id_content).text.delete('Project ID: ') 167 end 168 169 def switch_to_branch(branch_name) 170 find_element(:branches_select).click 171 172 within_element(:branches_dropdown) do 173 click_on branch_name 174 end 175 end 176 177 def wait_for_import 178 wait_until(reload: true) do 179 has_css?('.tree-holder') 180 end 181 end 182 end 183 end 184 end 185end 186 187QA::Page::Project::Show.prepend_mod_with('Page::Project::Show', namespace: QA) 188