# Copyright 2011-2013 innoQ Deutschland GmbH # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require File.join(File.expand_path(File.dirname(__FILE__)), '../integration_test_helper') class SearchTest < ActionDispatch::IntegrationTest setup do @pagination_setting = Kaminari.config.default_per_page Kaminari.config.default_per_page = 5 @concepts = %w("Tree"@en "Forest"@en).map do |literal| Concept::SKOS::Base.new.tap do |c| RDFAPI.devour c, 'skos:prefLabel', literal c.publish c.save end end @collection = Collection::SKOS::Unordered.new.tap do |c| RDFAPI.devour c, 'skos:prefLabel', '"Alpha"@en' c.publish c.save end # assign concepts to collection @concepts.each do |c| RDFAPI.devour @collection, 'skos:member', c end end teardown do Kaminari.config.default_per_page = @pagination_setting end test 'searching' do visit search_path(lang: 'en', format: 'html') [{ type: 'Labels', query: 'Forest', query_type: 'contains', amount: 1, result: 'Forest' }].each { |q| find('#t').select q[:type] fill_in 'Search term(s)', with: q[:query] find('#qt').select q[:query_type] # select all languages page.all(:css, '.lang_check').each do |cb| check cb[:id] end click_button('Search') assert page.has_css?('.search-result', count: q[:amount]), "Page has #{page.all(:css, '.search-result').count} '.search-result' nodes. Should be #{q[:amount]}." within('.search-result') do assert page.has_content?(q[:result]), "Could not find '#{q[:result]}' within '.search-result'." end } end test 'collection/concept filter' do visit search_path(lang: 'en', format: 'html') find('#t').select 'Labels' find('#qt').select 'contains' fill_in 'Search term(s)', with: 'Alpha' click_button('Search') assert page.has_css?('.search-result', count: 1) choose 'Concepts' click_button 'Search' assert page.has_no_css?('.search-result') choose 'Collections' click_button 'Search' assert page.has_css?('.search-result') end test 'date filter' do login 'administrator' visit new_concept_path(lang: 'en', format: 'html', published: 0) fill_in 'concept_labelings_by_text_labeling_skos_pref_labels_en', with: 'Water' click_button 'Save' visit new_concept_path(lang: 'en', format: 'html', published: 0) fill_in 'concept_labelings_by_text_labeling_skos_pref_labels_en', with: 'Air' click_button 'Save' Iqvoc::Concept.base_class.third.update_attributes published_at: Date.today Iqvoc::Concept.base_class.fourth.update_attributes published_at: Date.today Note::Annotated::Base.where(predicate: "created").first.update_attributes value: (Date.today - 10.days).to_s visit search_path(lang: 'en', format: 'html') find('#t').select 'Labels' find('#change_note_type').select 'creation date' fill_in 'change_note_date_from', with: Date.today click_button('Search') refute page.find('.search-results').has_content?('Water') assert page.find('.search-results').has_content?('Air') end test 'searching within collections' do visit search_path(lang: 'en', format: 'html') find('#t').select 'Labels' find('#qt').select 'contains' fill_in 'Search term(s)', with: 'res' find('#c').select @collection.to_s # select all languages page.all(:css, '.lang_check').each do |cb| check cb[:id] end click_button('Search') assert page.has_css?('.search-result', count: 1) assert page.find('.search-results').has_content?('Forest') # TTL & RDF/XML ttl_uri = page.find('#rdf_link_ttl')[:href] xml_uri = page.find('#rdf_link_xml')[:href] visit ttl_uri assert page.has_content?('search:result1 a sdc:Result') assert page.has_no_content?('search:result2 a sdc:Result') assert page.has_content?("sdc:link :#{@concepts[1].origin}") assert page.has_content?('skos:prefLabel "Forest"@en') visit xml_uri assert page.source.include?(@concepts[1].origin) assert page.source.include?("#{@concepts[1].to_s}") end test 'searching specific classes within collections' do concept = Concept::SKOS::Base.new.tap do |c| RDFAPI.devour c, 'skos:definition', '"lorem ipsum"@en' c.publish c.save end RDFAPI.devour @collection, 'skos:member', concept visit search_path(lang: 'en', format: 'html') find('#t').select 'Notes' find('#qt').select 'contains' fill_in 'Search term(s)', with: 'ipsum' find('#c').select @collection.to_s # select all languages page.all(:css, '.lang_check').each do |cb| check cb[:id] end click_button('Search') assert page.has_css?('.search-result', count: 1) assert page.find('.search-results').has_content?(concept.pref_label.to_s) end test 'empty query with selected collection should return all collection members' do visit search_path(lang: 'en', format: 'html') find('#t').select 'Labels' find('#qt').select 'exact match' fill_in 'Search term(s)', with: '' find('#c').select @collection.to_s # select all languages page.all(:css, '.lang_check').each do |cb| check cb[:id] end click_button('Search') assert page.has_css?('.search-result', count: 2) assert page.find('.search-results').has_content?('Tree') assert page.find('.search-results').has_content?('Forest') end test 'pagination' do # create a large number of concepts 1.upto(12) do |i| Concept::SKOS::Base.new.tap do |c| RDFAPI.devour c, 'skos:prefLabel', "\"sample_#{sprintf('_%04d', i)}\"@en" c.publish c.save end end visit search_path(lang: 'en', format: 'html') find('#t').select 'Labels' find('#qt').select 'contains' fill_in 'Search term(s)', with: 'sample_' click_button('Search') assert page.has_css?('.search-result', count: 5) assert page.has_css?('.pagination .page', count: 3) find('.pagination').all('.page').last.find('a').click assert page.has_css?('.search-result', count: 2) # TTL & RDF/XML ttl_uri = page.find('#rdf_link_ttl')[:href] xml_uri = page.find('#rdf_link_xml')[:href] visit ttl_uri assert page.has_content?('sdc:totalResults 12;') assert page.has_content?('sdc:itemsPerPage 5;') assert page.has_content?('search:result1 a sdc:Result;') assert page.has_content?('search:result2 a sdc:Result;') assert page.has_no_content?('search:result3 a sdc:Result;') # we're on page 3/3 visit xml_uri assert page.source.include?('12') assert page.source.include?('5') assert page.source.include?('#result1">') assert page.source.include?('#result2">') assert !page.source.include?('#result3">') # we're on page 3/3 end end