Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-09-20 09:09:32 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-09-20 09:09:32 +0300
commitafb35e247139c24382a0bb3da893ce156e183be2 (patch)
tree82b74d1eaa6d17ddb53118b205fb91764a4f24d6 /qa
parent58c0ae1238785d0964789537be3d75f94e8d60dd (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'qa')
-rw-r--r--qa/Gemfile4
-rw-r--r--qa/Gemfile.lock10
-rw-r--r--qa/chemlab-library-gitlab.gemspec4
-rw-r--r--qa/lib/gitlab.rb4
-rw-r--r--qa/qa/page/component/web_ide/web_terminal_panel.rb63
-rw-r--r--qa/qa/page/project/web_ide/edit.rb3
-rw-r--r--qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb84
7 files changed, 161 insertions, 11 deletions
diff --git a/qa/Gemfile b/qa/Gemfile
index cc2355cdfa3..9b1735fe646 100644
--- a/qa/Gemfile
+++ b/qa/Gemfile
@@ -9,7 +9,7 @@ gem 'capybara', '~> 3.35.0'
gem 'capybara-screenshot', '~> 1.0.23'
gem 'rake', '~> 12.3.3'
gem 'rspec', '~> 3.10'
-gem 'selenium-webdriver', '~> 4.0.0.beta4'
+gem 'selenium-webdriver', '~> 4.0.0.rc1'
gem 'airborne', '~> 0.3.4', require: false # airborne is messing with rspec sandboxed mode so not requiring by default
gem 'rest-client', '~> 2.1.0'
gem 'rspec-retry', '~> 0.6.1', require: 'rspec/retry'
@@ -26,7 +26,7 @@ gem 'webdrivers', '~> 4.6'
gem 'zeitwerk', '~> 2.4'
gem 'influxdb-client', '~> 1.17'
-gem 'chemlab', '~> 0.7'
+gem 'chemlab', '~> 0.8'
gem 'chemlab-library-www-gitlab-com', '~> 0.1'
gem 'deprecation_toolkit', '~> 1.5.1', require: false
diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock
index 5f33afaa77b..2f9f14e1ac7 100644
--- a/qa/Gemfile.lock
+++ b/qa/Gemfile.lock
@@ -41,7 +41,7 @@ GEM
capybara-screenshot (1.0.23)
capybara (>= 1.0, < 4)
launchy
- chemlab (0.7.2)
+ chemlab (0.8.0)
colorize (~> 0.8)
i18n (~> 1.8)
rake (>= 12, < 14)
@@ -135,7 +135,7 @@ GEM
rack-test (1.1.0)
rack (>= 1.0, < 3)
rake (12.3.3)
- regexp_parser (1.8.2)
+ regexp_parser (2.1.1)
require_all (3.0.0)
rest-client (2.1.0)
http-accept (>= 1.7.0, < 2.0)
@@ -174,7 +174,7 @@ GEM
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
- selenium-webdriver (4.0.0.beta4)
+ selenium-webdriver (4.0.0.rc1)
childprocess (>= 0.5, < 5.0)
rexml (~> 3.2)
rubyzip (>= 1.2.2)
@@ -216,7 +216,7 @@ DEPENDENCIES
allure-rspec (~> 2.14.5)
capybara (~> 3.35.0)
capybara-screenshot (~> 1.0.23)
- chemlab (~> 0.7)
+ chemlab (~> 0.8)
chemlab-library-www-gitlab-com (~> 0.1)
deprecation_toolkit (~> 1.5.1)
faker (~> 2.19, >= 2.19.0)
@@ -235,7 +235,7 @@ DEPENDENCIES
rspec-retry (~> 0.6.1)
rspec_junit_formatter (~> 0.4.1)
ruby-debug-ide (~> 0.7.0)
- selenium-webdriver (~> 4.0.0.beta4)
+ selenium-webdriver (~> 4.0.0.rc1)
timecop (~> 0.9.1)
webdrivers (~> 4.6)
zeitwerk (~> 2.4)
diff --git a/qa/chemlab-library-gitlab.gemspec b/qa/chemlab-library-gitlab.gemspec
index 908aad01850..d42d0e5e926 100644
--- a/qa/chemlab-library-gitlab.gemspec
+++ b/qa/chemlab-library-gitlab.gemspec
@@ -4,7 +4,7 @@ $:.unshift(File.expand_path('lib', __dir__))
Gem::Specification.new do |spec|
spec.name = 'chemlab-library-gitlab'
- spec.version = '0.1.1'
+ spec.version = '0.2.0'
spec.authors = ['GitLab Quality']
spec.email = ['quality@gitlab.com']
@@ -18,5 +18,5 @@ Gem::Specification.new do |spec|
spec.require_paths = ['lib']
- spec.add_runtime_dependency 'chemlab', '~> 0.7'
+ spec.add_runtime_dependency 'chemlab', '~> 0.8'
end
diff --git a/qa/lib/gitlab.rb b/qa/lib/gitlab.rb
index d0d1d535114..5b5c8805868 100644
--- a/qa/lib/gitlab.rb
+++ b/qa/lib/gitlab.rb
@@ -1,7 +1,11 @@
# frozen_string_literal: true
+require 'chemlab/library'
+
# Chemlab Page Libraries for GitLab
module Gitlab
+ include Chemlab::Library
+
module Page
module Main
autoload :Login, 'gitlab/page/main/login'
diff --git a/qa/qa/page/component/web_ide/web_terminal_panel.rb b/qa/qa/page/component/web_ide/web_terminal_panel.rb
new file mode 100644
index 00000000000..80f83bcff7c
--- /dev/null
+++ b/qa/qa/page/component/web_ide/web_terminal_panel.rb
@@ -0,0 +1,63 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ module WebIDE
+ module WebTerminalPanel
+ extend QA::Page::PageConcern
+
+ def self.prepended(base)
+ super
+
+ base.class_eval do
+ view 'app/assets/javascripts/ide/components/panes/collapsible_sidebar.vue' do
+ element :ide_right_sidebar, %q(:data-qa-selector="`ide_${side}_sidebar`") # rubocop:disable QA/ElementWithPattern
+ end
+
+ view 'app/assets/javascripts/ide/components/ide_sidebar_nav.vue' do
+ element :terminal_tab_button, %q(:data-qa-selector="`${tab.title.toLowerCase()}_tab_button`") # rubocop:disable QA/ElementWithPattern
+ end
+
+ view 'app/assets/javascripts/ide/components/terminal/empty_state.vue' do
+ element :start_web_terminal_button
+ end
+
+ view 'app/assets/javascripts/ide/components/terminal/terminal.vue' do
+ element :loading_container
+ element :terminal_screen
+ end
+ end
+ end
+
+ def has_finished_loading?
+ has_no_element?(:loading_container, wait: QA::Support::Repeater::DEFAULT_MAX_WAIT_TIME)
+ end
+
+ def has_terminal_screen?
+ wait_until(reload: false) do
+ within_element :terminal_screen do
+ # The DOM initially just includes the :terminal_screen element
+ # and then the xterm package dynamically loads when the user
+ # clicks the Start Web Terminal button. If it loads succesfully
+ # an element with the class `xterm` is added to the DOM.
+ # The xterm is a third-party library, so we can't add a selector
+ find(".xterm")
+ end
+ end
+ end
+
+ def start_web_terminal
+ within_element :ide_right_sidebar do
+ click_element :terminal_tab_button
+ end
+
+ click_element :start_web_terminal_button
+
+ has_element? :loading_container, text: "Starting"
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/project/web_ide/edit.rb b/qa/qa/page/project/web_ide/edit.rb
index 78b2db7d723..9c0a3ab691c 100644
--- a/qa/qa/page/project/web_ide/edit.rb
+++ b/qa/qa/page/project/web_ide/edit.rb
@@ -6,6 +6,7 @@ module QA
module WebIDE
class Edit < Page::Base
prepend Page::Component::WebIDE::Alert
+ prepend Page::Component::WebIDE::WebTerminalPanel
include Page::Component::DropdownFilter
view 'app/assets/javascripts/ide/components/activity_bar.vue' do
@@ -330,5 +331,3 @@ module QA
end
end
end
-
-QA::Page::Project::WebIDE::Edit.prepend_mod_with('Page::Component::WebIDE::WebTerminalPanel', namespace: QA)
diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb
new file mode 100644
index 00000000000..51791c01048
--- /dev/null
+++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/web_terminal_spec.rb
@@ -0,0 +1,84 @@
+# frozen_string_literal: true
+
+module QA
+ RSpec.describe(
+ 'Create',
+ :runner,
+ quarantine: {
+ issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/338179',
+ type: :bug
+ }
+ ) do
+ describe 'Web IDE web terminal' do
+ before do
+ project = Resource::Project.fabricate_via_api! do |project|
+ project.name = 'web-terminal-project'
+ end
+
+ Resource::Repository::Commit.fabricate_via_api! do |commit|
+ commit.project = project
+ commit.commit_message = 'Add .gitlab/.gitlab-webide.yml'
+ commit.add_files(
+ [
+ {
+ file_path: '.gitlab/.gitlab-webide.yml',
+ content: <<~YAML
+ terminal:
+ tags: ["web-ide"]
+ script: sleep 60
+ YAML
+ }
+ ]
+ )
+ end
+
+ @runner = Resource::Runner.fabricate_via_api! do |runner|
+ runner.project = project
+ runner.name = "qa-runner-#{Time.now.to_i}"
+ runner.tags = %w[web-ide]
+ runner.image = 'gitlab/gitlab-runner:latest'
+ runner.config = <<~END
+ concurrent = 1
+
+ [session_server]
+ listen_address = "0.0.0.0:8093"
+ advertise_address = "localhost:8093"
+ session_timeout = 120
+ END
+ end
+
+ Flow::Login.sign_in
+
+ project.visit!
+ end
+
+ after do
+ @runner.remove_via_api! if @runner
+ end
+
+ it 'user starts the web terminal', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1593' do
+ Page::Project::Show.perform(&:open_web_ide!)
+
+ # Start the web terminal and check that there were no errors
+ # The terminal screen is a canvas element, so we can't read its content,
+ # so we infer that it's working if:
+ # a) The terminal JS package has loaded, and
+ # b) It's not stuck in a "Loading/Starting" state, and
+ # c) There's no alert stating there was a problem
+ #
+ # The terminal itself is a third-party package so we assume it is
+ # adequately tested elsewhere.
+ #
+ # There are also FE specs
+ # * spec/frontend/ide/components/terminal/terminal_controls_spec.js
+ Page::Project::WebIDE::Edit.perform do |edit|
+ edit.start_web_terminal
+
+ expect(edit).to have_no_alert
+ expect(edit).to have_finished_loading
+ expect(edit).to have_terminal_screen
+ end
+ end
+ end
+ end
+end