diff --git a/NodeKit/NodeKit/CacheNode/ETag/URLETagSaverNode.swift b/NodeKit/NodeKit/CacheNode/ETag/URLETagSaverNode.swift index 33f30294..a7e7033b 100644 --- a/NodeKit/NodeKit/CacheNode/ETag/URLETagSaverNode.swift +++ b/NodeKit/NodeKit/CacheNode/ETag/URLETagSaverNode.swift @@ -13,7 +13,7 @@ import Foundation /// Содержит указатель на UserDefaults-хранилище для eTag токенов. extension UserDefaults { /// Хранилище для eTag-токенов - static var etagStorage = UserDefaults(suiteName: "\(String(describing: self.self))") + static var etagStorage = UserDefaults(suiteName: "\(String(describing: UserDefaults.self))") } /// Этот узел сохраняет пришедшие eTag-токены. diff --git a/NodeKit/NodeKit/CacheNode/URLCacheWriterNode.swift b/NodeKit/NodeKit/CacheNode/URLCacheWriterNode.swift index d2026e14..3af7b0b1 100644 --- a/NodeKit/NodeKit/CacheNode/URLCacheWriterNode.swift +++ b/NodeKit/NodeKit/CacheNode/URLCacheWriterNode.swift @@ -13,6 +13,8 @@ import Foundation /// в которой не учитываются server-side политики и прочее. /// Подразумечается, что этот узел не входит в цепочку, а является листом одного из узлов. open class URLCacheWriterNode: AsyncNode { + + public init() { } /// Формирует `CachedURLResponse` с политикой `.allowed`, сохраняет его в кэш, /// а затем возвращает сообщение об успешной операции. diff --git a/NodeKit/NodeKit/Layers/Utils/AccessSafe/AccessSafeNode.swift b/NodeKit/NodeKit/Layers/Utils/AccessSafe/AccessSafeNode.swift index 3d7125e7..e43d6979 100644 --- a/NodeKit/NodeKit/Layers/Utils/AccessSafe/AccessSafeNode.swift +++ b/NodeKit/NodeKit/Layers/Utils/AccessSafe/AccessSafeNode.swift @@ -47,10 +47,10 @@ public enum AccessSafeNodeError: Error { /// - SeeAlso: /// - `TransportLayerNode` /// - `TokenRefresherNode` -open class AccessSafeNode: AsyncNode { +open class AccessSafeNode: AsyncNode { /// Следующий в цепочке узел. - public var next: any TransportLayerNode + public var next: any AsyncNode /// Цепочка для обновления токена. /// Эта цепочкаа в самом начале должна выключать узел, который имплементирует заморозку запросов и их возобновление. @@ -62,7 +62,7 @@ open class AccessSafeNode: AsyncNode { /// - Parameters: /// - next: Следующий в цепочке узел. /// - updateTokenChain: Цепочка для обновления токена. - public init(next: some TransportLayerNode, updateTokenChain: some AsyncNode) { + public init(next: some AsyncNode, updateTokenChain: some AsyncNode) { self.next = next self.updateTokenChain = updateTokenChain } @@ -72,7 +72,7 @@ open class AccessSafeNode: AsyncNode { open func process( _ data: TransportURLRequest, logContext: LoggingContextProtocol - ) async -> NodeResult { + ) async -> NodeResult { await .withCheckedCancellation { await next.process(data, logContext: logContext) } @@ -91,7 +91,7 @@ open class AccessSafeNode: AsyncNode { private func processWithTokenUpdate( _ data: TransportURLRequest, logContext: LoggingContextProtocol - ) async -> NodeResult { + ) async -> NodeResult { await .withCheckedCancellation { await updateTokenChain.process((), logContext: logContext) .asyncFlatMap { await next.process(data, logContext: logContext) } diff --git a/NodeKit/NodeKitMock/Builder/ChainBuilderMock.swift b/NodeKit/NodeKitMock/Builder/ChainBuilderMock.swift index 133be0b0..34a888ef 100644 --- a/NodeKit/NodeKitMock/Builder/ChainBuilderMock.swift +++ b/NodeKit/NodeKitMock/Builder/ChainBuilderMock.swift @@ -10,9 +10,7 @@ import Foundation -open class ChainBuilderMock: ChainBuilder { - - public init() { } +open class ChainBuilderMock: ChainConfigBuilderMock, ChainBuilder { public var invokedRoute = false public var invokedRouteCount = 0 diff --git a/NodeKit/NodeKitTests/IntegrationTests/Infrastructure/Nodes/CustomServerErrorProcessorNode.swift b/NodeKit/NodeKitTests/IntegrationTests/Infrastructure/Nodes/CustomServerErrorProcessorNode.swift deleted file mode 100644 index 02402c47..00000000 --- a/NodeKit/NodeKitTests/IntegrationTests/Infrastructure/Nodes/CustomServerErrorProcessorNode.swift +++ /dev/null @@ -1,58 +0,0 @@ -// CustomServerErrorProcessorNode.swift -// IntegrationTests -// -// Created by Vladislav Krupenko on 03.04.2020. -// Copyright © 2020 Кравченков Александр. All rights reserved. -// -import Foundation - -@testable -import NodeKit - -/// HTTP ошибки. -/// -/// - badRequest: 400-HTTP код ответа. -/// - unauthorized: 401 HTTP-код ответа. -/// - forbidden: 403 HTTP-код ответа. -/// - notFound: 404 HTTP-код ответа. -/// - internalServerError: 500 HTTP-код ответа. -public enum CustomServerProcessorNodeError: Error { - case userExist -} - -/// Этот узел обрабатывает ответ сервера и в случае статус кодов, -/// которые соответствуют ошибкам, перечисленным в `ResponseHttpErrorProcessorNodeError` -/// В случае, если коды не совпали в необходимыми,то управление переходит следующему узлу. -open class CustomServerErrorProcessorNode: Node { - - public typealias ServerError = CustomServerProcessorNodeError - - /// Следующий узел для обработки. - public var next: Node - - /// Инициаллизирует объект. - /// - /// - Parameter next: Следующий узел для обработки. - public init(next: Node) { - self.next = next - } - - /// Сопосотавляет HTTP-коды с заданными и в случае их несовпадения передает управление дальше. - /// В противном случае возвращает `HttpError` - /// - /// - Parameter data: Модель ответа сервера. - open override func process(_ data: UrlDataResponse) -> Observer { - - let context = Context() - - switch data.response.statusCode { - case 409: - return context.emit(error: ServerError.userExist) - default: - break - } - let log = self.logViewObjectName + "Cant match status code -> call next" - return self.next.process(data).log(Log(log, id: self.objectName, order: LogOrder.responseHttpErrorProcessorNode)) - } - -} diff --git a/NodeKit/NodeKitTests/UnitTests/Nodes/AccessSafeNodeTests.swift b/NodeKit/NodeKitTests/UnitTests/Nodes/AccessSafeNodeTests.swift index c0dfb8d6..99535bc5 100644 --- a/NodeKit/NodeKitTests/UnitTests/Nodes/AccessSafeNodeTests.swift +++ b/NodeKit/NodeKitTests/UnitTests/Nodes/AccessSafeNodeTests.swift @@ -21,7 +21,7 @@ final class AccessSafeNodeTests: XCTestCase { // MARK: - Sut - private var sut: AccessSafeNode! + private var sut: AccessSafeNode! // MARK: - Lifecycle diff --git a/NodeKit/NodeKitTests/UnitTests/RequestBuildingLayer/RequestCreatorNodeTests.swift b/NodeKit/NodeKitTests/UnitTests/RequestBuildingLayer/RequestCreatorNodeTests.swift deleted file mode 100644 index 4c59eb50..00000000 --- a/NodeKit/NodeKitTests/UnitTests/RequestBuildingLayer/RequestCreatorNodeTests.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// RequestCreatorNodeTests.swift -// UnitTests -// -// Created by Anastasiia Chechina on 18.08.2020. -// Copyright © 2020 Кравченков Александр. All rights reserved. -// -import Foundation -import XCTest - -@testable import NodeKit - -public class RequestCreatorNodeTests: XCTestCase { - - // MARK: - Nested - enum Constants { - static let headerKey = "TestHeader" - static let headerValue = "testHeaderValue" - } - - class StubNext: RequestProcessingLayerNode { - - var request: URLRequest! = nil - - @discardableResult - public override func process(_ data: URLRequest) -> Observer { - self.request = data - return .emit(data: Json()) - } - } - - class HeadersProvider: MetadataProvider { - func metadata() -> [String : String] { - return [Constants.headerKey: Constants.headerValue] - } - } - - // MARK: - Tests - func testHeadersConvertionWork() { - - // Arrange - let next = StubNext() - let testedNode = RequestCreatorNode(next: next) - let url = "http://test.com/usr" - let provider = HeadersProvider() - - let request = TransportUrlRequest(method: .post, - url: URL(string: url)!, - headers: provider.metadata(), - raw: Data()) - - // Act - let result = testedNode.process(request).log(nil) - - // Assert - XCTAssertTrue(result.log?.description.contains(Constants.headerKey) != nil) - XCTAssertTrue(result.log?.description.contains(Constants.headerValue) != nil) - } - -}