debian-mirror-gitlab/spec/support/helpers/filtered_search_helpers.rb

153 lines
4.2 KiB
Ruby
Raw Normal View History

2017-08-17 22:00:37 +05:30
module FilteredSearchHelpers
def filtered_search
page.find('.filtered-search')
end
# Enables input to be set (similar to copy and paste)
def input_filtered_search(search_term, submit: true, extra_space: true)
search = search_term
if extra_space
# Add an extra space to engage visual tokens
search = "#{search_term} "
end
filtered_search.set(search)
if submit
2017-09-10 17:25:29 +05:30
# Wait for the lazy author/assignee tokens that
# swap out the username with an avatar and name
wait_for_requests
2017-08-17 22:00:37 +05:30
filtered_search.send_keys(:enter)
end
end
2018-05-09 12:01:36 +05:30
# Select a label clicking in the search dropdown instead
# of entering label names on the input.
def select_label_on_dropdown(label_title)
input_filtered_search("label:", submit: false)
within('#js-dropdown-label') do
wait_for_requests
find('li', text: label_title).click
end
filtered_search.send_keys(:enter)
end
def expect_issues_list_count(open_count, closed_count = 0)
all_count = open_count + closed_count
expect(page).to have_issuable_counts(open: open_count, closed: closed_count, all: all_count)
page.within '.issues-list' do
expect(page).to have_selector('.issue', count: open_count)
end
end
2017-08-17 22:00:37 +05:30
# Enables input to be added character by character
def input_filtered_search_keys(search_term)
# Add an extra space to engage visual tokens
filtered_search.send_keys("#{search_term} ")
filtered_search.send_keys(:enter)
end
def expect_filtered_search_input(input)
expect(find('.filtered-search').value).to eq(input)
end
def clear_search_field
find('.filtered-search-box .clear-search').click
end
def reset_filters
clear_search_field
filtered_search.send_keys(:enter)
end
def init_label_search
filtered_search.set('label:')
# This ensures the dropdown is shown
expect(find('#js-dropdown-label')).not_to have_css('.filter-dropdown-loading')
end
def expect_filtered_search_input_empty
expect(find('.filtered-search').value).to eq('')
end
# Iterates through each visual token inside
# .tokens-container to make sure the correct names and values are rendered
def expect_tokens(tokens)
2018-03-17 18:26:18 +05:30
page.within '.filtered-search-box .tokens-container' do
page.all(:css, '.tokens-container li .selectable').each_with_index do |el, index|
2017-08-17 22:00:37 +05:30
token_name = tokens[index][:name]
token_value = tokens[index][:value]
2018-03-17 18:26:18 +05:30
token_emoji = tokens[index][:emoji_name]
2017-08-17 22:00:37 +05:30
expect(el.find('.name')).to have_content(token_name)
2018-03-17 18:26:18 +05:30
2017-08-17 22:00:37 +05:30
if token_value
expect(el.find('.value')).to have_content(token_value)
end
2018-03-17 18:26:18 +05:30
# gl-emoji content is blank when the emoji unicode is not supported
if token_emoji
selector = %(gl-emoji[data-name="#{token_emoji}"])
expect(el.find('.value')).to have_css(selector)
end
2017-08-17 22:00:37 +05:30
end
end
end
2018-03-17 18:26:18 +05:30
def create_token(token_name, token_value = nil, symbol = nil)
{ name: token_name, value: "#{symbol}#{token_value}" }
end
def author_token(author_name = nil)
create_token('Author', author_name)
end
def assignee_token(assignee_name = nil)
create_token('Assignee', assignee_name)
end
def milestone_token(milestone_name = nil, has_symbol = true)
symbol = has_symbol ? '%' : nil
create_token('Milestone', milestone_name, symbol)
end
def label_token(label_name = nil, has_symbol = true)
symbol = has_symbol ? '~' : nil
create_token('Label', label_name, symbol)
end
2018-12-13 13:39:08 +05:30
def reaction_token(reaction_name = nil, is_emoji = true)
if is_emoji
{ name: 'My-Reaction', emoji_name: reaction_name }
else
create_token('My-Reaction', reaction_name)
end
2018-03-17 18:26:18 +05:30
end
2017-08-17 22:00:37 +05:30
def default_placeholder
'Search or filter results...'
end
def get_filtered_search_placeholder
find('.filtered-search')['placeholder']
end
def remove_recent_searches
2017-09-10 17:25:29 +05:30
execute_script('window.localStorage.clear();')
2017-08-17 22:00:37 +05:30
end
2017-09-10 17:25:29 +05:30
def set_recent_searches(key, input)
execute_script("window.localStorage.setItem('#{key}', '#{input}');")
2017-08-17 22:00:37 +05:30
end
def wait_for_filtered_search(text)
Timeout.timeout(Capybara.default_max_wait_time) do
loop until find('.filtered-search').value.strip == text
end
end
end