71 lines
2.5 KiB
Swift
71 lines
2.5 KiB
Swift
//
|
|
// FeedlySyncAllMockResponseProvider.swift
|
|
// AccountTests
|
|
//
|
|
// Created by Kiel Gillard on 1/11/19.
|
|
// Copyright © 2019 Ranchero Software, LLC. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class FeedlyMockResponseProvider: TestTransportMockResponseProviding {
|
|
|
|
let subdirectory: String
|
|
|
|
init(findingMocksIn subdirectory: String) {
|
|
self.subdirectory = subdirectory
|
|
}
|
|
|
|
func mockResponseFileUrl(for components: URLComponents) -> URL? {
|
|
let bundle = Bundle(for: FeedlyMockResponseProvider.self)
|
|
|
|
// Match request for collections to build a list of folders.
|
|
if components.path.contains("v3/collections") {
|
|
return bundle.url(forResource: "collections", withExtension: "json", subdirectory: subdirectory)
|
|
}
|
|
|
|
guard let queryItems = components.queryItems else {
|
|
return nil
|
|
}
|
|
|
|
// Match requests for starred articles from global.saved.
|
|
if components.path.contains("streams/contents") &&
|
|
queryItems.contains(where: { ($0.value ?? "").contains("global.saved") }) {
|
|
return bundle.url(forResource: "starred", withExtension: "json", subdirectory: subdirectory)
|
|
}
|
|
|
|
let continuation = queryItems.first(where: { $0.name.contains("continuation") })?.value
|
|
|
|
// Match requests for unread article ids.
|
|
if components.path.contains("streams/ids") && queryItems.contains(where: { $0.name.contains("unreadOnly") }) {
|
|
|
|
// if there is a continuation, return the page for it
|
|
if let continuation = continuation, let data = continuation.data(using: .utf8) {
|
|
let base64 = data.base64EncodedString() // at least base64 can be used as a path component.
|
|
return bundle.url(forResource: "unreadIds@\(base64)", withExtension: "json", subdirectory: subdirectory)
|
|
|
|
} else {
|
|
// return first page
|
|
return bundle.url(forResource: "unreadIds", withExtension: "json", subdirectory: subdirectory)
|
|
}
|
|
}
|
|
|
|
// Match requests for the contents of global.all.
|
|
if components.path.contains("streams/contents") &&
|
|
queryItems.contains(where: { ($0.value ?? "").contains("global.all") }){
|
|
|
|
// if there is a continuation, return the page for it
|
|
if let continuation = continuation, let data = continuation.data(using: .utf8) {
|
|
let base64 = data.base64EncodedString() // at least base64 can be used as a path component.
|
|
return bundle.url(forResource: "global.all@\(base64)", withExtension: "json", subdirectory: subdirectory)
|
|
|
|
} else {
|
|
// return first page
|
|
return bundle.url(forResource: "global.all", withExtension: "json", subdirectory: subdirectory)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|