@@ -381,7 +381,8 @@ def setUp(self):
381381 self .user = None
382382 set_up (self )
383383
384- def test_filter_objects (self ):
384+ @patch ('pdf.views.pdf_views.OverviewMixin.advanced_search_filtering' )
385+ def test_filter_objects (self , mock_advanced_filtering ):
385386 # create some pdfs
386387 for i in range (1 , 15 ):
387388 pdf = Pdf .objects .create (collection = self .user .profile .current_collection , name = f'pdf_{ i % 5 } _{ i } ' )
@@ -404,11 +405,14 @@ def test_filter_objects(self):
404405 pdf_2 .tags .set (tags [2 :3 ])
405406 pdf_3 .tags .set (tags )
406407
407- response = self .client .get (f'{ reverse ('pdf_overview' )} ?search=pdf_&tags=programming/python' )
408+ response = self .client .get (
409+ f'{ reverse ('pdf_overview' )} ?search=pdf_&tags=programming/python&advanced_search=false'
410+ )
408411
409412 filtered_pdfs = pdf_views .OverviewMixin .filter_objects (response .wsgi_request )
410413
411414 self .assertEqual (sorted (list (filtered_pdfs ), key = lambda a : a .name ), [pdf_1 , pdf_2 ])
415+ mock_advanced_filtering .assert_not_called ()
412416
413417 def test_filter_objects_starred (self ):
414418 pdf_1 = Pdf .objects .create (
@@ -463,6 +467,18 @@ def test_filter_objects_archived(self):
463467
464468 self .assertEqual (list (filtered_pdfs ), [pdf_1 ])
465469
470+ @patch ('pdf.views.pdf_views.OverviewMixin.advanced_search_filtering' )
471+ def test_filter_objects_advanced (self , mock_advanced_filtering ):
472+ pdf_1 = Pdf .objects .create (collection = self .user .profile .current_collection , name = 'pdf_to_be_found' )
473+ Pdf .objects .create (collection = self .user .profile .current_collection , name = 'pdf_not_to_be_found' )
474+
475+ mock_advanced_filtering .return_value = self .user .profile .current_pdfs .filter (name = 'pdf_to_be_found' )
476+ response = self .client .get (f'{ reverse ('pdf_overview' )} ?advanced_search=true' )
477+
478+ filtered_pdfs = pdf_views .OverviewMixin .filter_objects (response .wsgi_request )
479+ assert filtered_pdfs .count () == 1
480+ assert filtered_pdfs .first () == pdf_1
481+
466482 def test_fuzzy_filter_pdfs (self ):
467483 Pdf .objects .create (collection = self .user .profile .current_collection , name = 'pdf_not_to_be_found' )
468484 pdf_self_hosted = Pdf .objects .create (
@@ -476,12 +492,32 @@ def test_fuzzy_filter_pdfs(self):
476492 filtered_pdfs = pdf_views .OverviewMixin .fuzzy_filter_pdfs (Pdf .objects .all (), 'self hosted' )
477493 self .assertEqual (sorted (list (filtered_pdfs ), key = lambda a : a .name ), [pdf_self_hosting , pdf_self_hosted ])
478494
495+ def test_advanced_search_filtering (self ):
496+ collection = self .user .profile .current_collection
497+ pdf_1 = Pdf .objects .create (collection = collection , name = 'eggplant' )
498+ pdf_2 = Pdf .objects .create (collection = collection , name = 'eggplant_2' , description = 'Vegetables' )
499+ pdf_3 = Pdf .objects .create (collection = collection , name = 'eggplant_3' , description = 'Vegetables' )
500+ pdf_4 = Pdf .objects .create (collection = collection , name = 'tomato' )
501+ Pdf .objects .create (collection = collection , name = 'tomato_2' , description = 'Vegetables' )
502+ Metadata .objects .create (pdf = pdf_1 , title = 'Eggplant' , year = 2016 )
503+ Metadata .objects .create (pdf = pdf_2 , title = 'All about vegetables: Eggplant' , year = 2016 )
504+ Metadata .objects .create (pdf = pdf_3 , title = 'All about vegetables: Tomato' , year = 2017 )
505+ Metadata .objects .create (pdf = pdf_4 , title = 'Tomato' , year = 2017 )
506+
507+ filtered_pdfs = pdf_views .OverviewMixin .advanced_search_filtering (
508+ Pdf .objects .all (), {'description' : 'vegetable' , 'title' : 'About' , 'year' : 2016 }
509+ )
510+
511+ assert filtered_pdfs .count () == 1
512+ assert filtered_pdfs .first () == pdf_2
513+
479514 @patch ('pdf.services.tag_services.TagServices.get_tag_info_dict' , return_value = 'tag_info_dict' )
480515 def test_get_extra_context (self , mock_get_tag_info_dict ):
481- response = self .client .get (f'{ reverse ('pdf_overview' )} ?search=searching&tags=tagging' )
516+ response = self .client .get (f'{ reverse ('pdf_overview' )} ?search=searching&tags=tagging&advanced_search=false ' )
482517
483518 generated_extra_context = pdf_views .OverviewMixin .get_extra_context (response .wsgi_request )
484519 expected_extra_context = {
520+ 'advanced_search' : False ,
485521 'search_query' : 'searching' ,
486522 'tag_query' : ['tagging' ],
487523 'tag_info_dict' : 'tag_info_dict' ,
@@ -501,6 +537,7 @@ def test_get_extra_context_selection(self, mock_get_tag_info_dict):
501537
502538 generated_extra_context = pdf_views .OverviewMixin .get_extra_context (response .wsgi_request )
503539 expected_extra_context = {
540+ 'advanced_search' : False ,
504541 'search_query' : '' ,
505542 'tag_query' : [],
506543 'tag_info_dict' : 'tag_info_dict' ,
@@ -514,12 +551,20 @@ def test_get_extra_context_selection(self, mock_get_tag_info_dict):
514551
515552 self .assertEqual (generated_extra_context , expected_extra_context )
516553
554+ @patch ('pdf.services.tag_services.TagServices.get_tag_info_dict' , return_value = 'tag_info_dict' )
555+ def test_get_extra_context_advanced_search_true (self , mock_get_tag_info_dict ):
556+ response = self .client .get (f'{ reverse ('pdf_overview' )} ?advanced_search=true' )
557+
558+ generated_extra_context = pdf_views .OverviewMixin .get_extra_context (response .wsgi_request )
559+ assert generated_extra_context ['advanced_search' ]
560+
517561 @patch ('pdf.services.tag_services.TagServices.get_tag_info_dict' , return_value = 'tag_info_dict' )
518562 def test_get_extra_context_selection_invalid (self , mock_get_tag_info_dict ):
519563 response = self .client .get (f'{ reverse ('pdf_overview' )} ?selection=invalid' )
520564
521565 generated_extra_context = pdf_views .OverviewMixin .get_extra_context (response .wsgi_request )
522566 expected_extra_context = {
567+ 'advanced_search' : False ,
523568 'search_query' : '' ,
524569 'tag_query' : [],
525570 'tag_info_dict' : 'tag_info_dict' ,
@@ -539,6 +584,7 @@ def test_get_extra_context_empty_queries(self, mock_get_tag_info_dict):
539584
540585 generated_extra_context = pdf_views .OverviewMixin .get_extra_context (response .wsgi_request )
541586 expected_extra_context = {
587+ 'advanced_search' : False ,
542588 'search_query' : '' ,
543589 'tag_query' : [],
544590 'tag_info_dict' : 'tag_info_dict' ,
@@ -1035,6 +1081,17 @@ def test_export_annotations_without_identifier(self, mock_export_annotations):
10351081
10361082 mock_export_annotations .assert_called_once_with (self .user .profile , 'highlights' )
10371083
1084+ def test_advanced_search_query (self ):
1085+ queries = (
1086+ '?name=some_name&tags=&description=some_description&title=The+Title&doi=&journal=&publisher=&year=2017'
1087+ )
1088+ response = self .client .get (f'{ reverse ("advanced_search_query" )} { queries } ' )
1089+
1090+ expected_queries = (
1091+ '?description=some_description&title=The+Title&year=2017&search=some_name&advanced_search=true'
1092+ )
1093+ self .assertRedirects (response , f'{ reverse ('pdf_overview' )} { expected_queries } ' , status_code = 302 )
1094+
10381095
10391096class TestAnnotationMixin (TestCase ):
10401097 username = 'user'
0 commit comments