20
20
use Solarium \Core \Client \Request ;
21
21
use Solarium \Core \Client \Response ;
22
22
use Solarium \Core \Event \Events ;
23
+ use Solarium \Core \Query \AbstractDocument ;
23
24
use Solarium \Core \Query \AbstractQuery ;
24
25
use Solarium \Core \Query \Helper ;
25
26
use Solarium \Core \Query \RequestBuilderInterface ;
@@ -95,6 +96,25 @@ abstract class AbstractTechproductsTestCase extends TestCase
95
96
*/
96
97
protected static $ isSolrOnWindows ;
97
98
99
+ /**
100
+ * Asserts that a document contains exactly the expected fields.
101
+ *
102
+ * {@internal We used to compare the actual array of fields directly to the
103
+ * expected array with {@see assertSame()} but that stopped working
104
+ * with Solr 9.7.0 because the order in which fields are returned
105
+ * has changed for some queries. There was never a guarantee that
106
+ * Solr maintains field order (SOLR-1190), we had just been lucky
107
+ * that it had always happened to work out before.}
108
+ */
109
+ public static function assertDocumentHasFields (array $ expectedFields , AbstractDocument $ actualDocument , string $ message = '' ): void
110
+ {
111
+ $ actualFields = $ actualDocument ->getFields ();
112
+ ksort ($ actualFields );
113
+ ksort ($ expectedFields );
114
+
115
+ static ::assertSame ($ expectedFields , $ actualFields , $ message );
116
+ }
117
+
98
118
abstract protected static function createTechproducts (): void ;
99
119
100
120
public static function setUpBeforeClass (): void
@@ -187,16 +207,16 @@ public static function setUpBeforeClass(): void
187
207
$ select ->setQuery ('êâîôû ' );
188
208
$ result = self ::$ client ->select ($ select );
189
209
static ::assertCount (1 , $ result );
190
- static ::assertSame ([
210
+ static ::assertDocumentHasFields ([
191
211
'id ' => 'UTF8TEST ' ,
192
- ], $ result ->getIterator ()->current ()-> getFields () );
212
+ ], $ result ->getIterator ()->current ());
193
213
194
214
$ select ->setQuery ('这是一个功能 ' );
195
215
$ result = self ::$ client ->select ($ select );
196
216
static ::assertCount (1 , $ result );
197
- static ::assertSame ([
217
+ static ::assertDocumentHasFields ([
198
218
'id ' => 'GB18030TEST ' ,
199
- ], $ result ->getIterator ()->current ()-> getFields () );
219
+ ], $ result ->getIterator ()->current ());
200
220
} catch (\Exception $ e ) {
201
221
self ::tearDownAfterClass ();
202
222
static ::markTestSkipped ('Solr techproducts sample data not indexed properly. ' );
@@ -551,15 +571,15 @@ public function testRangeQueries(string $responseWriter)
551
571
$ result = self ::$ client ->select ($ select );
552
572
$ this ->assertSame (2 , $ result ->getNumFound ());
553
573
$ iterator = $ result ->getIterator ();
554
- $ this ->assertSame ([
574
+ $ this ->assertDocumentHasFields ([
555
575
'id ' => 'MA147LL/A ' ,
556
576
'manufacturedate_dt ' => '2005-10-12T08:00:00Z ' ,
557
- ], $ iterator ->current ()-> getFields () );
577
+ ], $ iterator ->current ());
558
578
$ iterator ->next ();
559
- $ this ->assertSame ([
579
+ $ this ->assertDocumentHasFields ([
560
580
'id ' => 'F8V7067-APL-KIT ' ,
561
581
'manufacturedate_dt ' => '2005-08-01T16:30:25Z ' ,
562
- ], $ iterator ->current ()-> getFields () );
582
+ ], $ iterator ->current ());
563
583
564
584
// VS1GB400C3 costs 74.99, SP2514N costs 92.0, 0579B002 costs 179.99
565
585
$ select ->setFields ('id,price ' );
@@ -570,63 +590,63 @@ public function testRangeQueries(string $responseWriter)
570
590
$ result = self ::$ client ->select ($ select );
571
591
$ this ->assertSame (3 , $ result ->getNumFound ());
572
592
$ iterator = $ result ->getIterator ();
573
- $ this ->assertSame ([
593
+ $ this ->assertDocumentHasFields ([
574
594
'id ' => 'VS1GB400C3 ' ,
575
595
'price ' => 74.99 ,
576
- ], $ iterator ->current ()-> getFields () );
596
+ ], $ iterator ->current ());
577
597
$ iterator ->next ();
578
- $ this ->assertSame ([
598
+ $ this ->assertDocumentHasFields ([
579
599
'id ' => 'SP2514N ' ,
580
600
'price ' => 92.0 ,
581
- ], $ iterator ->current ()-> getFields () );
601
+ ], $ iterator ->current ());
582
602
$ iterator ->next ();
583
- $ this ->assertSame ([
603
+ $ this ->assertDocumentHasFields ([
584
604
'id ' => '0579B002 ' ,
585
605
'price ' => 179.99 ,
586
- ], $ iterator ->current ()-> getFields () );
606
+ ], $ iterator ->current ());
587
607
588
608
$ select ->setQuery (
589
609
$ select ->getHelper ()->rangeQuery ('price ' , 74.99 , 179.99 , [true , false ])
590
610
);
591
611
$ result = self ::$ client ->select ($ select );
592
612
$ this ->assertSame (2 , $ result ->getNumFound ());
593
613
$ iterator = $ result ->getIterator ();
594
- $ this ->assertSame ([
614
+ $ this ->assertDocumentHasFields ([
595
615
'id ' => 'VS1GB400C3 ' ,
596
616
'price ' => 74.99 ,
597
- ], $ iterator ->current ()-> getFields () );
617
+ ], $ iterator ->current ());
598
618
$ iterator ->next ();
599
- $ this ->assertSame ([
619
+ $ this ->assertDocumentHasFields ([
600
620
'id ' => 'SP2514N ' ,
601
621
'price ' => 92.0 ,
602
- ], $ iterator ->current ()-> getFields () );
622
+ ], $ iterator ->current ());
603
623
604
624
$ select ->setQuery (
605
625
$ select ->getHelper ()->rangeQuery ('price ' , 74.99 , 179.99 , [false , true ])
606
626
);
607
627
$ result = self ::$ client ->select ($ select );
608
628
$ this ->assertSame (2 , $ result ->getNumFound ());
609
629
$ iterator = $ result ->getIterator ();
610
- $ this ->assertSame ([
630
+ $ this ->assertDocumentHasFields ([
611
631
'id ' => 'SP2514N ' ,
612
632
'price ' => 92.0 ,
613
- ], $ iterator ->current ()-> getFields () );
633
+ ], $ iterator ->current ());
614
634
$ iterator ->next ();
615
- $ this ->assertSame ([
635
+ $ this ->assertDocumentHasFields ([
616
636
'id ' => '0579B002 ' ,
617
637
'price ' => 179.99 ,
618
- ], $ iterator ->current ()-> getFields () );
638
+ ], $ iterator ->current ());
619
639
620
640
$ select ->setQuery (
621
641
$ select ->getHelper ()->rangeQuery ('price ' , 74.99 , 179.99 , [false , false ])
622
642
);
623
643
$ result = self ::$ client ->select ($ select );
624
644
$ this ->assertSame (1 , $ result ->getNumFound ());
625
645
$ iterator = $ result ->getIterator ();
626
- $ this ->assertSame ([
646
+ $ this ->assertDocumentHasFields ([
627
647
'id ' => 'SP2514N ' ,
628
648
'price ' => 92.0 ,
629
- ], $ iterator ->current ()-> getFields () );
649
+ ], $ iterator ->current ());
630
650
}
631
651
632
652
public function testFacetHighlightSpellcheckComponent ()
0 commit comments