152 lines
3.3 KiB
Ruby
152 lines
3.3 KiB
Ruby
# 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_tab_selector(mode)
|
|
".js-ide-#{mode}-mode"
|
|
end
|
|
|
|
def ide_folder_row_open?(row)
|
|
row.matches_css?('.folder.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_folder_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_tab_selector
|
|
ide_tab_selector('commit')
|
|
end
|
|
|
|
def ide_commit
|
|
find(ide_commit_tab_selector).click
|
|
|
|
commit_to_current_branch
|
|
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
|