11from typing import Iterable , Iterator
22import dataclasses
33from datetime import date , timedelta
4- import itertools
54import math
65from urllib .parse import urlencode
76
@@ -56,22 +55,14 @@ def test_for_smoke_with_daemon(self):
5655
5756 def test_cardsearch (self ):
5857 self ._fill_test_data_for_querying ()
59- _cardsearch_cases = itertools .chain (
60- self .cardsearch_cases (),
61- self .cardsearch_integer_cases (),
62- )
63- for _queryparams , _expected_focus_iris in _cardsearch_cases :
58+ for _queryparams , _expected_focus_iris in self .cardsearch_cases ():
6459 self ._assert_cardsearch_iris (_queryparams , _expected_focus_iris )
6560
6661 def test_cardsearch_after_deletion (self ):
6762 _cards = self ._fill_test_data_for_querying ()
6863 _deleted_focus_iris = {BLARG .b }
6964 self ._delete_indexcards ([_cards [_focus_iri ] for _focus_iri in _deleted_focus_iris ])
70- _cardsearch_cases = itertools .chain (
71- self .cardsearch_cases (),
72- self .cardsearch_integer_cases (),
73- )
74- for _queryparams , _expected_focus_iris in _cardsearch_cases :
65+ for _queryparams , _expected_focus_iris in self .cardsearch_cases ():
7566 if isinstance (_expected_focus_iris , set ):
7667 _expected_focus_iris -= _deleted_focus_iris
7768 else :
@@ -173,17 +164,17 @@ def test_valuesearch(self):
173164
174165 def test_valuesearch_after_deletion (self ):
175166 _cards = self ._fill_test_data_for_querying ()
176- _deleted_focus_iris = {BLARG .b }
167+ _deleted_focus_iris = {BLARG .c }
177168 self ._delete_indexcards ([_cards [_focus_iri ] for _focus_iri in _deleted_focus_iris ])
178169 _cases = [
179170 (
180171 {'valueSearchPropertyPath' : 'subject' },
181- {BLARG .subj_a , BLARG .subj_ac , BLARG .subj_bc , BLARG .subj_c }, # BLARG.subj_b no longer present
172+ {BLARG .subj_a , BLARG .subj_ac , BLARG .subj_bc , BLARG .subj_b }, # BLARG.subj_c no longer present
182173 ), (
183174 {'valueSearchPropertyPath' : 'dateCreated' },
184- {'1999' , '2024 ' }, # 2012 no longer present
175+ {'1999' , '2012 ' }, # 2024 no longer present
185176 ), (
186- {'valueSearchPropertyPath' : 'subject' , 'cardSearchText' : 'bbbb ' },
177+ {'valueSearchPropertyPath' : 'subject' , 'cardSearchText' : 'cccc ' },
187178 set (), # none
188179 )
189180 ]
@@ -296,7 +287,11 @@ def _fill_test_data_for_querying(self):
296287 DCTERMS .created : {rdf .literal (date (2024 , 12 , 31 ))},
297288 DCTERMS .creator : {BLARG .someone_else },
298289 DCTERMS .title : {rdf .literal ('cccc' )},
299- DCTERMS .subject : {BLARG .subj_ac , BLARG .subj_bc , BLARG .subj_c },
290+ DCTERMS .subject : {
291+ BLARG ['subj_ac/' ], # this one has an extra trailing slash
292+ BLARG .subj_bc ,
293+ BLARG .subj_c ,
294+ },
300295 DCTERMS .description : {rdf .literal ('The danger is unleashed only if you substantially disturb this place physically. This place is best shunned and left uninhabited.' , language = 'en' )},
301296 },
302297 BLARG .someone_else : {
@@ -401,14 +396,6 @@ def cardsearch_cases(self) -> Iterator[tuple[dict[str, str], set[str] | list[str
401396 {'cardSearchFilter[dcterms:replaces][is-absent]' : '' },
402397 set (),
403398 )
404- yield (
405- {'cardSearchFilter[subject]' : BLARG .subj_ac },
406- {BLARG .c , BLARG .a },
407- )
408- yield (
409- {'cardSearchFilter[subject][none-of]' : BLARG .subj_ac },
410- {BLARG .b },
411- )
412399 yield (
413400 {
414401 'cardSearchFilter[subject]' : BLARG .subj_bc ,
@@ -510,6 +497,8 @@ def cardsearch_cases(self) -> Iterator[tuple[dict[str, str], set[str] | list[str
510497 {'cardSearchText' : '"what is here"' },
511498 {BLARG .b },
512499 )
500+ yield from self .cardsearch_trailingslash_cases ()
501+ yield from self .cardsearch_integer_cases ()
513502
514503 def cardsearch_integer_cases (self ) -> Iterator [tuple [dict [str , str ], set [str ] | list [str ]]]:
515504 # cases that depend on integer values getting indexed
@@ -522,6 +511,17 @@ def cardsearch_integer_cases(self) -> Iterator[tuple[dict[str, str], set[str] |
522511 [BLARG .c , BLARG .a , BLARG .b ], # ordered list
523512 )
524513
514+ def cardsearch_trailingslash_cases (self ) -> Iterator [tuple [dict [str , str ], set [str ] | list [str ]]]:
515+ # cases that depend on trailing-slash ignorance
516+ yield (
517+ {'cardSearchFilter[subject]' : BLARG .subj_ac },
518+ {BLARG .c , BLARG .a },
519+ )
520+ yield (
521+ {'cardSearchFilter[subject][none-of]' : BLARG .subj_ac },
522+ {BLARG .b },
523+ )
524+
525525 def valuesearch_cases (self ) -> Iterator [tuple [dict [str , str ], set [str ]]]:
526526 yield (
527527 {'valueSearchPropertyPath' : 'references' },
@@ -531,6 +531,26 @@ def valuesearch_cases(self) -> Iterator[tuple[dict[str, str], set[str]]]:
531531 {'valueSearchPropertyPath' : 'dateCreated' },
532532 {'1999' , '2012' , '2024' },
533533 )
534+ yield (
535+ {
536+ 'valueSearchPropertyPath' : 'references' ,
537+ 'valueSearchFilter[resourceType]' : BLARG .Thing ,
538+ },
539+ {BLARG .b , BLARG .c },
540+ )
541+ yield (
542+ {
543+ 'valueSearchPropertyPath' : 'references' ,
544+ 'valueSearchText' : 'bbbb' ,
545+ },
546+ {BLARG .b },
547+ )
548+ yield from self .valuesearch_trailingslash_cases ()
549+ yield from self .valuesearch_sameas_cases ()
550+ # TODO: more
551+
552+ def valuesearch_trailingslash_cases (self ) -> Iterator [tuple [dict [str , str ], set [str ]]]:
553+ # cases that depend on trailing-slash ignorance
534554 yield (
535555 {'valueSearchPropertyPath' : 'subject' },
536556 {BLARG .subj_a , BLARG .subj_ac , BLARG .subj_b , BLARG .subj_bc , BLARG .subj_c },
@@ -547,21 +567,43 @@ def valuesearch_cases(self) -> Iterator[tuple[dict[str, str], set[str]]]:
547567 {'valueSearchPropertyPath' : 'subject' , 'cardSearchText' : 'aaaa' },
548568 {BLARG .subj_ac , BLARG .subj_a },
549569 )
570+
571+ def valuesearch_sameas_cases (self ):
550572 yield (
551573 {
552- 'valueSearchPropertyPath' : 'references ' ,
553- 'valueSearchFilter[resourceType ]' : BLARG .Thing ,
574+ 'valueSearchPropertyPath' : 'subject ' ,
575+ 'cardSearchFilter[sameAs ]' : BLARG .a ,
554576 },
555- {BLARG .b , BLARG .c },
577+ {BLARG .subj_ac , BLARG .subj_a },
556578 )
557579 yield (
558580 {
559- 'valueSearchPropertyPath' : 'references ' ,
560- 'valueSearchText ' : 'bbbb' ,
581+ 'valueSearchPropertyPath' : 'subject ' ,
582+ 'cardSearchFilter[sameAs] ' : BLARG . a_same ,
561583 },
562- {BLARG .b },
584+ {BLARG .subj_ac , BLARG .subj_a },
585+ )
586+ yield (
587+ {
588+ 'valueSearchPropertyPath' : 'subject' ,
589+ 'cardSearchFilter[sameAs]' : BLARG .b_same ,
590+ },
591+ {BLARG .subj_b , BLARG .subj_bc },
592+ )
593+ yield (
594+ {
595+ 'valueSearchPropertyPath' : 'subject' ,
596+ 'valueSearchFilter[sameAs]' : BLARG .subj_a ,
597+ },
598+ {BLARG .subj_a },
599+ )
600+ yield (
601+ {
602+ 'valueSearchPropertyPath' : 'subject' ,
603+ 'cardSearchFilter[subject]' : BLARG .subj_ac ,
604+ },
605+ {BLARG .subj_ac , BLARG .subj_a , BLARG .subj_c , BLARG .subj_bc },
563606 )
564- # TODO: more
565607
566608 def _index_indexcards (self , indexcards : Iterable [trove_db .Indexcard ]):
567609 _messages_chunk = messages .MessagesChunk (
0 commit comments