@@ -96,8 +96,8 @@ class ElasticSearchIntegrationTests: XCTestCase {
96
96
Thread . sleep ( forTimeInterval: 1.0 )
97
97
98
98
let results = try client. searchDocuments ( from: indexName, searchTerm: " Apples " , type: SomeItem . self) . wait ( )
99
- XCTAssertEqual ( results. hits. total. value, 100 )
100
- XCTAssertEqual ( results. hits. total. relation, . eq)
99
+ XCTAssertEqual ( results. hits. total! . value, 100 )
100
+ XCTAssertEqual ( results. hits. total! . relation, . eq)
101
101
}
102
102
103
103
func testCreateDocument( ) throws {
@@ -464,6 +464,7 @@ class ElasticSearchIntegrationTests: XCTestCase {
464
464
465
465
let results : ESGetMultipleDocumentsResponse < SomeItem > = try client. searchDocumentsPaginated ( from: indexName, queryBody: queryBody, size: 20 , offset: 10 ) . wait ( )
466
466
XCTAssertEqual ( results. hits. hits. count, 20 )
467
+ XCTAssertEqual ( results. hits. total!. value, 100 )
467
468
XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 11 Apples " } ) )
468
469
XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 29 Apples " } ) )
469
470
}
@@ -502,6 +503,54 @@ class ElasticSearchIntegrationTests: XCTestCase {
502
503
503
504
let results : ESGetMultipleDocumentsResponse < SomeItem > = try client. customSearch ( from: indexName, query: query) . wait ( )
504
505
XCTAssertEqual ( results. hits. hits. count, 20 )
506
+ XCTAssertEqual ( results. hits. total!. value, 100 )
507
+ XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 11 Apples " } ) )
508
+ XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 29 Apples " } ) )
509
+ }
510
+
511
+ func testCustomSearchWithTrackTotalHitsFalse( ) throws {
512
+ for index in 1 ... 100 {
513
+ let name = " Some \( index) Apples "
514
+ let item = SomeItem ( id: UUID ( ) , name: name)
515
+ _ = try client. createDocument ( item, in: self . indexName) . wait ( )
516
+ }
517
+
518
+ // This is required for ES to settle and load the indexes to return the right results
519
+ Thread . sleep ( forTimeInterval: 2.0 )
520
+
521
+ struct Query : Encodable {
522
+ let query : QueryBody
523
+ let from : Int
524
+ let size : Int
525
+ let trackTotalHits : Bool
526
+
527
+ enum CodingKeys : String , CodingKey {
528
+ case query
529
+ case from
530
+ case size
531
+ case trackTotalHits = " track_total_hits "
532
+ }
533
+ }
534
+
535
+ struct QueryBody : Encodable {
536
+ let queryString : QueryString
537
+
538
+ enum CodingKeys : String , CodingKey {
539
+ case queryString = " query_string "
540
+ }
541
+ }
542
+
543
+ struct QueryString : Encodable {
544
+ let query : String
545
+ }
546
+
547
+ let queryString = QueryString ( query: " Apples " )
548
+ let queryBody = QueryBody ( queryString: queryString)
549
+ let query = Query ( query: queryBody, from: 10 , size: 20 , trackTotalHits: false )
550
+
551
+ let results : ESGetMultipleDocumentsResponse < SomeItem > = try client. customSearch ( from: indexName, query: query) . wait ( )
552
+ XCTAssertNil ( results. hits. total)
553
+ XCTAssertEqual ( results. hits. hits. count, 20 )
505
554
XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 11 Apples " } ) )
506
555
XCTAssertTrue ( results. hits. hits. contains ( where: { $0. source. name == " Some 29 Apples " } ) )
507
556
}
0 commit comments