Commit 9245db7c authored by Dan Davison's avatar Dan Davison

Merge branch 'qa-ml-validate-after-visit-in-block' into 'master'

[EE] Validate page after visit in block

Closes gitlab-ce#62062

See merge request gitlab-org/gitlab-ee!13994
parents 4c42a061 5cc0f861
- form_field_classes = local_assigns[:admin_view] || !Feature.enabled?(:project_list_filter_bar) ? 'input-short js-projects-list-filter' : ''
- placeholder = local_assigns[:search_form_placeholder] ? search_form_placeholder : 'Filter by name...'
= form_tag filter_projects_path, method: :get, class: 'project-filter-form', id: 'project-filter-form' do |f|
= form_tag filter_projects_path, method: :get, class: 'project-filter-form qa-project-filter-form', id: 'project-filter-form' do |f|
= search_field_tag :name, params[:name],
placeholder: placeholder,
class: "project-filter-form-field form-control #{form_field_classes}",
......
......@@ -35,6 +35,7 @@ module QA
Geo::Secondary.act do
replicate_database
wait_for_services
authorize
end
end
......@@ -105,6 +106,19 @@ module QA
@name = QA::Runtime::Scenario.geo_secondary_name
end
def authorize
# Provide OAuth authorization now so that tests don't have to
QA::Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
QA::Page::Main::Login.perform(&:sign_in_using_credentials)
QA::Page::Main::OAuth.perform do |oauth|
oauth.authorize! if oauth.needs_authorization?
end
# Log out so that tests are in an initially unauthenticated state
QA::Page::Main::Menu.perform(&:sign_out)
end
end
def replicate_database
puts 'Starting Geo replication on secondary node ...'
......
......@@ -7,7 +7,7 @@ module QA
prepend QA::EE::Page::Dashboard::Projects
view 'app/views/shared/projects/_search_form.html.haml' do
element :form_filter_by_name, /form_tag.+id: 'project-filter-form'/ # rubocop:disable QA/ElementWithPattern
element :project_filter_form, required: true
end
def go_to_project(name)
......@@ -16,10 +16,14 @@ module QA
find_link(text: name).click
end
def self.path
'/'
end
private
def filter_by_name(name)
page.within('form#project-filter-form') do
within_element(:project_filter_form) do
fill_in :name, with: name
end
end
......
......@@ -5,7 +5,7 @@ module QA
class Address
attr_reader :address
def initialize(instance, page = nil)
def initialize(instance, page)
@instance = instance
@address = host + (page.is_a?(String) ? page : page&.path)
end
......
......@@ -28,13 +28,12 @@ module QA
# In case of an address that is a symbol we will try to guess address
# based on `Runtime::Scenario#something_address`.
#
def visit(address, page = nil, &block)
Browser::Session.new(address, page).perform(&block)
def visit(address, page_class, &block)
Browser::Session.new(address, page_class).perform(&block)
end
def self.visit(address, page = nil, &block)
new.visit(address, page, &block)
page.validate_elements_present!
def self.visit(address, page_class, &block)
new.visit(address, page_class, &block)
end
def self.configure!
......@@ -129,8 +128,11 @@ module QA
class Session
include Capybara::DSL
def initialize(instance, page = nil)
@session_address = Runtime::Address.new(instance, page)
attr_reader :page_class
def initialize(instance, page_class)
@session_address = Runtime::Address.new(instance, page_class)
@page_class = page_class
end
def url
......@@ -140,6 +142,8 @@ module QA
def perform(&block)
visit(url)
page_class.validate_elements_present!
if QA::Runtime::Env.qa_cookies
browser = Capybara.current_session.driver.browser
QA::Runtime::Env.qa_cookies.each do |cookie|
......
......@@ -5,28 +5,35 @@ module QA
describe 'GitLab Geo attachment replication' do
let(:file_to_attach) { File.absolute_path(File.join('spec', 'fixtures', 'banana_sample.gif')) }
after do
# Log out so subsequent tests can start unauthenticated
Runtime::Browser.visit(:geo_secondary, QA::Page::Dashboard::Projects)
Page::Main::Menu.perform do |menu|
menu.sign_out if menu.has_personal_area?(wait: 0)
end
end
it 'user uploads attachment to the primary node' do
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
Page::Main::Login.act { sign_in_using_credentials }
Page::Main::Login.perform(&:sign_in_using_credentials)
project = Resource::Project.fabricate! do |project|
@project = Resource::Project.fabricate! do |project|
project.name = 'project-for-issues'
project.description = 'project for adding issues'
end
issue = Resource::Issue.fabricate! do |issue|
@issue = Resource::Issue.fabricate! do |issue|
issue.title = 'My geo issue'
issue.project = project
issue.project = @project
end
Page::Project::Issue::Show.perform do |show|
show.comment('See attached banana for scale', attachment: file_to_attach)
end
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do |session|
Page::Main::OAuth.act do
authorize! if needs_authorization?
end
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -39,15 +46,15 @@ module QA
end
Page::Dashboard::Projects.perform do |dashboard|
dashboard.wait_for_project_replication(project.name)
dashboard.wait_for_project_replication(@project.name)
dashboard.go_to_project(project.name)
dashboard.go_to_project(@project.name)
end
Page::Project::Menu.act { click_issues }
Page::Project::Issue::Index.perform do |index|
index.wait_for_issue_replication(issue)
index.wait_for_issue_replication(@issue)
end
image_url = find('a[href$="banana_sample.gif"]')[:href]
......@@ -64,5 +71,4 @@ module QA
end
end
end
end
end
......@@ -5,13 +5,22 @@ module QA
describe 'GitLab HTTP push' do
let(:file_name) { 'README.md' }
after do
# Log out so subsequent tests can start unauthenticated
Runtime::Browser.visit(:geo_secondary, QA::Page::Dashboard::Projects)
Page::Main::Menu.perform do |menu|
menu.sign_out if menu.has_personal_area?(wait: 0)
end
end
context 'regular git commit' do
it 'is replicated to the secondary' do
file_content = 'This is a Geo project! Commit from primary.'
project = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
Page::Main::Login.act { sign_in_using_credentials }
Page::Main::Login.perform(&:sign_in_using_credentials)
# Create a new Project
project = Resource::Project.fabricate! do |project|
......@@ -34,10 +43,11 @@ module QA
expect(page).to have_content(file_name)
expect(page).to have_content(file_content)
end
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -60,16 +70,16 @@ module QA
end
end
end
end
context 'git-lfs commit' do
it 'is replicated to the secondary' do
file_content = 'This is a Geo project!'
lfs_file_content = 'The rendered file could not be displayed because it is stored in LFS.'
project = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
Page::Main::Login.act { sign_in_using_credentials }
Page::Main::Login.perform(&:sign_in_using_credentials)
# Create a new Project
project = Resource::Project.fabricate! do |project|
......@@ -95,10 +105,11 @@ module QA
expect(page).to have_content(file_name)
expect(page).to have_content(lfs_file_content)
end
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -123,5 +134,4 @@ module QA
end
end
end
end
end
......@@ -6,9 +6,18 @@ module QA
let(:file_content_primary) { 'This is a Geo project! Commit from primary.' }
let(:file_content_secondary) { 'This is a Geo project! Commit from secondary.' }
after do
# Log out so subsequent tests can start unauthenticated
Runtime::Browser.visit(:geo_secondary, QA::Page::Dashboard::Projects)
Page::Main::Menu.perform do |menu|
menu.sign_out if menu.has_personal_area?(wait: 0)
end
end
context 'regular git commit' do
it 'is redirected to the primary and ultimately replicated to the secondary' do
file_name = 'README.md'
project = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
......@@ -31,10 +40,11 @@ module QA
push.commit_message = "Add #{file_name}"
end
project.visit!
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -82,12 +92,12 @@ module QA
end
end
end
end
context 'git-lfs commit' do
it 'is redirected to the primary and ultimately replicated to the secondary' do
file_name_primary = 'README.md'
file_name_secondary = 'README_MORE.md'
project = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
......@@ -110,10 +120,11 @@ module QA
push.file_content = "# #{file_content_primary}"
push.commit_message = "Add #{file_name_primary}"
end
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -164,5 +175,4 @@ module QA
end
end
end
end
end
......@@ -3,10 +3,18 @@
module QA
context 'Geo', :orchestrated, :geo do
describe 'GitLab Geo project rename replication' do
after do
# Log out so subsequent tests can start unauthenticated
Runtime::Browser.visit(:geo_secondary, QA::Page::Dashboard::Projects)
Page::Main::Menu.perform do |menu|
menu.sign_out if menu.has_personal_area?(wait: 0)
end
end
it 'user renames project' do
# create the project and push code
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
Page::Main::Login.act { sign_in_using_credentials }
Page::Main::Login.perform(&:sign_in_using_credentials)
project = Resource::Project.fabricate! do |project|
project.name = 'geo-before-rename'
......@@ -32,21 +40,20 @@ module QA
Page::Project::Menu.act { click_settings }
geo_project_renamed = "geo-after-rename-#{SecureRandom.hex(8)}"
@geo_project_renamed = "geo-after-rename-#{SecureRandom.hex(8)}"
Page::Project::Settings::Main.perform do |settings|
settings.rename_project_to(geo_project_renamed)
expect(page).to have_content "Project '#{geo_project_renamed}' was successfully updated."
settings.rename_project_to(@geo_project_renamed)
expect(page).to have_content "Project '#{@geo_project_renamed}' was successfully updated."
settings.expand_advanced_settings do |page|
page.update_project_path_to(geo_project_renamed)
page.update_project_path_to(@geo_project_renamed)
end
end
end
# check renamed project exist on secondary node
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
Page::Main::OAuth.act do
authorize! if needs_authorization?
end
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -57,9 +64,9 @@ module QA
end
Page::Dashboard::Projects.perform do |dashboard|
dashboard.wait_for_project_replication(geo_project_renamed)
dashboard.wait_for_project_replication(@geo_project_renamed)
dashboard.go_to_project(geo_project_renamed)
dashboard.go_to_project(@geo_project_renamed)
end
Page::Project::Show.perform do |show|
......@@ -72,5 +79,4 @@ module QA
end
end
end
end
end
......@@ -5,14 +5,24 @@ module QA
describe 'GitLab SSH push' do
let(:file_name) { 'README.md' }
after do
# Log out so subsequent tests can start unauthenticated
Runtime::Browser.visit(:geo_secondary, QA::Page::Dashboard::Projects)
Page::Main::Menu.perform do |menu|
menu.sign_out if menu.has_personal_area?(wait: 0)
end
end
context 'regular git commit' do
it "is replicated to the secondary" do
key_title = "key for ssh tests #{Time.now.to_f}"
file_content = 'This is a Geo project! Commit from primary.'
project = nil
key = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
Page::Main::Login.act { sign_in_using_credentials }
Page::Main::Login.perform(&:sign_in_using_credentials)
# Create a new SSH key for the user
key = Resource::SSHKey.fabricate! do |resource|
......@@ -41,10 +51,11 @@ module QA
expect(page).to have_content(file_name)
expect(page).to have_content(file_content)
end
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -74,16 +85,17 @@ module QA
end
end
end
end
context 'git-lfs commit' do
it "is replicated to the secondary" do
key_title = "key for ssh tests #{Time.now.to_f}"
file_content = 'The rendered file could not be displayed because it is stored in LFS.'
project = nil
key = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
Page::Main::Login.act { sign_in_using_credentials }
Page::Main::Login.perform(&:sign_in_using_credentials)
# Create a new SSH key for the user
key = Resource::SSHKey.fabricate! do |resource|
......@@ -115,10 +127,11 @@ module QA
expect(page).to have_content(file_name)
expect(page).to have_content(file_content)
end
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -150,5 +163,4 @@ module QA
end
end
end
end
end
......@@ -6,11 +6,21 @@ module QA
let(:file_content_primary) { 'This is a Geo project! Commit from primary.' }
let(:file_content_secondary) { 'This is a Geo project! Commit from secondary.' }
after do
# Log out so subsequent tests can start unauthenticated
Runtime::Browser.visit(:geo_secondary, QA::Page::Dashboard::Projects)
Page::Main::Menu.perform do |menu|
menu.sign_out if menu.has_personal_area?(wait: 0)
end
end
context 'regular git commit' do
it 'is proxied to the primary and ultimately replicated to the secondary' do
file_name = 'README.md'
key_title = "key for ssh tests #{Time.now.to_f}"
file_content = 'This is a Geo project! Commit from secondary.'
project = nil
key = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
......@@ -39,10 +49,11 @@ module QA
push.commit_message = "Add #{file_name}"
end
project.visit!
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -96,13 +107,14 @@ module QA
end
end
end
end
context 'git-lfs commit' do
it 'is proxied to the primary and ultimately replicated to the secondary' do
key_title = "key for ssh tests #{Time.now.to_f}"
file_name_primary = 'README.md'
file_name_secondary = 'README_MORE.md'
project = nil
key = nil
Runtime::Browser.visit(:geo_primary, QA::Page::Main::Login) do
# Visit the primary node and login
......@@ -131,10 +143,11 @@ module QA
push.file_content = "# #{file_content_primary}"
push.commit_message = "Add #{file_name_primary}"
end
end
Runtime::Browser.visit(:geo_secondary, QA::Page::Main::Login) do
# Visit the secondary node and login
Page::Main::OAuth.act { authorize! if needs_authorization? }
Page::Main::Login.perform(&:sign_in_using_credentials)
EE::Page::Main::Banner.perform do |banner|
expect(banner).to have_secondary_read_only_banner
......@@ -190,5 +203,4 @@ module QA
end
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment