diff --git a/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/BaseMigratingSingleValueStorage.swift b/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/BaseMigratingSingleValueStorage.swift index f658f27c..4661d882 100644 --- a/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/BaseMigratingSingleValueStorage.swift +++ b/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/BaseMigratingSingleValueStorage.swift @@ -50,12 +50,9 @@ where SourceStorage.ErrorType == TargetStorage.ErrorType, } open func store(value: ValueType) -> Result { - let _ = sourceStorage.deleteValue() - .flatMapError { - errorLogger.log(error: $0, file: #file, line: #line) - - return .failure($0) - } + if case let .failure(error) = sourceStorage.deleteValue(), !error.isValueNotFound { + errorLogger.log(error: error, file: #file, line: #line) + } return targetStorage.store(value: value) } @@ -63,12 +60,9 @@ where SourceStorage.ErrorType == TargetStorage.ErrorType, open func getValue() -> Result { targetStorage.getValue() .flatMap { - let _ = sourceStorage.deleteValue() - .flatMapError { - errorLogger.log(error: $0, file: #file, line: #line) - - return .failure($0) - } + if case let .failure(error) = sourceStorage.deleteValue(), !error.isValueNotFound { + errorLogger.log(error: error, file: #file, line: #line) + } return .success($0) } @@ -87,6 +81,13 @@ where SourceStorage.ErrorType == TargetStorage.ErrorType, open func deleteValue() -> Result { targetStorage.deleteValue() + .flatMapError { + if !$0.isValueNotFound { + errorLogger.log(error: $0, file: #file, line: #line) + } + + return sourceStorage.deleteValue() + } .flatMap { if sourceStorage.hasStoredValue() { return sourceStorage.deleteValue() @@ -94,11 +95,6 @@ where SourceStorage.ErrorType == TargetStorage.ErrorType, return .success($0) } - .flatMapError { - errorLogger.log(error: $0, file: #file, line: #line) - - return sourceStorage.deleteValue() - } } } diff --git a/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/Container/BaseCodableMigratingStorageContainer.swift b/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/Container/BaseCodableMigratingStorageContainer.swift index 4986607e..741ed211 100644 --- a/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/Container/BaseCodableMigratingStorageContainer.swift +++ b/TIFoundationUtils/DataStorage/Sources/SingleValueStorage/Implementations/MigratableStorage/Container/BaseCodableMigratingStorageContainer.swift @@ -28,10 +28,6 @@ open class BaseCodableMigratingStorageContainer, encoder: CodableKeyValueEncoder) -> Result { - let _ = removeSourceValue(forKey: key) - .flatMapError { - errorLogger.log(error: $0, file: #file, line: #line) - - return .failure($0) - } + if case let .failure(error) = removeSourceValue(forKey: key), !error.isValueNotFound { + errorLogger.log(error: error, file: #file, line: #line) + } return targetStorage.set(encodableObject: encodableObject, forKey: key, encoder: encoder) } @@ -83,7 +77,9 @@ where SourceStorage: CodableKeyValueStorage, TargetStorage: CodableKeyValueStora .flatMapError { _ in .success(value) } } .flatMapError { - errorLogger.log(error: $0, file: #file, line: #line) + if !$0.isValueNotFound { + errorLogger.log(error: $0, file: #file, line: #line) + } return removeSourceValue(forKey: key) } diff --git a/Tests/TIFoundationUtilsTests/MigratingBackingStoreTests.swift b/Tests/TIFoundationUtilsTests/MigratingBackingStoreTests.swift index bf368892..baea7de3 100644 --- a/Tests/TIFoundationUtilsTests/MigratingBackingStoreTests.swift +++ b/Tests/TIFoundationUtilsTests/MigratingBackingStoreTests.swift @@ -33,8 +33,6 @@ final class MigratingBackingStoreTests: XCTestCase { override func setUp() { profile = nil - let _ = MockMigratingStorageContainer.defaultContainer.sourceStorage.removeValue(forKey: .profile) - let _ = MockMigratingStorageContainer.defaultContainer.targetStorage.removeValue(forKey: .profile) } // MARK: - Read Tests diff --git a/Tests/TIFoundationUtilsTests/MigratingSingleValueStorageTests.swift b/Tests/TIFoundationUtilsTests/MigratingSingleValueStorageTests.swift index 3f3ceab5..69a6a280 100644 --- a/Tests/TIFoundationUtilsTests/MigratingSingleValueStorageTests.swift +++ b/Tests/TIFoundationUtilsTests/MigratingSingleValueStorageTests.swift @@ -66,7 +66,7 @@ final class MigratingSingleValueStorageTests: XCTestCase { let _ = targetRefreshTokenStorage.store(value: newToken) XCTAssertEqual(try refreshToken.getValue().get(), newToken) - XCTAssertNotNil(MockStorageLogger.defaultLogger.getError()) + XCTAssertNil(MockStorageLogger.defaultLogger.getError()) XCTAssertThrowsError(try sourceRefreshTokenStorage.getValue().get()) XCTAssertNoThrow(try targetRefreshTokenStorage.getValue().get()) } @@ -120,7 +120,7 @@ final class MigratingSingleValueStorageTests: XCTestCase { let _ = targetRefreshTokenStorage.store(value: newToken) XCTAssertNoThrow(try refreshToken.store(value: currentToken).get()) - XCTAssertNotNil(MockStorageLogger.defaultLogger.getError()) + XCTAssertNil(MockStorageLogger.defaultLogger.getError()) XCTAssertThrowsError(try sourceRefreshTokenStorage.getValue().get()) XCTAssertEqual(try targetRefreshTokenStorage.getValue().get(), currentToken) } @@ -145,7 +145,7 @@ final class MigratingSingleValueStorageTests: XCTestCase { let currentToken = "token" XCTAssertNoThrow(try refreshToken.store(value: currentToken).get()) - XCTAssertNotNil(MockStorageLogger.defaultLogger.getError()) + XCTAssertNil(MockStorageLogger.defaultLogger.getError()) XCTAssertThrowsError(try sourceRefreshTokenStorage.getValue().get()) XCTAssertEqual(try targetRefreshTokenStorage.getValue().get(), currentToken) } @@ -186,7 +186,7 @@ final class MigratingSingleValueStorageTests: XCTestCase { let _ = sourceRefreshTokenStorage.store(value: oldToken) XCTAssertNoThrow(try refreshToken.deleteValue().get()) - XCTAssertNotNil(MockStorageLogger.defaultLogger.getError()) + XCTAssertNil(MockStorageLogger.defaultLogger.getError()) XCTAssertThrowsError(try sourceRefreshTokenStorage.getValue().get()) XCTAssertThrowsError(try targetRefreshTokenStorage.getValue().get()) } @@ -195,7 +195,7 @@ final class MigratingSingleValueStorageTests: XCTestCase { // PostCondition - source: ❌ target: ❌ func testDeleteValueWithNoValues() throws { XCTAssertThrowsError(try refreshToken.deleteValue().get()) - XCTAssertNotNil(MockStorageLogger.defaultLogger.getError()) + XCTAssertNil(MockStorageLogger.defaultLogger.getError()) XCTAssertThrowsError(try sourceRefreshTokenStorage.getValue().get()) XCTAssertThrowsError(try targetRefreshTokenStorage.getValue().get()) } diff --git a/Tests/TIFoundationUtilsTests/Mocks/MockMigratingCodableBackingStore.swift b/Tests/TIFoundationUtilsTests/Mocks/MockMigratingCodableBackingStore.swift index d2bf74aa..f336e1be 100644 --- a/Tests/TIFoundationUtilsTests/Mocks/MockMigratingCodableBackingStore.swift +++ b/Tests/TIFoundationUtilsTests/Mocks/MockMigratingCodableBackingStore.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2020 Touch Instinct +// Copyright (c) 2023 Touch Instinct // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the Software), to deal