Update GitHub Import test

Removes the unnecessary :orchestrated tag and updates a few
selectors. Also wait_for_success for import before proceeding.
The test is currently placed in quarantine because of a bug.
This commit is contained in:
Sanad Liaquat 2019-02-25 18:37:27 +05:00
parent 20d84d804e
commit ddef2f1fbd
11 changed files with 75 additions and 35 deletions

View file

@ -219,7 +219,7 @@ export default {
:class="classNameBindings"
:data-award-url="note.toggle_award_path"
:data-note-id="note.id"
class="note note-wrapper"
class="note note-wrapper qa-noteable-note-item"
>
<div v-once class="timeline-icon">
<user-avatar-link

View file

@ -77,8 +77,8 @@ module QA
page.evaluate_script('xhr.status') == 200
end
def find_element(name, text_filter = nil, wait: Capybara.default_max_wait_time)
find(element_selector_css(name), wait: wait, text: text_filter)
def find_element(name, text: nil, wait: Capybara.default_max_wait_time)
find(element_selector_css(name), wait: wait, text: text)
end
def all_elements(name)
@ -109,8 +109,8 @@ module QA
element.select value.to_s.capitalize
end
def has_element?(name, wait: Capybara.default_max_wait_time)
has_css?(element_selector_css(name), wait: wait)
def has_element?(name, text: nil, wait: Capybara.default_max_wait_time)
has_css?(element_selector_css(name), wait: wait, text: text)
end
def has_no_element?(name, wait: Capybara.default_max_wait_time)

View file

@ -45,7 +45,7 @@ module QA
private
def select_kind(kind)
retry_on_exception(sleep_interval: 1.0) do
QA::Support::Retrier.retry_on_exception(sleep_interval: 1.0) do
within_element(:new_project_or_subgroup_dropdown) do
# May need to click again because it is possible to click the button quicker than the JS is bound
wait(reload: false) do

View file

@ -29,12 +29,19 @@ module QA
choose_test_namespace(full_path)
set_path(full_path, name)
import_project(full_path)
wait_for_success
end
private
def within_repo_path(full_path)
page.within(%Q(tr[data-qa-repo-path="#{full_path}"])) do
wait(reload: false) do
has_element?(:project_import_row, text: full_path)
end
project_import_row = find_element(:project_import_row, text: full_path)
within(project_import_row) do
yield
end
end
@ -44,18 +51,24 @@ module QA
click_element :project_namespace_select
end
select_item(Runtime::Namespace.path)
search_and_select(Runtime::Namespace.path)
end
def set_path(full_path, name)
within_repo_path(full_path) do
fill_in 'path', with: name
fill_element(:project_path_field, name)
end
end
def import_project(full_path)
within_repo_path(full_path) do
click_button 'Import'
click_element(:import_button)
end
end
def wait_for_success
wait(max: 60, interval: 1.0, reload: false) do
page.has_content?('Done', wait: 1.0)
end
end
end

View file

@ -23,6 +23,10 @@ module QA
element :filter_options
end
view 'app/assets/javascripts/notes/components/noteable_note.vue' do
element :noteable_note_item
end
# Adds a comment to an issue
# attachment option should be an absolute path
def comment(text, attachment: nil)
@ -36,6 +40,12 @@ module QA
click_element :comment_button
end
def has_comment?(comment_text)
wait(reload: false) do
has_element?(:noteable_note_item, text: comment_text)
end
end
def select_comments_only_filter
select_filter_with_text('Show comments only')
end
@ -54,7 +64,7 @@ module QA
retry_on_exception do
click_body
click_element :discussion_filter
find_element(:filter_options, text).click
find_element(:filter_options, text: text).click
end
end
end

View file

@ -43,7 +43,7 @@ module QA::Page
end
def go_to_job(job_name)
find_element(:job_link, job_name).click
find_element(:job_link, text: job_name).click
end
def go_to_first_job

View file

@ -33,14 +33,14 @@ module QA
def find_fingerprint(title)
within_project_deploy_keys do
find_element(:key, title)
find_element(:key, text: title)
.find(element_selector_css(:key_fingerprint)).text
end
end
def has_key?(title, fingerprint)
within_project_deploy_keys do
find_element(:key, title)
find_element(:key, text: title)
.has_css?(element_selector_css(:key_fingerprint), text: fingerprint)
end
end

View file

@ -4,7 +4,7 @@ require 'securerandom'
module QA
module Resource
class ProjectImportedFromGithub < Project
class ProjectImportedFromGithub < Base
attr_accessor :name
attr_writer :personal_access_token, :github_repository_path

View file

@ -1,7 +1,8 @@
# frozen_string_literal: true
module QA
context 'Manage', :orchestrated, :github do
# https://gitlab.com/gitlab-org/gitlab-ce/issues/58158
context 'Manage', :github, :quarantine do
describe 'Project import from GitHub' do
let(:imported_project) do
Resource::ProjectImportedFromGithub.fabricate! do |project|
@ -48,20 +49,26 @@ module QA
end
def verify_issues_import
Page::Project::Menu.act { click_issues }
expect(page).to have_content('This is a sample issue')
QA::Support::Retrier.retry_on_exception do
Page::Project::Menu.act { click_issues }
expect(page).to have_content('This is a sample issue')
click_link 'This is a sample issue'
click_link 'This is a sample issue'
expect(page).to have_content('We should populate this project with issues, pull requests and wiki pages.')
expect(page).to have_content('We should populate this project with issues, pull requests and wiki pages.')
# Comments
expect(page).to have_content('This is a comment from @rymai.')
# Comments
comment_text = 'This is a comment from @rymai.'
Page::Issuable::Sidebar.perform do |issuable|
expect(issuable).to have_label('enhancement')
expect(issuable).to have_label('help wanted')
expect(issuable).to have_label('good first issue')
Page::Project::Issue::Show.perform do |issue_page|
expect(issue_page).to have_comment(comment_text)
end
Page::Issuable::Sidebar.perform do |issuable|
expect(issuable).to have_label('enhancement')
expect(issuable).to have_label('help wanted')
expect(issuable).to have_label('good first issue')
end
end
end

View file

@ -33,9 +33,9 @@ module QA
exists
end
def find_element(name, text_filter = nil, wait: Capybara.default_max_wait_time)
def find_element(name, text: nil, wait: Capybara.default_max_wait_time)
msg = ["finding :#{name}"]
msg << %Q(with text_filter "#{text_filter}") if text_filter
msg << %Q(with text "#{text}") if text
msg << "(wait: #{wait})"
log(msg.compact.join(' '))
@ -76,10 +76,15 @@ module QA
super
end
def has_element?(name, wait: Capybara.default_max_wait_time)
def has_element?(name, text: nil, wait: Capybara.default_max_wait_time)
found = super
log("has_element? :#{name} returned #{found}")
msg = ["has_element? :#{name}"]
msg << %Q(with text "#{text}") if text
msg << "(wait: #{wait})"
msg << "returned: #{found}"
log(msg.compact.join(' '))
found
end

View file

@ -62,10 +62,10 @@ describe QA::Support::Page::Logging do
.to output(/found :element/).to_stdout_from_any_process
end
it 'logs find_element with text_filter' do
expect { subject.find_element(:element, 'foo') }
.to output(/finding :element with text_filter "foo"/).to_stdout_from_any_process
expect { subject.find_element(:element, 'foo') }
it 'logs find_element with text' do
expect { subject.find_element(:element, text: 'foo') }
.to output(/finding :element with text "foo"/).to_stdout_from_any_process
expect { subject.find_element(:element, text: 'foo') }
.to output(/found :element/).to_stdout_from_any_process
end
@ -81,7 +81,12 @@ describe QA::Support::Page::Logging do
it 'logs has_element?' do
expect { subject.has_element?(:element) }
.to output(/has_element\? :element returned true/).to_stdout_from_any_process
.to output(/has_element\? :element \(wait: 2\) returned: true/).to_stdout_from_any_process
end
it 'logs has_element? with text' do
expect { subject.has_element?(:element, text: "some text") }
.to output(/has_element\? :element with text \"some text\" \(wait: 2\) returned: true/).to_stdout_from_any_process
end
it 'logs has_no_element?' do