Skip to content

Commit b6cba2b

Browse files
authored
Merge branch 'v8' into renovate/actions-checkout-digest
2 parents cf086c5 + cb5aa96 commit b6cba2b

File tree

5 files changed

+112
-6
lines changed

5 files changed

+112
-6
lines changed

AlgoliaSearchClient.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Pod::Spec.new do |spec|
22
spec.name = "AlgoliaSearchClient"
33
spec.module_name = 'AlgoliaSearchClient'
4-
spec.version = "8.20.1"
4+
spec.version = "8.21.0"
55
spec.summary = "Algolia Search API Client written in Swift."
66
spec.homepage = "https://github.com/algolia/algoliasearch-client-swift"
77
spec.license = { :type => "MIT", :file => "LICENSE" }

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# ChangeLog
22

3+
## [8.21.0](https://github.com/algolia/algoliasearch-client-swift/compare/8.20.1...8.21.0) (2024-09-18)
4+
5+
### Feat
6+
7+
- Merge pull request #866 from algolia/fix/disjunctive-faceting-helper ([dc6fd5e0](https://github.com/algolia/algoliasearch-client-swift/commit/dc6fd5e0))
8+
- Merge pull request #862 from algolia/chore/apple-privacy-manifest ([4334c904](https://github.com/algolia/algoliasearch-client-swift/commit/4334c904))
9+
310
## [8.20.1](https://github.com/algolia/algoliasearch-client-swift/compare/8.20.0...8.20.1) (2024-03-04)
411

512
### Fix

