Skip to content

Commit

Permalink
SPT-1998 refactor builders and add mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
mrandrewsmith committed May 2, 2024
1 parent 5804141 commit e6102fc
Show file tree
Hide file tree
Showing 96 changed files with 1,370 additions and 2,742 deletions.
18 changes: 18 additions & 0 deletions Example/Modules/MockServer/MockServer/FakeChainBuilder.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//
// FakeChainBuilder.swift
//
//
// Created by Andrei Frolov on 02.05.24.
//

import NodeKit
import NodeKitMock

public final class FakeChainBuilder<Route: URLRouteProvider>: URLChainBuilder<Route> {

public init() {
super.init(
serviceChainProvider: URLServiceChainProvider(session: NetworkMock().urlSession)
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import Foundation
import Models
import NodeKit
import NodeKitMock
import MockServer

public protocol AuthServiceProtocol {
func auth(by email: String, and passwod: String) async -> NodeResult<Void>
Expand All @@ -18,8 +18,7 @@ public struct AuthService: AuthServiceProtocol {
public init() { }

public func auth(by email: String, and passwod: String) async -> NodeResult<Void> {
return await UrlChainsBuilder<AuthURLProvider>()
.set(session: NetworkMock().urlSession)
return await FakeChainBuilder<AuthURLProvider>()
.encode(as: .urlQuery)
.route(.post, .login)
.build()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import Foundation
import NodeKit

enum AuthURLProvider: UrlRouteProvider {
private static var base: UrlRouteProvider = NavigationURLProvider.auth
enum AuthURLProvider: URLRouteProvider {
private static var base: URLRouteProvider = NavigationURLProvider.auth

case login
case logout
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

import Foundation
import NodeKit
import NodeKitMock
import Models
import MockServer

public protocol GroupServiceProtocol {
func header() async -> NodeResult<GroupHeaderResponseEntity>
Expand All @@ -35,8 +35,7 @@ public final class GroupService: GroupServiceProtocol {
private func result<T: DTODecodable>(
from route: GroupURLProvider
) async -> NodeResult<T> where T.DTO.Raw == Json {
return await UrlChainsBuilder<GroupURLProvider>()
.set(session: NetworkMock().urlSession)
return await FakeChainBuilder<GroupURLProvider>()
.route(.get, route)
.build()
.process()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import Foundation
import NodeKit

enum GroupURLProvider: UrlRouteProvider {
private static var base: UrlRouteProvider = NavigationURLProvider.group
enum GroupURLProvider: URLRouteProvider {
private static var base: URLRouteProvider = NavigationURLProvider.group

case header
case body
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@

import Models
import NodeKit
import NodeKitMock
import MockServer

public struct PaginationContentDataProvider: AsyncPagerDataProvider {
public typealias Value = [PaginationResponseEntity]

public init() { }

public func provide(for index: Int, with pageSize: Int) async -> NodeResult<AsyncPagerData<[PaginationResponseEntity]>> {
return await UrlChainsBuilder<PaginationURLProvider>()
.set(session: NetworkMock().urlSession)
return await FakeChainBuilder<PaginationURLProvider>()
.encode(as: .urlQuery)
.route(.get, .list)
.build()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import Foundation
import NodeKit

enum PaginationURLProvider: UrlRouteProvider {
private static var base: UrlRouteProvider = NavigationURLProvider.pagination
enum PaginationURLProvider: URLRouteProvider {
private static var base: URLRouteProvider = NavigationURLProvider.pagination

case list

Expand Down
6 changes: 3 additions & 3 deletions Example/Modules/Services/Services/URLProviders.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
import Foundation
import NodeKit

enum RootURLProvider: UrlRouteProvider {
enum RootURLProvider: URLRouteProvider {
case root

func url() throws -> URL {
return URL(string: "http://www.mockurl.com")!
}
}

enum NavigationURLProvider: UrlRouteProvider {
private static var base: UrlRouteProvider = RootURLProvider.root
enum NavigationURLProvider: URLRouteProvider {
private static var base: URLRouteProvider = RootURLProvider.root

case auth
case pagination
Expand Down
280 changes: 156 additions & 124 deletions NodeKit/NodeKit.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

57 changes: 0 additions & 57 deletions NodeKit/NodeKit/CacheNode/ETag/UrlETagReaderNode.swift

This file was deleted.

98 changes: 0 additions & 98 deletions NodeKit/NodeKit/CacheNode/ETag/UrlETagSaverNode.swift

This file was deleted.

12 changes: 6 additions & 6 deletions NodeKit/NodeKit/CacheNode/FirstCachePolicyNode.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ import Foundation
///
/// - SeeAlso: `FirstCachePolicyNode`
///
/// - cantGetUrlRequest: Возникает в случае, если запрос отправленный в сеть не содержит `UrlRequest`
/// - cantGetURLRequest: Возникает в случае, если запрос отправленный в сеть не содержит `URLRequest`
public enum BaseFirstCachePolicyNodeError: Error {
case cantGetUrlRequest
case cantGetURLRequest
}

/// Этот узел реализует политику кэширования
Expand All @@ -24,10 +24,10 @@ open class FirstCachePolicyNode: AsyncStreamNode {
// MARK: - Nested

/// Тип для читающего из URL кэша узла
public typealias CacheReaderNode = AsyncNode<UrlNetworkRequest, Json>
public typealias CacheReaderNode = AsyncNode<URLNetworkRequest, Json>

/// Тип для следующего узла
public typealias NextProcessorNode = AsyncNode<RawUrlRequest, Json>
public typealias NextProcessorNode = AsyncNode<RawURLRequest, Json>

// MARK: - Properties

Expand Down Expand Up @@ -56,12 +56,12 @@ open class FirstCachePolicyNode: AsyncStreamNode {
/// В случае, если получить `URLRequest` не удалось,
/// то управление просто передается следующему узлу
public func process(
_ data: RawUrlRequest,
_ data: RawURLRequest,
logContext: LoggingContextProtocol
) -> AsyncStream<NodeResult<Json>> {
return AsyncStream { continuation in
Task {
if let request = data.toUrlRequest() {
if let request = data.toURLRequest() {
let cacheResult = await cacheReaderNode.process(request, logContext: logContext)
continuation.yield(cacheResult)
}
Expand Down
8 changes: 4 additions & 4 deletions NodeKit/NodeKit/CacheNode/IfServerFailsFromCacheNode.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ open class IfConnectionFailedFromCacheNode: AsyncNode {
/// Следующий узел для обработки.
public var next: any AsyncNode<URLRequest, Json>
/// Узел, считывающий данные из URL кэша.
public var cacheReaderNode: any AsyncNode<UrlNetworkRequest, Json>
public var cacheReaderNode: any AsyncNode<URLNetworkRequest, Json>

/// Инициаллизирует узел.
///
/// - Parameters:
/// - next: Следующий узел для обработки.
/// - cacheReaderNode: Узел, считывающий данные из URL кэша.
public init(next: any AsyncNode<URLRequest, Json>, cacheReaderNode: any AsyncNode<UrlNetworkRequest, Json>) {
public init(next: any AsyncNode<URLRequest, Json>, cacheReaderNode: any AsyncNode<URLNetworkRequest, Json>) {
self.next = next
self.cacheReaderNode = cacheReaderNode
}
Expand All @@ -36,7 +36,7 @@ open class IfConnectionFailedFromCacheNode: AsyncNode {
) async -> NodeResult<Json> {
return await next.process(data, logContext: logContext)
.asyncFlatMapError { error in
let request = UrlNetworkRequest(urlRequest: data)
let request = URLNetworkRequest(urlRequest: data)
if error is BaseTechnicalError {
await logContext.add(makeBaseTechinalLog(with: error))
return await cacheReaderNode.process(request, logContext: logContext)
Expand All @@ -57,7 +57,7 @@ open class IfConnectionFailedFromCacheNode: AsyncNode {
)
}

private func makeLog(with error: Error, from request: UrlNetworkRequest) -> Log {
private func makeLog(with error: Error, from request: URLNetworkRequest) -> Log {
return Log(
logViewObjectName +
"Catching \(error)" + .lineTabDeilimeter +
Expand Down
Loading

0 comments on commit e6102fc

Please sign in to comment.