NetNewsWire/Frameworks/Account/AccountTests/Feedly/FeedlySyncAllMockResponsePr...

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
}
}