Sources/AlgoliaSearchClient/Helpers/DisjunctiveFacetingHelper.swift

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,28 @@ struct DisjunctiveFacetingHelper {
5050
var queries = [Query]()
5151

5252
var mainQuery = query
53-
mainQuery.filters = buildFilters(excluding: .none)
53+
mainQuery.filters = [
54+
mainQuery.filters,
55+
buildFilters(excluding: .none)
56+
]
57+
.compactMap { $0 }
58+
.filter { !$0.isEmpty }
59+
.joined(separator: " AND ")
5460

5561
queries.append(mainQuery)
5662

5763
disjunctiveFacets
5864
.sorted(by: { $0.rawValue < $1.rawValue })
5965
.forEach { disjunctiveFacet in
60-
var disjunctiveQuery = query
61-
disjunctiveQuery.facets = [disjunctiveFacet]
62-
disjunctiveQuery.filters = buildFilters(excluding: disjunctiveFacet)
66+
var disjunctiveQuery = query
67+
disjunctiveQuery.facets = [disjunctiveFacet]
68+
disjunctiveQuery.filters = [
69+
disjunctiveQuery.filters,
70+
buildFilters(excluding: disjunctiveFacet)
71+
]
72+
.compactMap { $0 }
73+
.filter { !$0.isEmpty }
74+
.joined(separator: " AND ")
6375
disjunctiveQuery.hitsPerPage = 0
6476
disjunctiveQuery.attributesToRetrieve = []
6577
disjunctiveQuery.attributesToHighlight = []
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
// This is generated file. Don't modify it manually.
2-
public extension Version { static let current: Version = .init(major: 8, minor: 20, patch: 1, prereleaseIdentifier: nil) }
2+
public extension Version { static let current: Version = .init(major: 8, minor: 21, patch: 0, prereleaseIdentifier: nil) }

Tests/AlgoliaSearchClientTests/Unit/DisjunctiveFacetingHelperTests.swift

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,5 +382,92 @@ class DisjunctiveFacetingHelperTests: XCTestCase {
382382
])
383383
XCTAssertTrue(response.exhaustiveFacetsCount!)
384384
}
385+
386+
func testKeepExistingFilters() throws {
387+
var query = Query()
388+
query.filters = "NOT color:blue"
389+
390+
let refinements: [Attribute: [String]] = [
391+
"size": ["m", "s"],
392+
"color": ["blue", "green", "red"],
393+
"brand": ["apple", "samsung", "sony"]
394+
]
395+
let disjunctiveFacets: Set<Attribute> = [
396+
"color",
397+
"size"
398+
]
399+
let helper = DisjunctiveFacetingHelper(query: query,
400+
refinements: refinements,
401+
disjunctiveFacets: disjunctiveFacets)
402+
let queries = helper.makeQueries()
403+
XCTAssertEqual(queries.count, 3)
404+
XCTAssertEqual(queries.first?.filters, """
405+
NOT color:blue AND ("brand":"apple" AND "brand":"samsung" AND "brand":"sony") AND ("color":"blue" OR "color":"green" OR "color":"red") AND ("size":"m" OR "size":"s")
406+
""")
407+
XCTAssertEqual(queries[1].facets, ["color"])
408+
XCTAssertEqual(queries[1].filters, """
409+
NOT color:blue AND ("brand":"apple" AND "brand":"samsung" AND "brand":"sony") AND ("size":"m" OR "size":"s")
410+
""")
411+
XCTAssertEqual(queries[2].facets, ["size"])
412+
XCTAssertEqual(queries[2].filters, """
413+
NOT color:blue AND ("brand":"apple" AND "brand":"samsung" AND "brand":"sony") AND ("color":"blue" OR "color":"green" OR "color":"red")
414+
""")
415+
}
416+
417+
func testKeepExistingFiltersEmpty() throws {
418+
var query = Query()
419+
query.filters = ""
420+
421+
let refinements: [Attribute: [String]] = [
422+
"size": ["m", "s"],
423+
"color": ["blue", "green", "red"],
424+
"brand": ["apple", "samsung", "sony"]
425+
]
426+
let disjunctiveFacets: Set<Attribute> = [
427+
"color",
428+
"size"
429+
]
430+
let helper = DisjunctiveFacetingHelper(query: query,
431+
refinements: refinements,
432+
disjunctiveFacets: disjunctiveFacets)
433+
let queries = helper.makeQueries()
434+
XCTAssertEqual(queries.count, 3)
435+
XCTAssertEqual(queries.first?.filters, """
436+
("brand":"apple" AND "brand":"samsung" AND "brand":"sony") AND ("color":"blue" OR "color":"green" OR "color":"red") AND ("size":"m" OR "size":"s")
437+
""")
438+
XCTAssertEqual(queries[1].facets, ["color"])
439+
XCTAssertEqual(queries[1].filters, """
440+
("brand":"apple" AND "brand":"samsung" AND "brand":"sony") AND ("size":"m" OR "size":"s")
441+
""")
442+
XCTAssertEqual(queries[2].facets, ["size"])
443+
XCTAssertEqual(queries[2].filters, """
444+
("brand":"apple" AND "brand":"samsung" AND "brand":"sony") AND ("color":"blue" OR "color":"green" OR "color":"red")
445+
""")
446+
}
447+
448+
func testKeepExistingFiltersNoRefinement() throws {
449+
var query = Query()
450+
query.filters = "NOT color:blue"
385451

452+
let disjunctiveFacets: Set<Attribute> = [
453+
"color",
454+
"size"
455+
]
456+
let helper = DisjunctiveFacetingHelper(query: query,
457+
refinements: [:],
458+
disjunctiveFacets: disjunctiveFacets)
459+
let queries = helper.makeQueries()
460+
XCTAssertEqual(queries.count, 3)
461+
XCTAssertEqual(queries.first?.filters, """
462+
NOT color:blue
463+
""")
464+
XCTAssertEqual(queries[1].facets, ["color"])
465+
XCTAssertEqual(queries[1].filters, """
466+
NOT color:blue
467+
""")
468+
XCTAssertEqual(queries[2].facets, ["size"])
469+
XCTAssertEqual(queries[2].filters, """
470+
NOT color:blue
471+
""")
472+
}
386473
}

0 commit comments

Comments
 (0)