diff --git a/Sources/Amplitude/Utilities/PersistentStorageResponseHandler.swift b/Sources/Amplitude/Utilities/PersistentStorageResponseHandler.swift index 2c5cdf9..2d4ea0c 100644 --- a/Sources/Amplitude/Utilities/PersistentStorageResponseHandler.swift +++ b/Sources/Amplitude/Utilities/PersistentStorageResponseHandler.swift @@ -45,8 +45,10 @@ class PersistentStorageResponseHandler: ResponseHandler { return } - if events.count == 1 { - let error = data["error"] as? String ?? "" + let error = data["error"] as? String ?? "" + + let isInvalidApiKey = error == "Invalid API key: \(configuration.apiKey)" + if events.count == 1 || isInvalidApiKey { triggerEventsCallback( events: events, code: HttpClient.HttpStatus.BAD_REQUEST.rawValue, @@ -81,7 +83,6 @@ class PersistentStorageResponseHandler: ResponseHandler { } } - let error = data["error"] as? String ?? "" triggerEventsCallback(events: eventsToDrop, code: HttpClient.HttpStatus.BAD_REQUEST.rawValue, message: error) eventsToRetry.forEach { event in diff --git a/Tests/AmplitudeTests/Utilities/PersistentStorageResponseHandlerTests.swift b/Tests/AmplitudeTests/Utilities/PersistentStorageResponseHandlerTests.swift index e2922cf..f4a2693 100644 --- a/Tests/AmplitudeTests/Utilities/PersistentStorageResponseHandlerTests.swift +++ b/Tests/AmplitudeTests/Utilities/PersistentStorageResponseHandlerTests.swift @@ -129,4 +129,31 @@ final class PersistentStorageResponseHandlerTests: XCTestCase { "removeEventCallback(insertId: e3e4488d-6877-4775-ae88-344df7ccd5d8)" ) } + + func testInvalidAPIKey() { + // 2 valid events + let eventsString = """ + [ + {"event_type":"valid-event","insert_id":"1621D025-A754-42EB-9305-307F36217C78","user_id":"test-user"}, + {"event_type":"valid-event","insert_id":"AE7550E1-C8F0-4583-81D3-0561830A09DD","user_id":"test-user"}, + ] + """ + + let fakePersistentStorage = FakePersistentStorage(storagePrefix: "storage", + logger: logger, + diagonostics: diagonostics) + let handler = PersistentStorageResponseHandler( + configuration: configuration, + storage: fakePersistentStorage, + eventPipeline: eventPipeline, + eventBlock: eventBlock, + eventsString: eventsString + ) + + handler.handleBadRequestResponse(data: ["error": "Invalid API key: \(configuration.apiKey)"]) + XCTAssertEqual( + fakePersistentStorage.haveBeenCalledWith[0], + "remove(eventBlock: \(eventBlock.absoluteURL))" + ) + } }