@@ -47,7 +47,22 @@ class SearchControllerTest < ActionDispatch::IntegrationTest
4747 assert_select 'input#advanced-locations' , { count : 1 }
4848 assert_select 'input#advanced-subjects' , { count : 1 }
4949 assert_select 'input#advanced-title' , { count : 1 }
50- assert_select 'select#advanced-source' , { count : 1 }
50+ assert_select 'input.source' , { minimum : 3 }
51+ end
52+
53+ test 'advanced search source checkboxes can be controlled by env' do
54+ get '/'
55+ assert_select 'input.source' , { minimum : 3 }
56+
57+ ClimateControl . modify TIMDEX_SOURCES : 'HIGHLANDER' do
58+ get '/'
59+ assert_select 'input.source' , { count : 1 }
60+ end
61+
62+ ClimateControl . modify TIMDEX_SOURCES : 'SITH,LORDS' do
63+ get '/'
64+ assert_select 'input.source' , { count : 2 }
65+ end
5166 end
5267
5368 test 'results with no query redirects with info' do
@@ -305,4 +320,63 @@ class SearchControllerTest < ActionDispatch::IntegrationTest
305320 assert_select 'li' , 'Source: sauce'
306321 end
307322 end
323+
324+ def source_facet_count ( controller )
325+ controller . view_context . assigns [ 'facets' ] [ 'source' ] . count
326+ end
327+
328+ test 'advanced search can limit to a single source' do
329+ VCR . use_cassette ( 'advanced source limit to one source' ,
330+ allow_playback_repeats : true ,
331+ match_requests_on : %i[ method uri body ] ) do
332+ query = {
333+ q : 'data' ,
334+ advanced : 'true' ,
335+ source : [ 'dspace@mit' ]
336+ } . to_query
337+ get "/results?#{ query } "
338+ assert_response :success
339+ assert_nil flash [ :error ]
340+
341+ assert ( source_facet_count ( @controller ) == 1 )
342+ end
343+ end
344+
345+ test 'advanced search defaults to all sources' do
346+ VCR . use_cassette ( 'advanced source defaults to all' ,
347+ allow_playback_repeats : true ,
348+ match_requests_on : %i[ method uri body ] ) do
349+ query = {
350+ q : 'data' ,
351+ advanced : 'true'
352+ } . to_query
353+ get "/results?#{ query } "
354+ assert_response :success
355+ assert_nil flash [ :error ]
356+
357+ # Assumption is we'll always have at least 3 default sources
358+ # DSpace, Aspace, Aleph (RDI sources are in now, but may not be default later)
359+ assert ( source_facet_count ( @controller ) > 3 )
360+ end
361+ end
362+
363+ test 'advanced search can limit to multiple sources' do
364+ VCR . use_cassette ( 'advanced source limit to two sources' ,
365+ allow_playback_repeats : true ,
366+ match_requests_on : %i[ method uri body ] ) do
367+ # NOTE: when regenerating cassettes, if the source data does not have these
368+ # sources you may need to change the source array below to two sources that are
369+ # valid in the current available data.
370+ query = {
371+ q : 'data' ,
372+ advanced : 'true' ,
373+ source : [ 'dspace@mit' , 'Woods Hole Open Access Server' ]
374+ } . to_query
375+ get "/results?#{ query } "
376+ assert_response :success
377+ assert_nil flash [ :error ]
378+
379+ assert ( source_facet_count ( @controller ) == 2 )
380+ end
381+ end
308382end
0 commit comments