summaryrefslogtreecommitdiff
path: root/spec/support
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-04-14 03:09:39 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-04-14 03:09:39 +0000
commit52cacdb89bb29f355e0c3a33c3250ac2d3fea036 (patch)
tree106e4128d0b9e454f60287c9895fc2182e82db21 /spec/support
parent9398d718d92a40a0a917040645a55dea51467a91 (diff)
downloadgitlab-ce-52cacdb89bb29f355e0c3a33c3250ac2d3fea036.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/support')
-rw-r--r--spec/support/helpers/features/web_ide_spec_helpers.rb148
1 files changed, 148 insertions, 0 deletions
diff --git a/spec/support/helpers/features/web_ide_spec_helpers.rb b/spec/support/helpers/features/web_ide_spec_helpers.rb
new file mode 100644
index 00000000000..37c8345a4e5
--- /dev/null
+++ b/spec/support/helpers/features/web_ide_spec_helpers.rb
@@ -0,0 +1,148 @@
+# frozen_string_literal: true
+
+# These helpers help you interact within the Web IDE.
+#
+# Usage:
+# describe "..." do
+# include WebIdeSpecHelpers
+# ...
+#
+# ide_visit(project)
+# ide_create_new_file('path/to/file.txt', content: 'Lorem ipsum')
+# ide_commit
+#
+module WebIdeSpecHelpers
+ include ActionView::Helpers::JavaScriptHelper
+
+ def ide_visit(project)
+ visit project_path(project)
+
+ wait_for_requests
+
+ click_link('Web IDE')
+
+ wait_for_requests
+ end
+
+ def ide_tree_body
+ page.find('.ide-tree-body')
+ end
+
+ def ide_tree_actions
+ page.find('.ide-tree-actions')
+ end
+
+ def ide_file_row_open?(row)
+ row.matches_css?('.is-open')
+ end
+
+ # Creates a file in the IDE by expanding directories
+ # then using the dropdown next to the parent directory
+ #
+ # - Throws an error if the parent directory is not found
+ def ide_create_new_file(path, content: '')
+ parent_path = path.split('/')[0...-1].join('/')
+
+ container = ide_traverse_to_file(parent_path)
+
+ if container
+ click_file_action(container, 'New file')
+ else
+ ide_tree_actions.click_button('New file')
+ end
+
+ within '#ide-new-entry' do
+ find('input').fill_in(with: path)
+ click_button('Create file')
+ end
+
+ ide_set_editor_value(content)
+ end
+
+ # Deletes a file by traversing to `path`
+ # then clicking the 'Delete' action.
+ #
+ # - Throws an error if the file is not found
+ def ide_delete_file(path)
+ container = ide_traverse_to_file(path)
+
+ click_file_action(container, 'Delete')
+ end
+
+ # Opens parent directories until the file at `path`
+ # is exposed.
+ #
+ # - Returns a reference to the file row at `path`
+ # - Throws an error if the file is not found
+ def ide_traverse_to_file(path)
+ paths = path.split('/')
+ container = nil
+
+ paths.each_with_index do |path, index|
+ ide_open_file_row(container) if container
+ container = find_file_child(container, path, level: index)
+ end
+
+ container
+ end
+
+ def ide_open_file_row(row)
+ return if ide_file_row_open?(row)
+
+ row.click
+ end
+
+ def ide_set_editor_value(value)
+ editor = find('.monaco-editor')
+ uri = editor['data-uri']
+
+ execute_script("monaco.editor.getModel('#{uri}').setValue('#{escape_javascript(value)}')")
+ end
+
+ def ide_editor_value
+ editor = find('.monaco-editor')
+ uri = editor['data-uri']
+
+ evaluate_script("monaco.editor.getModel('#{uri}').getValue()")
+ end
+
+ def ide_commit
+ ide_switch_mode('commit')
+
+ commit_to_current_branch
+ end
+
+ def ide_switch_mode(mode)
+ find(".js-ide-#{mode}-mode").click
+ end
+
+ private
+
+ def file_row_container(row)
+ row ? row.find(:xpath, '..') : ide_tree_body
+ end
+
+ def find_file_child(row, name, level: nil)
+ container = file_row_container(row)
+ container.find(".file-row[data-level=\"#{level}\"]", text: name)
+ end
+
+ def click_file_action(row, text)
+ row.hover
+ dropdown = row.find('.ide-new-btn')
+ dropdown.find('button').click
+ dropdown.find('button', text: text).click
+ end
+
+ def commit_to_current_branch(option: 'Commit to master branch', message: '')
+ within '.multi-file-commit-form' do
+ fill_in('commit-message', with: message) if message
+
+ choose(option)
+
+ click_button('Commit')
+
+ wait_for_requests
+ end
+ end
+end