stadtratmonitor/spec/features/basic_search_spec.rb

239 lines
11 KiB
Ruby
Raw Normal View History

2020-03-09 11:27:52 +01:00
# frozen_string_literal: true
2016-02-19 08:22:36 +01:00
require 'rails_helper'
require 'pp'
2016-02-19 08:22:36 +01:00
2020-03-09 11:27:52 +01:00
RSpec.feature 'Basic search', type: :feature, elasticsearch: true do
2016-02-20 07:48:01 +01:00
before(:each) do
@papers = FactoryBot.create_list(:paper, 11)
2016-02-20 07:48:01 +01:00
Paper.__elasticsearch__.refresh_index!
end
2020-03-09 11:27:52 +01:00
scenario 'It displays the search form' do
visit search_path body: 'leipzig'
expect(page).to have_content('Stadtratmonitor')
expect(page).to have_field('paper_search_query')
expect(page).to have_select('Typ')
expect(page).to have_select('Einreicher')
expect(page).to have_selector('label', text: 'Sortierung')
expect(page).to have_field('paper_search_sort_by_date', type: 'radio')
expect(page).to have_field('paper_search_sort_by_score', type: 'radio')
2016-02-19 08:22:36 +01:00
end
2020-03-09 11:27:52 +01:00
scenario 'With empty query displays all documents' do
visit search_path body: 'leipzig'
expect(page).to have_selector('ul#search_results')
2016-02-20 07:48:01 +01:00
expect(page).to have_content("#{@papers.size} Dokumente in der Datenbank")
2016-02-19 08:22:36 +01:00
end
2020-03-09 11:27:52 +01:00
scenario 'Search results are paginated' do
visit search_path body: 'leipzig'
expect(page).to have_css('li.search-result', count: 10)
expect(page).to have_css('div#pagination')
within('div#pagination') do
expect(page).to have_css('li', count: 4) # two pages + next + last
expect(page).to have_css('li.current', text: '1')
expect(page).to have_link('2')
expect(page).to have_link('Weiter')
expect(page).to have_link('Ende')
2016-02-24 11:39:12 +01:00
end
2020-03-09 11:27:52 +01:00
page.find('div#pagination').click_link('2')
expect(page).to have_css('li.search-result', count: 1)
within('div#pagination') do
expect(page).to have_css('li.current', text: '2')
2016-02-24 11:39:12 +01:00
end
end
2020-03-09 11:27:52 +01:00
scenario 'Search results have basic information' do
visit search_path body: 'leipzig'
paper = @papers.first
2020-03-09 11:27:52 +01:00
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
2020-03-09 11:27:52 +01:00
resultSubEntry = resultEntry.find('li.current', match: :first)
linkName = getLinkName(paper)
expect(resultSubEntry).to have_link(linkName, href: paper.url)
end
def getLinkName(paper)
dateStr = I18n.l(paper.published_at.to_date)
2020-03-09 11:27:52 +01:00
originatorStr = (paper.originator.is_a?(Array) ?
paper.originator.join(', ') : paper.originator)
"#{dateStr}: #{paper.paper_type} von #{originatorStr}"
end
2020-03-09 11:27:52 +01:00
scenario 'Finds papers by name' do
paper = FactoryBot.create(:paper, name: 'Opendata als default')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Opendata' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
2020-03-09 11:27:52 +01:00
resultSubEntry = resultEntry.find('li.current', match: :first)
linkName = getLinkName(paper)
expect(resultSubEntry).to have_link(linkName, href: paper.url)
end
2020-03-09 11:27:52 +01:00
scenario 'Finds papers by content' do
paper = FactoryBot.create(:paper,
2020-03-09 11:27:52 +01:00
name: 'Opendata als default',
content: 'Alle Verwaltungsdokumente werden als Opendata veröffentlicht')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Verwaltungsdokumente' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
2020-03-09 11:27:52 +01:00
resultSubEntry = resultEntry.find('li.current', match: :first)
linkName = getLinkName(paper)
expect(resultSubEntry).to have_link(linkName, href: paper.url)
end
2020-03-09 11:27:52 +01:00
scenario 'Papers with common reference id in search result ordered by date' do
mainPaper = FactoryBot.create(:paper, published_at: '2016-12-19T19:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als default', reference: 'VI-0815')
newPaper = FactoryBot.create(:paper, published_at: '2016-12-23T12:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als optional', reference: 'VI-0815-ÄA-01')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'default' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(mainPaper.name)
2020-03-09 11:27:52 +01:00
resultSubEntry1 = resultEntry.find('li.current', match: :first)
linkName1 = getLinkName(mainPaper)
expect(resultSubEntry1).to have_link(linkName1, href: mainPaper.url)
2020-03-09 11:27:52 +01:00
resultSubEntries = resultEntry.find('ul').all('li')
linkName2 = getLinkName(newPaper)
2019-10-27 14:34:49 +01:00
expect(resultSubEntries[0]).to have_link(linkName2, href: newPaper.url)
expect(resultSubEntries[1]).to have_link(linkName1, href: mainPaper.url)
end
2020-03-09 11:27:52 +01:00
scenario 'Papers with common reference id in search result ordered by ref' do
mainPaper = FactoryBot.create(:paper, published_at: '2016-12-19T19:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als default', reference: 'VI-0815')
newPaper1 = FactoryBot.create(:paper, published_at: '2016-12-23T12:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als optional', reference: 'VI-0815-ÄA-02')
newPaper2 = FactoryBot.create(:paper, published_at: '2016-12-23T12:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als optional', reference: 'VI-0815-ÄA-01')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'default' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
2020-03-09 11:27:52 +01:00
resultSubEntries = resultEntry.find('ul').all('li')
linkName1 = getLinkName(newPaper1)
2019-10-27 14:34:49 +01:00
expect(resultSubEntries[0]).to have_link(linkName1, href: newPaper1.url)
linkName2 = getLinkName(newPaper2)
expect(resultSubEntries[1]).to have_link(linkName2, href: newPaper2.url)
2019-10-27 14:34:49 +01:00
linkName3 = getLinkName(mainPaper)
expect(resultSubEntries[2]).to have_link(linkName3, href: mainPaper.url)
end
2020-03-09 11:27:52 +01:00
scenario 'Papers with common reference id handled also for missing prefix' do
mainPaper = FactoryBot.create(:paper, published_at: '2016-12-19T19:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als default', reference: 'VI-0815')
newPaper1 = FactoryBot.create(:paper, published_at: '2016-12-23T12:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als optional', reference: 'VI-0815-NF-01')
newPaper1Change = FactoryBot.create(:paper, published_at: '2016-12-23T12:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als nicht optional', reference: '-0815-NF-01-ÄA-01')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'default' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
2020-03-09 11:27:52 +01:00
resultSubEntries = resultEntry.find('ul').all('li')
linkName1 = getLinkName(newPaper1)
2019-10-27 14:34:49 +01:00
expect(resultSubEntries[0]).to have_link(linkName1, href: newPaper1.url)
linkName2 = getLinkName(newPaper1Change)
expect(resultSubEntries[1]).to have_link(linkName2, href: newPaper1Change.url)
2019-10-27 14:34:49 +01:00
linkName3 = getLinkName(mainPaper)
expect(resultSubEntries[2]).to have_link(linkName3, href: mainPaper.url)
end
scenario "Finds 'Testen' with search 'Test'" do
2020-03-09 11:27:52 +01:00
paper = FactoryBot.create(:paper, name: 'Testen')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Test' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
end
scenario "Finds 'Test' with search 'Testen'" do
2020-03-09 11:27:52 +01:00
paper = FactoryBot.create(:paper, name: 'Test')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Testen' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
end
scenario "Finds 'Fahrräderverleih' with search 'Fahrrad'" do
2020-03-09 11:27:52 +01:00
paper = FactoryBot.create(:paper, name: 'Fahrräderverleih')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Fahrrad' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
end
scenario "Finds 'Fahrräderverleih' with search 'Fahrräder'" do
2020-03-09 11:27:52 +01:00
paper = FactoryBot.create(:paper, name: 'Fahrräderverleih')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Fahrräder' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
end
scenario "Finds 'Fahrräderverleih' with search 'Verleih'" do
2020-03-09 11:27:52 +01:00
paper = FactoryBot.create(:paper, name: 'Fahrräderverleih')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Verleih' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
end
scenario "Finds 'Fahrräderverleih' with search 'Autoverleih'" do
2020-03-09 11:27:52 +01:00
paper = FactoryBot.create(:paper, name: 'Fahrräderverleih')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Autoverleih' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
expect(resultEntry).to have_content(paper.name)
end
scenario "Finds no 'Fahrrad' with search 'Rad'" do
2020-03-09 11:27:52 +01:00
paper = FactoryBot.create(:paper, name: 'Fahrrad')
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'Rad' }
expect(page).to have_content('0 Dokumente in der Datenbank')
end
2020-03-09 11:27:52 +01:00
scenario 'Papers with reference id having slash is escaped' do
mainPaper = FactoryBot.create(:paper, published_at: '2016-12-19T19:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als default', reference: 'VI-00768/14')
newPaper = FactoryBot.create(:paper, published_at: '2016-12-23T12:00:00',
2020-03-09 11:27:52 +01:00
name: 'Opendata als optional', reference: 'VI-00768/14-ÄA-01')
2018-02-18 23:26:30 +01:00
Paper.__elasticsearch__.refresh_index!
2020-03-09 11:27:52 +01:00
visit search_path body: 'leipzig', paper_search: { query: 'default' }
expect(page).to have_content('1 Dokument in der Datenbank')
resultEntry = page.find('li.search-result', match: :first)
2018-02-18 23:26:30 +01:00
expect(resultEntry).to have_content(mainPaper.name)
2020-03-09 11:27:52 +01:00
resultSubEntry1 = resultEntry.find('li.current', match: :first)
2018-02-18 23:26:30 +01:00
linkName1 = getLinkName(mainPaper)
expect(resultSubEntry1).to have_link(linkName1, href: mainPaper.url)
2020-03-09 11:27:52 +01:00
resultSubEntries = resultEntry.find('ul').all('li')
2018-02-18 23:26:30 +01:00
linkName2 = getLinkName(newPaper)
2019-10-27 14:34:49 +01:00
expect(resultSubEntries[0]).to have_link(linkName2, href: newPaper.url)
expect(resultSubEntries[1]).to have_link(linkName1, href: mainPaper.url)
2018-02-18 23:26:30 +01:00
end
2016-02-19 08:22:36 +01:00
end