require 'rails_helper' RSpec.feature "Basic search", type: :feature, elasticsearch: true do before(:each) do @papers = FactoryGirl.create_list(:paper, 11) Paper.__elasticsearch__.refresh_index! end 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") end scenario "With empty query displays all documents" do visit search_path body: "leipzig" expect(page).to have_selector("ul#search_results") expect(page).to have_content("#{@papers.size} Dokumente in der Datenbank") end 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") end 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") end end scenario "Search results have basic information" do visit search_path body: "leipzig" paper = @papers.first result = page.find("li.search-result", match: :first) expect(result).to have_link(paper.name, href: paper.url) expect(result).to have_css("span.paper_type", text: paper.paper_type) expect(result).to have_css("span.originator", text: paper.originator) expect(result).to have_css("span.published", text: I18n.l(paper.published_at.to_date)) end scenario "Finds papers by name" do paper = FactoryGirl.create(:paper, name: "Opendata als default") Paper.__elasticsearch__.refresh_index! visit search_path body: "leipzig", paper_search: {query: "Opendata"} expect(page).to have_content("1 Dokument in der Datenbank") result = page.find("li.search-result", match: :first) expect(result).to have_link(paper.name, href: paper.url) end scenario "Finds papers by content" do paper = FactoryGirl.create(:paper, name: "Opendata als default", content: "Alle Verwaltungsdokumente werden als Opendata veröffentlicht" ) Paper.__elasticsearch__.refresh_index! visit search_path body: "leipzig", paper_search: {query: "Verwaltungsdokumente"} expect(page).to have_content("1 Dokument in der Datenbank") result = page.find("li.search-result", match: :first) expect(result).to have_link(paper.name, href: paper.url) end end