Skip to content

Commit 9f8289f

Browse files
committed
Move POSCatalogSyncRemoteProtocol mock to a separate file for reuse.
1 parent 68573ae commit 9f8289f

File tree

2 files changed

+128
-128
lines changed

2 files changed

+128
-128
lines changed
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
import Foundation
2+
@testable import Networking
3+
4+
final class MockPOSCatalogSyncRemote: POSCatalogSyncRemoteProtocol {
5+
// Dictionary mapping pageNumber to Result for products and variations.
6+
private(set) var productResults: [Int: Result<PagedItems<POSProduct>, Error>] = [:]
7+
private(set) var variationResults: [Int: Result<PagedItems<POSProductVariation>, Error>] = [:]
8+
private(set) var incrementalProductResults: [Int: Result<PagedItems<POSProduct>, Error>] = [:]
9+
private(set) var incrementalVariationResults: [Int: Result<PagedItems<POSProductVariation>, Error>] = [:]
10+
11+
private(set) var loadProductsCallCount = 0
12+
private(set) var loadProductVariationsCallCount = 0
13+
private(set) var loadIncrementalProductsCallCount = 0
14+
private(set) var loadIncrementalProductVariationsCallCount = 0
15+
16+
private(set) var lastIncrementalProductsModifiedAfter: Date?
17+
private(set) var lastIncrementalVariationsModifiedAfter: Date?
18+
19+
// Fallback result when no specific page result is configured
20+
private let fallbackResult = PagedItems(items: [] as [POSProduct], hasMorePages: false, totalItems: 0)
21+
private let fallbackVariationResult = PagedItems(items: [] as [POSProductVariation], hasMorePages: false, totalItems: 0)
22+
23+
// MARK: - Setup Methods for Full Sync
24+
25+
func setProductResult(pageNumber: Int, result: Result<PagedItems<POSProduct>, Error>) {
26+
productResults[pageNumber] = result
27+
}
28+
29+
func setVariationResult(pageNumber: Int, result: Result<PagedItems<POSProductVariation>, Error>) {
30+
variationResults[pageNumber] = result
31+
}
32+
33+
func setProductResults(_ results: [PagedItems<POSProduct>]) {
34+
for (index, pagedItems) in results.enumerated() {
35+
productResults[index + 1] = .success(pagedItems)
36+
}
37+
}
38+
39+
func setVariationResults(_ results: [PagedItems<POSProductVariation>]) {
40+
for (index, pagedItems) in results.enumerated() {
41+
variationResults[index + 1] = .success(pagedItems)
42+
}
43+
}
44+
45+
// MARK: - Setup Methods for Incremental Sync
46+
47+
func setIncrementalProductResult(pageNumber: Int, result: Result<PagedItems<POSProduct>, Error>) {
48+
incrementalProductResults[pageNumber] = result
49+
}
50+
51+
func setIncrementalVariationResult(pageNumber: Int, result: Result<PagedItems<POSProductVariation>, Error>) {
52+
incrementalVariationResults[pageNumber] = result
53+
}
54+
55+
func setIncrementalProductResults(_ results: [PagedItems<POSProduct>]) {
56+
for (index, pagedItems) in results.enumerated() {
57+
incrementalProductResults[index + 1] = .success(pagedItems)
58+
}
59+
}
60+
61+
func setIncrementalVariationResults(_ results: [PagedItems<POSProductVariation>]) {
62+
for (index, pagedItems) in results.enumerated() {
63+
incrementalVariationResults[index + 1] = .success(pagedItems)
64+
}
65+
}
66+
67+
// MARK: - Protocol Methods - Incremental Sync
68+
69+
func loadProducts(modifiedAfter: Date, siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProduct> {
70+
loadIncrementalProductsCallCount += 1
71+
lastIncrementalProductsModifiedAfter = modifiedAfter
72+
73+
if let result = incrementalProductResults[pageNumber] {
74+
switch result {
75+
case .success(let pagedItems):
76+
return pagedItems
77+
case .failure(let error):
78+
throw error
79+
}
80+
}
81+
return fallbackResult
82+
}
83+
84+
func loadProductVariations(modifiedAfter: Date, siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProductVariation> {
85+
loadIncrementalProductVariationsCallCount += 1
86+
lastIncrementalVariationsModifiedAfter = modifiedAfter
87+
88+
if let result = incrementalVariationResults[pageNumber] {
89+
switch result {
90+
case .success(let pagedItems):
91+
return pagedItems
92+
case .failure(let error):
93+
throw error
94+
}
95+
}
96+
return fallbackVariationResult
97+
}
98+
99+
// MARK: - Protocol Methods - Full Sync
100+
101+
func loadProducts(siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProduct> {
102+
loadProductsCallCount += 1
103+
104+
if let result = productResults[pageNumber] {
105+
switch result {
106+
case .success(let pagedItems):
107+
return pagedItems
108+
case .failure(let error):
109+
throw error
110+
}
111+
}
112+
return fallbackResult
113+
}
114+
115+
func loadProductVariations(siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProductVariation> {
116+
loadProductVariationsCallCount += 1
117+
118+
if let result = variationResults[pageNumber] {
119+
switch result {
120+
case .success(let pagedItems):
121+
return pagedItems
122+
case .failure(let error):
123+
throw error
124+
}
125+
}
126+
return fallbackVariationResult
127+
}
128+
}

Modules/Tests/YosemiteTests/Tools/POS/POSCatalogFullSyncServiceTests.swift

Lines changed: 0 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -170,134 +170,6 @@ struct POSCatalogFullSyncServiceTests {
170170
}
171171
}
172172

173-
// MARK: - Mock POSCatalogSyncRemote
174-
175-
final class MockPOSCatalogSyncRemote: POSCatalogSyncRemoteProtocol {
176-
// Dictionary mapping pageNumber to Result for products and variations.
177-
private(set) var productResults: [Int: Result<PagedItems<POSProduct>, Error>] = [:]
178-
private(set) var variationResults: [Int: Result<PagedItems<POSProductVariation>, Error>] = [:]
179-
private(set) var incrementalProductResults: [Int: Result<PagedItems<POSProduct>, Error>] = [:]
180-
private(set) var incrementalVariationResults: [Int: Result<PagedItems<POSProductVariation>, Error>] = [:]
181-
182-
private(set) var loadProductsCallCount = 0
183-
private(set) var loadProductVariationsCallCount = 0
184-
private(set) var loadIncrementalProductsCallCount = 0
185-
private(set) var loadIncrementalProductVariationsCallCount = 0
186-
187-
private(set) var lastIncrementalProductsModifiedAfter: Date?
188-
private(set) var lastIncrementalVariationsModifiedAfter: Date?
189-
190-
// Fallback result when no specific page result is configured
191-
private let fallbackResult = PagedItems(items: [] as [POSProduct], hasMorePages: false, totalItems: 0)
192-
private let fallbackVariationResult = PagedItems(items: [] as [POSProductVariation], hasMorePages: false, totalItems: 0)
193-
194-
// MARK: - Setup Methods for Full Sync
195-
196-
func setProductResult(pageNumber: Int, result: Result<PagedItems<POSProduct>, Error>) {
197-
productResults[pageNumber] = result
198-
}
199-
200-
func setVariationResult(pageNumber: Int, result: Result<PagedItems<POSProductVariation>, Error>) {
201-
variationResults[pageNumber] = result
202-
}
203-
204-
func setProductResults(_ results: [PagedItems<POSProduct>]) {
205-
for (index, pagedItems) in results.enumerated() {
206-
productResults[index + 1] = .success(pagedItems)
207-
}
208-
}
209-
210-
func setVariationResults(_ results: [PagedItems<POSProductVariation>]) {
211-
for (index, pagedItems) in results.enumerated() {
212-
variationResults[index + 1] = .success(pagedItems)
213-
}
214-
}
215-
216-
// MARK: - Setup Methods for Incremental Sync
217-
218-
func setIncrementalProductResult(pageNumber: Int, result: Result<PagedItems<POSProduct>, Error>) {
219-
incrementalProductResults[pageNumber] = result
220-
}
221-
222-
func setIncrementalVariationResult(pageNumber: Int, result: Result<PagedItems<POSProductVariation>, Error>) {
223-
incrementalVariationResults[pageNumber] = result
224-
}
225-
226-
func setIncrementalProductResults(_ results: [PagedItems<POSProduct>]) {
227-
for (index, pagedItems) in results.enumerated() {
228-
incrementalProductResults[index + 1] = .success(pagedItems)
229-
}
230-
}
231-
232-
func setIncrementalVariationResults(_ results: [PagedItems<POSProductVariation>]) {
233-
for (index, pagedItems) in results.enumerated() {
234-
incrementalVariationResults[index + 1] = .success(pagedItems)
235-
}
236-
}
237-
238-
// MARK: - Protocol Methods - Incremental Sync
239-
240-
func loadProducts(modifiedAfter: Date, siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProduct> {
241-
loadIncrementalProductsCallCount += 1
242-
lastIncrementalProductsModifiedAfter = modifiedAfter
243-
244-
if let result = incrementalProductResults[pageNumber] {
245-
switch result {
246-
case .success(let pagedItems):
247-
return pagedItems
248-
case .failure(let error):
249-
throw error
250-
}
251-
}
252-
return fallbackResult
253-
}
254-
255-
func loadProductVariations(modifiedAfter: Date, siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProductVariation> {
256-
loadIncrementalProductVariationsCallCount += 1
257-
lastIncrementalVariationsModifiedAfter = modifiedAfter
258-
259-
if let result = incrementalVariationResults[pageNumber] {
260-
switch result {
261-
case .success(let pagedItems):
262-
return pagedItems
263-
case .failure(let error):
264-
throw error
265-
}
266-
}
267-
return fallbackVariationResult
268-
}
269-
270-
// MARK: - Protocol Methods - Full Sync
271-
272-
func loadProducts(siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProduct> {
273-
loadProductsCallCount += 1
274-
275-
if let result = productResults[pageNumber] {
276-
switch result {
277-
case .success(let pagedItems):
278-
return pagedItems
279-
case .failure(let error):
280-
throw error
281-
}
282-
}
283-
return fallbackResult
284-
}
285-
286-
func loadProductVariations(siteID: Int64, pageNumber: Int) async throws -> PagedItems<POSProductVariation> {
287-
loadProductVariationsCallCount += 1
288-
289-
if let result = variationResults[pageNumber] {
290-
switch result {
291-
case .success(let pagedItems):
292-
return pagedItems
293-
case .failure(let error):
294-
throw error
295-
}
296-
}
297-
return fallbackVariationResult
298-
}
299-
}
300-
301173
// MARK: - Mock POSCatalogPersistenceService
302174

303175
private final class MockPOSCatalogPersistenceService: POSCatalogPersistenceServiceProtocol {

0 commit comments

Comments
 (0)