Fix feature tests for new global project selection

This commit is contained in:
Henriette Darge
2022-06-24 13:31:55 +02:00
parent 3438765772
commit 13f8712a98
8 changed files with 50 additions and 66 deletions
@@ -27,13 +27,13 @@
</div>
<div
class="op-project-list-modal--body spot-container"
data-qa-selector="op-project-menu-autocomplete--body"
>
<spot-text-field
[disabled]="(loading$ | async)"
[placeholder]="text.search_placeholder"
[(ngModel)]="searchableProjectListService.searchText"
[ngModelOptions]="{standalone: true}"
data-qa-selector="op-project-menu-autocomplete--search"
>
<span
slot="before"
@@ -43,7 +43,7 @@ export class OpSearchHighlightDirective implements AfterViewChecked {
const end = content.slice(startIndex + query.length);
const newNode = document.createElement('span');
newNode.innerHTML = `${start}<span class="op-search-highlight">${result}</span>${end}`;
newNode.innerHTML = `${_.escape(start)}<span class="op-search-highlight">${_.escape(result)}</span>${_.escape(end)}`;
el.replaceChild(newNode, textNode);
}
+1 -1
View File
@@ -69,7 +69,7 @@ describe 'project menu', type: :feature do
it 'leads to cost reports' do
click_on 'Time and costs'
expect(page).to have_selector('.op-app-menu--item-title', text: 'Ponyo')
expect(page).to have_current_path("/projects/ponyo/cost_reports")
end
end
@@ -124,7 +124,7 @@ describe 'Top menu items', js: true, selenium: true do
end
it 'visits the projects page' do
click_link_in_open_menu(all_projects)
page.find_link(all_projects).click
expect(page).to have_current_path(projects_path)
end
@@ -60,7 +60,7 @@ describe 'onboarding tour for new users', js: true do
select 'Deutsch', from: 'user_language'
click_button 'Save'
expect(page).to have_text 'Projekt auswählen'
expect(page).to have_text "Neueste sichtbare Projekte in dieser Instanz."
end
context 'the tutorial does not start' do
@@ -91,63 +91,49 @@ describe 'Projects autocomplete page', type: :feature, js: true do
top_menu.expect_open
# projects are displayed initially
within(top_menu.search_results) do
expect(page).to have_selector('.ui-menu-item-wrapper', text: project.name)
# public project is displayed as it is public
expect(page).to have_selector('.ui-menu-item-wrapper', text: public_project.name)
# only projects the user is member in are displayed
expect(page).to have_no_selector('.ui-menu-item-wrapper', text: non_member_project.name)
end
top_menu.expect_result project.name
# public project is displayed as it is public
top_menu.expect_result public_project.name
# only projects the user is member in are displayed
top_menu.expect_no_result non_member_project.name
# Filter for projects
top_menu.search '<strong'
# Expect highlights
within(top_menu.search_results) do
expect(page).to have_selector('mark', text: '<strong')
expect(page).to have_selector('.op-search-highlight', text: '<strong')
expect(page).to have_no_selector('strong')
end
# Expect fuzzy matches for plain
top_menu.search 'Plain pr'
within(top_menu.search_results) do
expect(page).to have_selector('.ui-menu-item-wrapper', text: 'Plain project')
expect(page).to have_no_selector('.ui-menu-item-wrapper', text: 'Plain other project')
end
top_menu.expect_result 'Plain project'
top_menu.expect_no_result 'Plain other project'
# Expect hierarchy
top_menu.clear_search
within(top_menu.search_results) do
expect(page).to have_selector('.ui-menu-item-wrapper', text: 'Plain project')
expect(page).to have_selector('.ui-menu-item-wrapper', text: '<strong>foobar</strong>')
expect(page).to have_selector('.ui-menu-item-wrapper', text: '» Plain other project')
end
top_menu.expect_result 'Plain project'
top_menu.expect_result '<strong>foobar</strong>'
top_menu.expect_item_with_hierarchy_level hierarchy_level: 2, item_name: 'Plain other project'
# Show hierarchy of project
top_menu.search 'Plain other project'
within(top_menu.search_results) do
expect(page).to have_selector('.ui-state-disabled .ui-menu-item-wrapper', text: '<strong>foobar</strong>')
expect(page).to have_selector('.ui-menu-item-wrapper.ui-state-active', text: '» Plain other project')
end
# TODO: test for foobar being disabled
top_menu.expect_result '<strong>foobar</strong>'
top_menu.expect_item_with_hierarchy_level hierarchy_level: 2, item_name: 'Plain other project'
# find terms at the end of project names
top_menu.search 'END'
within(top_menu.search_results) do
expect(page).to have_selector(
'.ui-menu-item-wrapper',
text: 'Very long project name with term at the END'
)
end
top_menu.expect_result 'Very long project name with term at the END'
# Find literal matches exclusively if present
top_menu.search 'INK15'
within(top_menu.search_results) do
expect(page).to have_selector('.ui-menu-item-wrapper', text: 'INK15 - Bar')
expect(page).to have_no_selector('.ui-menu-item-wrapper', text: 'INK14 - Foo')
expect(page).to have_no_selector('.ui-menu-item-wrapper', text: 'INK16 - Baz')
end
top_menu.expect_result 'INK15 - Bar'
top_menu.expect_no_result 'INK14 - Foo'
top_menu.expect_no_result 'INK16 - Baz'
# Visit a project
top_menu.search_and_select '<strong'
+27 -3
View File
@@ -51,7 +51,7 @@ module Components
end
def search(query)
search_autocomplete(autocompleter, query:)
search_autocomplete(autocompleter, query:, results_selector: autocompleter_results_selector)
end
def clear_search
@@ -62,7 +62,7 @@ module Components
def search_and_select(query)
select_autocomplete autocompleter,
results_selector: autocompleter_results_selector,
item_selector: autocompleter_item_selector,
item_selector: autocompleter_item_title_selector,
query:
end
@@ -74,7 +74,31 @@ module Components
page.find autocompleter_selector
end
def expect_result(name)
within search_results do
expect(page).to have_selector(autocompleter_item_title_selector, text: name)
end
end
def expect_no_result(name)
within search_results do
expect(page).to have_no_selector(autocompleter_item_title_selector, text: name)
end
end
def expect_item_with_hierarchy_level(hierarchy_level:, item_name:)
within search_results do
hierarchy_selector = hierarchy_level.times.collect { autocompleter_item_selector }.join(' ')
expect(page)
.to have_selector("#{hierarchy_selector} #{autocompleter_item_title_selector}", text: item_name)
end
end
def autocompleter_item_selector
'[data-qa-selector="op-project-list--item"]'
end
def autocompleter_item_title_selector
'[data-qa-selector="op-project-list--item-title"]'
end
@@ -83,7 +107,7 @@ module Components
end
def autocompleter_selector
'[data-qa-selector="op-project-menu-autocomplete--body"]'
'[data-qa-selector="op-project-menu-autocomplete--search"] input'
end
end
end
-26
View File
@@ -50,32 +50,6 @@ describe 'layouts/base', type: :view do
allow(view).to receive(:current_user).and_return current_user
end
describe 'projects menu visibility' do
context 'when the user is not logged in' do
let(:current_user) { anonymous }
before do
render
end
it 'the projects menu should not be displayed' do
expect(rendered).not_to have_text('Select a project')
end
end
context 'when the user is logged in' do
let(:current_user) { user }
before do
render
end
it 'the projects menu should be displayed' do
expect(rendered).to have_text('Select a project')
end
end
end
describe 'Sign in button' do
let(:current_user) { anonymous }