Skip to content

Commit 56b2378

Browse files
committed
add tests
1 parent ef36ec2 commit 56b2378

File tree

4 files changed

+225
-140
lines changed

4 files changed

+225
-140
lines changed

Firestore/Swift/Source/Helper/PipelineHelper.swift

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,17 @@
1313
// limitations under the License.
1414

1515
enum Helper {
16-
17-
enum HelperError: Error {
16+
enum HelperError: Error, LocalizedError {
1817
case duplicateAlias(String)
18+
19+
public var errorDescription: String? {
20+
switch self {
21+
case let .duplicateAlias(message):
22+
return message
23+
}
24+
}
1925
}
20-
26+
2127
static func sendableToExpr(_ value: Sendable?) -> Expression {
2228
guard let value = value else {
2329
return Constant.nil
@@ -39,14 +45,14 @@ enum Helper {
3945
static func selectablesToMap(selectables: [Selectable]) -> ([String: Expression], Error?) {
4046
var exprMap = [String: Expression]()
4147
for selectable in selectables {
42-
guard let value = selectable as? SelectableWrapper else {
43-
fatalError("Selectable class must conform to SelectableWrapper.")
44-
}
45-
let alias = value.alias
46-
if exprMap.keys.contains(alias) {
47-
return ([:], HelperError.duplicateAlias("Duplicate alias '\(alias)' found in selectables."))
48-
}
49-
exprMap[alias] = value.expr
48+
guard let value = selectable as? SelectableWrapper else {
49+
fatalError("Selectable class must conform to SelectableWrapper.")
50+
}
51+
let alias = value.alias
52+
if exprMap.keys.contains(alias) {
53+
return ([:], HelperError.duplicateAlias("Duplicate alias '\(alias)' found in selectables."))
54+
}
55+
exprMap[alias] = value.expr
5056
}
5157
return (exprMap, nil)
5258
}
@@ -55,11 +61,14 @@ enum Helper {
5561
-> ([String: AggregateFunction], Error?) {
5662
var accumulatorMap = [String: AggregateFunction]()
5763
for aliasedAggregate in accumulators {
58-
let alias = aliasedAggregate.alias
59-
if accumulatorMap.keys.contains(alias) {
60-
return ([:], HelperError.duplicateAlias("Duplicate alias '\(alias)' found in accumulators."))
61-
}
62-
accumulatorMap[alias] = aliasedAggregate.aggregate
64+
let alias = aliasedAggregate.alias
65+
if accumulatorMap.keys.contains(alias) {
66+
return (
67+
[:],
68+
HelperError.duplicateAlias("Duplicate alias '\(alias)' found in accumulators.")
69+
)
70+
}
71+
accumulatorMap[alias] = aliasedAggregate.aggregate
6372
}
6473
return (accumulatorMap, nil)
6574
}

Firestore/Swift/Source/Stages.swift

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ protocol Stage {
3030
}
3131

3232
extension Stage {
33-
var errorMessage: String? {
34-
return nil
35-
}
33+
var errorMessage: String? {
34+
return nil
35+
}
3636
}
3737

3838
@available(iOS 13, tvOS 13, macOS 10.15, macCatalyst 13, watchOS 7, *)
@@ -160,12 +160,12 @@ class AddFields: Stage {
160160
self.selectables = selectables
161161
let (map, error) = Helper.selectablesToMap(selectables: selectables)
162162
if let error = error {
163-
self.errorMessage = error.localizedDescription
164-
self.bridge = AddFieldsStageBridge(fields: [:])
163+
errorMessage = error.localizedDescription
164+
bridge = AddFieldsStageBridge(fields: [:])
165165
} else {
166-
self.errorMessage = nil
167-
let objcAccumulators = map.mapValues { $0.toBridge() }
168-
self.bridge = AddFieldsStageBridge(fields: objcAccumulators)
166+
errorMessage = nil
167+
let objcAccumulators = map.mapValues { $0.toBridge() }
168+
bridge = AddFieldsStageBridge(fields: objcAccumulators)
169169
}
170170
}
171171
}
@@ -196,12 +196,12 @@ class Select: Stage {
196196
init(selections: [Selectable]) {
197197
let (map, error) = Helper.selectablesToMap(selectables: selections)
198198
if let error = error {
199-
self.errorMessage = error.localizedDescription
200-
self.bridge = SelectStageBridge(selections: [:])
199+
errorMessage = error.localizedDescription
200+
bridge = SelectStageBridge(selections: [:])
201201
} else {
202-
self.errorMessage = nil
203-
let objcSelections = map.mapValues { Helper.sendableToExpr($0).toBridge() }
204-
self.bridge = SelectStageBridge(selections: objcSelections)
202+
errorMessage = nil
203+
let objcSelections = map.mapValues { Helper.sendableToExpr($0).toBridge() }
204+
bridge = SelectStageBridge(selections: objcSelections)
205205
}
206206
}
207207
}
@@ -215,12 +215,12 @@ class Distinct: Stage {
215215
init(groups: [Selectable]) {
216216
let (map, error) = Helper.selectablesToMap(selectables: groups)
217217
if let error = error {
218-
self.errorMessage = error.localizedDescription
219-
self.bridge = DistinctStageBridge(groups: [:])
218+
errorMessage = error.localizedDescription
219+
bridge = DistinctStageBridge(groups: [:])
220220
} else {
221-
self.errorMessage = nil
222-
let objcGroups = map.mapValues { Helper.sendableToExpr($0).toBridge() }
223-
self.bridge = DistinctStageBridge(groups: objcGroups)
221+
errorMessage = nil
222+
let objcGroups = map.mapValues { Helper.sendableToExpr($0).toBridge() }
223+
bridge = DistinctStageBridge(groups: objcGroups)
224224
}
225225
}
226226
}
@@ -237,23 +237,23 @@ class Aggregate: Stage {
237237
self.accumulators = accumulators
238238

239239
if let groups = groups {
240-
let (map, error) = Helper.selectablesToMap(selectables: groups)
241-
if let error = error {
242-
self.errorMessage = error.localizedDescription
243-
self.bridge = AggregateStageBridge(accumulators: [:], groups: [:])
244-
return
245-
}
246-
self.groups = map
240+
let (map, error) = Helper.selectablesToMap(selectables: groups)
241+
if let error = error {
242+
errorMessage = error.localizedDescription
243+
bridge = AggregateStageBridge(accumulators: [:], groups: [:])
244+
return
245+
}
246+
self.groups = map
247247
}
248248

249249
let (accumulatorsMap, error) = Helper.aliasedAggregatesToMap(accumulators: accumulators)
250250
if let error = error {
251-
self.errorMessage = error.localizedDescription
252-
self.bridge = AggregateStageBridge(accumulators: [:], groups: [:])
253-
return
251+
errorMessage = error.localizedDescription
252+
bridge = AggregateStageBridge(accumulators: [:], groups: [:])
253+
return
254254
}
255-
256-
self.errorMessage = nil
255+
256+
errorMessage = nil
257257
let accumulatorBridgesMap = accumulatorsMap.mapValues { $0.bridge }
258258
bridge = AggregateStageBridge(
259259
accumulators: accumulatorBridgesMap,

0 commit comments

Comments
 (0)