Skip to content

Commit 7b4c620

Browse files
committed
Update Yosemite tests to use wrapped dotcomerror
1 parent 1a3222d commit 7b4c620

9 files changed

+111
-46
lines changed

Modules/Tests/YosemiteTests/Stores/CardPresentPaymentStoreTests.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,9 @@ final class CardPresentPaymentStoreTests: XCTestCase {
497497
XCTAssert(viewStorage.countObjects(ofType: Storage.WCPayCharge.self, matching: nil) == 2)
498498

499499
network.simulateError(requestUrlSuffix: "payments/charges/\(sampleErrorChargeID)",
500-
error: DotcomError.unknown(code: "beep", message: "boop"))
500+
error: NetworkError.from(
501+
dotcomError: DotcomError.unknown(code: "beep", message: "boop"),
502+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil)))
501503

502504
let _: Result<Yosemite.WCPayCharge, Error> = waitFor { [self] promise in
503505
let action = CardPresentPaymentAction.fetchWCPayCharge(siteID: self.sampleSiteID, chargeID: self.sampleErrorChargeID, onCompletion: { result in

Modules/Tests/YosemiteTests/Stores/JustInTimeMessageStoreTests.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ final class JustInTimeMessageStoreTests: XCTestCase {
8484

8585
func test_loadMessage_then_it_returns_error_upon_response_error() {
8686
// Given a stubbed generic-error network response
87-
network.simulateError(requestUrlSuffix: "jetpack/v4/jitm", error: DotcomError.noRestRoute)
87+
network.simulateError(requestUrlSuffix: "jetpack/v4/jitm", error: NetworkError.from(
88+
dotcomError: DotcomError.noRestRoute,
89+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 404, response: nil)))
8890

8991
// When dispatching a `loadAllInboxNotes` action
9092
let result = waitFor { promise in
@@ -100,9 +102,9 @@ final class JustInTimeMessageStoreTests: XCTestCase {
100102
// Then no inbox notes should be stored
101103
XCTAssert(result.isFailure)
102104
guard case .failure(let error) = result,
103-
let error = error as? DotcomError else {
104-
return XCTFail("Expected error not recieved")
105+
let networkError = error as? NetworkError else {
106+
return XCTFail("Expected NetworkError not received")
105107
}
106-
assertEqual(DotcomError.noRestRoute, error)
108+
XCTAssertEqual(networkError.apiErrorCode, "rest_no_route")
107109
}
108110
}

Modules/Tests/YosemiteTests/Stores/MediaStoreTests.swift

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ final class MediaStoreTests: XCTestCase {
7272
// Given
7373
let mediaID: Int64 = 22
7474
let remote = MockMediaRemote()
75-
remote.whenLoadingMedia(siteID: sampleSiteID, thenReturn: .failure(DotcomError.unauthorized))
75+
remote.whenLoadingMedia(siteID: sampleSiteID, thenReturn: .failure(NetworkError.from(
76+
dotcomError: DotcomError.unauthorized,
77+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 401, response: nil))))
7678
let mediaStore = MediaStore(dispatcher: dispatcher,
7779
storageManager: storageManager,
7880
network: network,
@@ -92,8 +94,8 @@ final class MediaStoreTests: XCTestCase {
9294
// Then
9395
XCTAssertEqual(remote.invocations, [.loadMedia(siteID: sampleSiteID, mediaID: mediaID)])
9496

95-
let error = try XCTUnwrap(result.failure as? DotcomError)
96-
XCTAssertEqual(error, .unauthorized)
97+
let error = try XCTUnwrap(result.failure as? NetworkError)
98+
XCTAssertEqual(error.apiErrorCode, "unauthorized")
9799
}
98100

99101
// MARK: test cases for `MediaAction.retrieveMediaLibrary`
@@ -310,7 +312,9 @@ final class MediaStoreTests: XCTestCase {
310312
func test_retrieveMediaLibrary_from_jcp_site_returns_error_upon_empty_response() throws {
311313
// Given
312314
let remote = MockMediaRemote()
313-
remote.whenLoadingMediaLibrary(siteID: sampleSiteID, thenReturn: .failure(DotcomError.unauthorized))
315+
remote.whenLoadingMediaLibrary(siteID: sampleSiteID, thenReturn: .failure(NetworkError.from(
316+
dotcomError: DotcomError.unauthorized,
317+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 401, response: nil))))
314318
let mediaStore = MediaStore(dispatcher: dispatcher,
315319
storageManager: storageManager,
316320
network: network,
@@ -332,8 +336,8 @@ final class MediaStoreTests: XCTestCase {
332336
// Then
333337
XCTAssertEqual(remote.invocations, [.loadMediaLibrary(siteID: sampleSiteID)])
334338

335-
let error = try XCTUnwrap(result.failure as? DotcomError)
336-
XCTAssertEqual(error, .unauthorized)
339+
let error = try XCTUnwrap(result.failure as? NetworkError)
340+
XCTAssertEqual(error.apiErrorCode, "unauthorized")
337341
}
338342

339343
// MARK: test cases for `MediaAction.uploadMedia`
@@ -423,7 +427,9 @@ final class MediaStoreTests: XCTestCase {
423427
}()
424428

425429
let remote = MockMediaRemote()
426-
remote.whenUploadingMedia(siteID: sampleSiteID, thenReturn: .failure(DotcomError.unauthorized))
430+
remote.whenUploadingMedia(siteID: sampleSiteID, thenReturn: .failure(NetworkError.from(
431+
dotcomError: DotcomError.unauthorized,
432+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 401, response: nil))))
427433

428434
let mediaStore = createMediaStoreAndExportableMedia(at: targetURL, fileManager: fileManager, remote: remote)
429435

@@ -543,7 +549,9 @@ final class MediaStoreTests: XCTestCase {
543549
}()
544550

545551
let remote = MockMediaRemote()
546-
remote.whenUploadingMedia(siteID: sampleSiteID, thenReturn: .failure(DotcomError.unauthorized))
552+
remote.whenUploadingMedia(siteID: sampleSiteID, thenReturn: .failure(NetworkError.from(
553+
dotcomError: DotcomError.unauthorized,
554+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 401, response: nil))))
547555

548556
let mediaStore = createMediaStoreAndExportableMedia(at: targetURL, fileManager: fileManager, remote: remote)
549557

@@ -566,8 +574,8 @@ final class MediaStoreTests: XCTestCase {
566574
// Then
567575
XCTAssertEqual(remote.invocations, [.uploadMedia(siteID: sampleSiteID)])
568576

569-
let error = try XCTUnwrap(result.failure as? DotcomError)
570-
XCTAssertEqual(error, .unauthorized)
577+
let error = try XCTUnwrap(result.failure as? NetworkError)
578+
XCTAssertEqual(error.apiErrorCode, "unauthorized")
571579
}
572580

573581
// MARK: test cases for `MediaAction.uploadFile`
@@ -666,7 +674,9 @@ final class MediaStoreTests: XCTestCase {
666674
func test_updateProductID_returns_error_upon_response_error() throws {
667675
// Given
668676
let remote = MockMediaRemote()
669-
remote.whenUpdatingProductID(siteID: sampleSiteID, thenReturn: .failure(DotcomError.unauthorized))
677+
remote.whenUpdatingProductID(siteID: sampleSiteID, thenReturn: .failure(NetworkError.from(
678+
dotcomError: DotcomError.unauthorized,
679+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 401, response: nil))))
670680
let mediaStore = MediaStore(dispatcher: dispatcher,
671681
storageManager: storageManager,
672682
network: network,
@@ -683,8 +693,8 @@ final class MediaStoreTests: XCTestCase {
683693
}
684694

685695
// Then
686-
let error = try XCTUnwrap(result.failure as? DotcomError)
687-
XCTAssertEqual(error, .unauthorized)
696+
let error = try XCTUnwrap(result.failure as? NetworkError)
697+
XCTAssertEqual(error.apiErrorCode, "unauthorized")
688698
}
689699

690700
func test_toMedia_converts_rendered_title_to_file_name_if_media_detail_is_not_available() {

Modules/Tests/YosemiteTests/Stores/ProductCategoryStoreTests.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,15 @@ final class ProductCategoryStoreTests: XCTestCase {
349349

350350
func test_synchronizeProductCategory_fails_with_resourceDoesNotExist_then_it_provides_right_error() {
351351
let categoryID: Int64 = 123
352-
network.simulateError(requestUrlSuffix: "products/categories/\(categoryID)", error: DotcomError.resourceDoesNotExist)
352+
let errorData =
353+
"""
354+
{
355+
"code": "resource_not_found",
356+
"message": "Resource does not exist"
357+
}
358+
""".data(using: .utf8)!
359+
let networkError = NetworkError.notFound(response: errorData)
360+
network.simulateError(requestUrlSuffix: "products/categories/\(categoryID)", error: networkError)
353361

354362
let retrievedError: Error? = waitFor { [weak self] promise in
355363
guard let self = self else {

Modules/Tests/YosemiteTests/Stores/ProductStoreTests.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,9 @@ final class ProductStoreTests: XCTestCase {
134134
func test_addProduct_returns_error_upon_network_error() {
135135
// Arrange
136136
let remote = MockProductsRemote()
137-
remote.whenAddingProduct(siteID: sampleSiteID, thenReturn: .failure(DotcomError.requestFailed))
137+
remote.whenAddingProduct(siteID: sampleSiteID, thenReturn: .failure(NetworkError.from(
138+
dotcomError: DotcomError.requestFailed,
139+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))))
138140
let productStore = ProductStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)
139141

140142
// Action
@@ -236,7 +238,9 @@ final class ProductStoreTests: XCTestCase {
236238
func test_deleteProduct_returns_error_upon_network_error() {
237239
// Arrange
238240
let remote = MockProductsRemote()
239-
remote.whenDeletingProduct(siteID: sampleSiteID, thenReturn: .failure(DotcomError.requestFailed))
241+
remote.whenDeletingProduct(siteID: sampleSiteID, thenReturn: .failure(NetworkError.from(
242+
dotcomError: DotcomError.requestFailed,
243+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))))
240244
let productStore = ProductStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)
241245

242246
// Action
@@ -763,10 +767,16 @@ final class ProductStoreTests: XCTestCase {
763767
productStore.upsertStoredProduct(readOnlyProduct: sampleProduct(), in: viewStorage)
764768
XCTAssertEqual(viewStorage.countObjects(ofType: Storage.Product.self), 1)
765769

766-
let dotComError = DotcomError.unknown(code: ProductLoadError.ErrorCode.invalidID.rawValue, message: nil)
770+
let errorData =
771+
"""
772+
{"code": "\(ProductLoadError.ErrorCode.invalidID.rawValue)",
773+
"message": "Product not found"}
774+
"""
775+
.data(using: .utf8)!
776+
let networkError = NetworkError.unacceptableStatusCode(statusCode: 404, response: errorData)
767777

768778
// Action
769-
network.simulateError(requestUrlSuffix: "products/282", error: dotComError)
779+
network.simulateError(requestUrlSuffix: "products/282", error: networkError)
770780
let result: Result<Yosemite.Product, Error> = waitFor { promise in
771781
let action = ProductAction.retrieveProduct(siteID: self.sampleSiteID, productID: self.sampleProductID) { result in
772782
promise(result)

Modules/Tests/YosemiteTests/Stores/SiteStoreTests.swift

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import XCTest
2+
import enum Networking.NetworkError
23
import enum Networking.DotcomError
34
import enum Networking.SiteCreationError
45
import enum Networking.WordPressApiError
@@ -125,8 +126,15 @@ final class SiteStoreTests: XCTestCase {
125126

126127
func test_createSite_returns_domainExists_error_on_Dotcom_blog_name_exists_error() throws {
127128
// Given
129+
let errorData =
130+
"""
131+
{
132+
"code": "blog_name_exists",
133+
"message": "Sorry, that site already exists!"
134+
}
135+
""".data(using: .utf8)!
128136
remote.whenCreatingSite(thenReturn: .failure(
129-
DotcomError.unknown(code: "blog_name_exists", message: "Sorry, that site already exists!")
137+
NetworkError.unacceptableStatusCode(statusCode: 400, response: errorData)
130138
))
131139

132140
// When
@@ -145,9 +153,15 @@ final class SiteStoreTests: XCTestCase {
145153

146154
func test_createSite_returns_invalidDomain_error_on_Dotcom_blog_name_error() throws {
147155
// Given
156+
let errorData = """
157+
{
158+
"code": "blog_name_only_lowercase_letters_and_numbers",
159+
"message": "Site names can only contain lowercase letters (a-z) and numbers."
160+
}
161+
"""
162+
.data(using: .utf8)!
148163
remote.whenCreatingSite(thenReturn: .failure(
149-
DotcomError.unknown(code: "blog_name_only_lowercase_letters_and_numbers",
150-
message: "Site names can only contain lowercase letters (a-z) and numbers.")
164+
NetworkError.unacceptableStatusCode(statusCode: 400, response: errorData)
151165
))
152166

153167
// When
@@ -232,7 +246,9 @@ final class SiteStoreTests: XCTestCase {
232246

233247
func test_enableFreeTrial_returns_error_on_failure() throws {
234248
// Given
235-
remote.whenEnablingFreeTrial(thenReturn: .failure(DotcomError.unknown(code: "error", message: nil)))
249+
remote.whenEnablingFreeTrial(thenReturn: .failure(NetworkError.from(
250+
dotcomError: DotcomError.unknown(code: "error", message: nil),
251+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))))
236252

237253
// When
238254
let result = waitFor { promise in
@@ -242,8 +258,8 @@ final class SiteStoreTests: XCTestCase {
242258
}
243259

244260
// Then
245-
let error = try XCTUnwrap(result.failure)
246-
XCTAssertEqual(error as? DotcomError, .unknown(code: "error", message: nil))
261+
let error = try XCTUnwrap(result.failure as? NetworkError)
262+
XCTAssertEqual(error.apiErrorCode, "error")
247263
}
248264

249265
// MARK: - `updateSiteTitle`
@@ -270,7 +286,9 @@ final class SiteStoreTests: XCTestCase {
270286
func test_updateSiteTitle_returns_error_on_failure() throws {
271287
// Given
272288
let siteID: Int64 = 123
273-
remote.whenUpdatingSiteTitle(thenReturn: .failure(DotcomError.unknown(code: "error", message: nil)))
289+
remote.whenUpdatingSiteTitle(thenReturn: .failure(NetworkError.from(
290+
dotcomError: DotcomError.unknown(code: "error", message: nil),
291+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))))
274292

275293
// When
276294
let result = waitFor { promise in
@@ -281,8 +299,8 @@ final class SiteStoreTests: XCTestCase {
281299

282300
// Then
283301
XCTAssertFalse(result.isSuccess)
284-
let error = try XCTUnwrap(result.failure)
285-
XCTAssertEqual(error as? DotcomError, .unknown(code: "error", message: nil))
302+
let error = try XCTUnwrap(result.failure as? NetworkError)
303+
XCTAssertEqual(error.apiErrorCode, "error")
286304
}
287305

288306
// MARK: - `uploadStoreProfilerAnswers`
@@ -307,7 +325,9 @@ final class SiteStoreTests: XCTestCase {
307325

308326
func test_uploadStoreProfilerAnswers_returns_error_on_failure() throws {
309327
// Given
310-
remote.whenUploadingStoreProfilerAnswers(thenReturn: .failure(DotcomError.unknown(code: "error", message: nil)))
328+
remote.whenUploadingStoreProfilerAnswers(thenReturn: .failure(NetworkError.from(
329+
dotcomError: DotcomError.unknown(code: "error", message: nil),
330+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))))
311331

312332
// When
313333
let result = waitFor { promise in
@@ -320,8 +340,8 @@ final class SiteStoreTests: XCTestCase {
320340
}
321341

322342
// Then
323-
let error = try XCTUnwrap(result.failure)
324-
XCTAssertEqual(error as? DotcomError, .unknown(code: "error", message: nil))
343+
let error = try XCTUnwrap(result.failure as? NetworkError)
344+
XCTAssertEqual(error.apiErrorCode, "error")
325345
}
326346

327347
// MARK: - `syncSiteByDomain`
@@ -348,9 +368,10 @@ final class SiteStoreTests: XCTestCase {
348368

349369
func test_syncSiteByDomain_returns_error_on_failure() throws {
350370
// Given
351-
let siteID: Int64 = 123
352371
let domain = "example.com"
353-
remote.whenLoadingSite(thenReturn: .failure(DotcomError.unknown(code: "error", message: nil)))
372+
remote.whenLoadingSite(thenReturn: .failure(NetworkError.from(
373+
dotcomError: DotcomError.unknown(code: "error", message: nil),
374+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))))
354375

355376
// When
356377
let result = waitFor { promise in
@@ -361,8 +382,8 @@ final class SiteStoreTests: XCTestCase {
361382

362383
// Then
363384
XCTAssertFalse(result.isSuccess)
364-
let error = try XCTUnwrap(result.failure)
365-
XCTAssertEqual(error as? DotcomError, .unknown(code: "error", message: nil))
385+
let error = try XCTUnwrap(result.failure as? NetworkError)
386+
XCTAssertEqual(error.apiErrorCode, "error")
366387
}
367388

368389
}

Modules/Tests/YosemiteTests/Stores/SiteVisitStatsStoreErrorTests.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,31 @@ import XCTest
44

55
class SiteStatsStoreErrorTests: XCTestCase {
66
func testNoPermissionError() {
7-
let remoteError = DotcomError.noStatsPermission
7+
let remoteError = NetworkError.from(
8+
dotcomError: DotcomError.noStatsPermission,
9+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 401, response: nil))
10+
811
let error = SiteStatsStoreError(error: remoteError)
912
XCTAssertEqual(error, .noPermission)
1013
}
1114

1215
func testStatsModuleDisabledError() {
13-
let remoteError = DotcomError.statsModuleDisabled
16+
let remoteError = NetworkError.from(
17+
dotcomError: DotcomError.statsModuleDisabled,
18+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))
1419
let error = SiteStatsStoreError(error: remoteError)
1520
XCTAssertEqual(error, .statsModuleDisabled)
1621
}
1722

1823
func testOtherDotcomError() {
19-
let remoteError = DotcomError.unknown(code: "invalid_blog", message: "This blog does not have Jetpack connected")
24+
let remoteError = NetworkError.from(
25+
dotcomError: DotcomError.unknown(code: "invalid_blog", message: "This blog does not have Jetpack connected"),
26+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))
2027
let error = SiteStatsStoreError(error: remoteError)
2128
XCTAssertEqual(error, .unknown)
2229
}
2330

24-
func testNonDotcomRemoteError() {
31+
func testNonNetworkRemoteError() {
2532
let remoteError = NSError(domain: "Woo", code: 404, userInfo: nil)
2633
let error = SiteStatsStoreError(error: remoteError)
2734
XCTAssertEqual(error, .unknown)

Modules/Tests/YosemiteTests/Stores/WooShippingStoreTests.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,9 @@ final class WooShippingStoreTests: XCTestCase {
193193
func test_deletePackage_returns_error_on_failure() throws {
194194
// Given
195195
let remote = MockWooShippingRemote()
196-
let error = DotcomError.requestFailed
196+
let error = NetworkError.from(
197+
dotcomError: DotcomError.requestFailed,
198+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 400, response: nil))
197199
remote.whenDeletePackage(siteID: sampleSiteID, thenReturn: .failure(error))
198200
let store = WooShippingStore(dispatcher: dispatcher, storageManager: storageManager, network: network, remote: remote)
199201

Modules/Tests/YosemiteTests/Tools/Payments/WooPaymentsPayoutServiceTests.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ final class WooPaymentsPayoutServiceTests: XCTestCase {
9999

100100
func testFetchPayoutsOverviewError() async {
101101
// Given
102-
let mockError = DotcomError.noRestRoute
102+
let mockError = NetworkError.from(
103+
dotcomError: DotcomError.noRestRoute,
104+
originalNetworkError: NetworkError.unacceptableStatusCode(statusCode: 404, response: nil))
103105
mockNetwork.simulateError(requestUrlSuffix: "payments/deposits/overview-all", error: mockError)
104106

105107
do {
@@ -108,7 +110,8 @@ final class WooPaymentsPayoutServiceTests: XCTestCase {
108110
XCTFail("Expected an error, but the call succeeded.")
109111
} catch {
110112
// Then
111-
XCTAssertEqual(error as? DotcomError, mockError)
113+
let networkError = error as? NetworkError
114+
XCTAssertEqual(networkError?.apiErrorCode, "rest_no_route")
112115
}
113116
}
114117
}

0 commit comments

Comments
 (0)