Skip to content

Commit

Permalink
Merge pull request #5 from rcarver/sort
Browse files Browse the repository at this point in the history
Sort
  • Loading branch information
rcarver authored Sep 23, 2024
2 parents 0707b3a + 6940fdb commit 68813e2
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 28 deletions.
8 changes: 4 additions & 4 deletions Package.resolved
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-custom-dump.git",
"state" : {
"revision" : "f01efb26f3a192a0e88dcdb7c3c391ec2fc25d9c",
"version" : "1.3.0"
"revision" : "82645ec760917961cfa08c9c0c7104a57a0fa4b1",
"version" : "1.3.3"
}
},
{
"identity" : "xctest-dynamic-overlay",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/xctest-dynamic-overlay",
"state" : {
"revision" : "6f30bdba373bbd7fbfe241dddd732651f2fbd1e2",
"version" : "1.1.2"
"revision" : "27d767d643fa2cf083d0a73d74fa84cacb53e85c",
"version" : "1.4.1"
}
}
],
Expand Down
16 changes: 16 additions & 0 deletions Sources/ElasticsearchQueryBuilder/Components.swift
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,22 @@ extension esb {
}
}

/// Adds `sort` block to the query syntax.
public struct Sort<Component: ArrayComponent>: DictComponent {
var component: Component
public init(@QueryArrayBuilder component: () -> Component) {
self.component = component()
}
public func makeDict() -> QueryDict {
let values: [QueryDict] = self.component.makeCompactArray()
if values.isEmpty {
return [:]
} else {
return [ "sort" : .array(values.map(QueryValue.dict)) ]
}
}
}

/// Adds `term` block to the query syntax.
///
/// Excludes the component if value is nil.
Expand Down
85 changes: 61 additions & 24 deletions Tests/ElasticsearchQueryBuilderTests/ComponentTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ final class NothingTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Nothing()
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -17,7 +17,7 @@ final class KeyTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Key("boost", .float(1.2))
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"boost": 1.2
])
}
Expand All @@ -29,7 +29,7 @@ final class KeyTests: XCTestCase {
]
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"match_bool_prefix": [
"message": "quick brown f"
]
Expand All @@ -39,7 +39,7 @@ final class KeyTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Key("match", .dict([:]))
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -57,7 +57,7 @@ final class ComposableBuilderTests: XCTestCase {
makeKey()
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"query": [
"match_bool_prefix": [
"message": "quick brown f"
Expand All @@ -80,7 +80,7 @@ final class ComposableBuilderTests: XCTestCase {
makeKey(true)
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"filter": [
[
"match_bool_prefix": [
Expand All @@ -107,7 +107,7 @@ final class ComposableBuilderTests: XCTestCase {
makeKey(true, 3)
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"filter": [
[
"match_bool_prefix": [
Expand Down Expand Up @@ -135,7 +135,7 @@ final class QueryTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"query": [
"match_bool_prefix": [
"message": "quick brown f"
Expand All @@ -149,7 +149,7 @@ final class QueryTests: XCTestCase {
esb.Key("match", .dict([:]))
}
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand Down Expand Up @@ -196,7 +196,7 @@ final class BoolTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build(true).makeQuery(), [
expectNoDifference(build(true).makeQuery(), [
"bool": [
"minimum_should_match": 1,
"should": [
Expand Down Expand Up @@ -229,7 +229,7 @@ final class BoolTests: XCTestCase {
]
]
])
XCTAssertNoDifference(build(false).makeQuery(), [
expectNoDifference(build(false).makeQuery(), [
"bool": [
"minimum_should_match": 1
]
Expand All @@ -252,7 +252,44 @@ final class BoolTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

final class SortTests: XCTestCase {
func testBuild() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Sort {
esb.Key("_score") {
[ "order": "desc" ]
}
esb.Key("name") {
[ "order": "asc" ]
}
}
}
expectNoDifference(build().makeQuery(), [
"sort": [
[
"_score": [ "order": "desc" ]
],
[
"name": [ "order": "asc" ]
]
]
])
}
func testBuildEmpty() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Sort {
if false {
esb.Key("_score") {
[ "order": "desc" ]
}
}
}
}
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -261,15 +298,15 @@ final class TermTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Term("name", "joe")
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"term": [ "name": "joe" ]
])
}
func testBuildEmpty() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Term("name", nil)
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -278,15 +315,15 @@ final class TermsORTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.TermsOR("name", ["joe", "mary"])
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"terms": [ "name": ["joe", "mary"] ]
])
}
func testBuildEmpty() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.TermsOR("name", [])
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -297,7 +334,7 @@ final class TermsANDTests: XCTestCase {
esb.TermsAND("name", ["joe", "mary"])
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"filter": [
[ "term": [ "name": "joe" ] ],
[ "term": [ "name": "mary" ] ],
Expand All @@ -310,7 +347,7 @@ final class TermsANDTests: XCTestCase {
esb.TermsAND("name", [])
}
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
}

Expand All @@ -319,7 +356,7 @@ final class KNearestNeighborTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.kNearestNeighbor("vector_field", [1,2,3])
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"knn": [
"field": "vector_field",
"query_vector": [1.0, 2.0, 3.0],
Expand All @@ -341,7 +378,7 @@ final class KNearestNeighborTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"knn": [
"field": "vector_field",
"query_vector": [1.0, 2.0, 3.0],
Expand Down Expand Up @@ -385,7 +422,7 @@ final class FunctionScoreTests: XCTestCase {
}
}
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"function_score": [
"bool": [
"should": [
Expand Down Expand Up @@ -415,21 +452,21 @@ final class SearchPaginationTests: XCTestCase {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Pagination()
}
XCTAssertNoDifference(build().makeQuery(), [:])
expectNoDifference(build().makeQuery(), [:])
}
func testBuildFirst() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Pagination(from: 10)
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"from": 10
])
}
func testBuildFirstSize() throws {
@ElasticsearchQueryBuilder func build() -> some esb.QueryDSL {
esb.Pagination(from: 10, size: 20)
}
XCTAssertNoDifference(build().makeQuery(), [
expectNoDifference(build().makeQuery(), [
"from": 10,
"size": 20,
])
Expand Down

0 comments on commit 68813e2

Please sign in to comment.