93 lines
3.3 KiB
Swift
93 lines
3.3 KiB
Swift
|
//
|
||
|
// FeedlyGetCollectionsOperationTests.swift
|
||
|
// AccountTests
|
||
|
//
|
||
|
// Created by Kiel Gillard on 21/10/19.
|
||
|
// Copyright © 2019 Ranchero Software, LLC. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import XCTest
|
||
|
@testable import Account
|
||
|
import os.log
|
||
|
|
||
|
class FeedlyGetCollectionsOperationTests: XCTestCase {
|
||
|
|
||
|
func testGetCollections() {
|
||
|
let support = FeedlyTestSupport()
|
||
|
let (transport, caller) = support.makeMockNetworkStack()
|
||
|
let jsonName = "feedly_collections_initial"
|
||
|
transport.testFiles["/v3/collections"] = "\(jsonName).json"
|
||
|
|
||
|
let getCollections = FeedlyGetCollectionsOperation(service: caller, log: support.log)
|
||
|
let completionExpectation = expectation(description: "Did Finish")
|
||
|
getCollections.completionBlock = {
|
||
|
completionExpectation.fulfill()
|
||
|
}
|
||
|
|
||
|
OperationQueue.main.addOperation(getCollections)
|
||
|
|
||
|
waitForExpectations(timeout: 2)
|
||
|
|
||
|
let collections = support.testJSON(named: jsonName) as! [[String:Any]]
|
||
|
let labelsInJSON = Set(collections.map { $0["label"] as! String })
|
||
|
let idsInJSON = Set(collections.map { $0["id"] as! String })
|
||
|
|
||
|
let labels = Set(getCollections.collections.map { $0.label })
|
||
|
let ids = Set(getCollections.collections.map { $0.id })
|
||
|
|
||
|
let missingLabels = labelsInJSON.subtracting(labels)
|
||
|
let missingIds = idsInJSON.subtracting(ids)
|
||
|
|
||
|
XCTAssertEqual(getCollections.collections.count, collections.count, "Mismatch between collections provided by operation and test JSON collections.")
|
||
|
XCTAssertTrue(missingLabels.isEmpty, "Collections with these labels did not have a corresponding \(FeedlyCollection.self) value with the same name.")
|
||
|
XCTAssertTrue(missingIds.isEmpty, "Collections with these ids did not have a corresponding \(FeedlyCollection.self) with the same id.")
|
||
|
|
||
|
for collection in collections {
|
||
|
let collectionId = collection["id"] as! String
|
||
|
let collectionFeeds = collection["feeds"] as! [[String: Any]]
|
||
|
let collectionFeedIds = Set(collectionFeeds.map { $0["id"] as! String })
|
||
|
|
||
|
for operationCollection in getCollections.collections where operationCollection.id == collectionId {
|
||
|
let feedIds = Set(operationCollection.feeds.map { $0.id })
|
||
|
let missingIds = collectionFeedIds.subtracting(feedIds)
|
||
|
XCTAssertTrue(missingIds.isEmpty, "Feeds with these ids were not found in the \"\(operationCollection.label)\" \(FeedlyCollection.self).")
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func testGetCollectionsError() {
|
||
|
|
||
|
class TestDelegate: FeedlyOperationDelegate {
|
||
|
var errorExpectation: XCTestExpectation?
|
||
|
var error: Error?
|
||
|
|
||
|
func feedlyOperation(_ operation: FeedlyOperation, didFailWith error: Error) {
|
||
|
self.error = error
|
||
|
errorExpectation?.fulfill()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let delegate = TestDelegate()
|
||
|
delegate.errorExpectation = expectation(description: "Did Fail With Expected Error")
|
||
|
|
||
|
let support = FeedlyTestSupport()
|
||
|
let service = TestGetCollectionsService()
|
||
|
service.mockResult = .failure(URLError(.timedOut))
|
||
|
|
||
|
let getCollections = FeedlyGetCollectionsOperation(service: service, log: support.log)
|
||
|
getCollections.delegate = delegate
|
||
|
|
||
|
let completionExpectation = expectation(description: "Did Finish")
|
||
|
getCollections.completionBlock = {
|
||
|
completionExpectation.fulfill()
|
||
|
}
|
||
|
|
||
|
OperationQueue.main.addOperation(getCollections)
|
||
|
|
||
|
waitForExpectations(timeout: 2)
|
||
|
|
||
|
XCTAssertNotNil(delegate.error)
|
||
|
XCTAssertTrue(getCollections.collections.isEmpty, "Collections should be empty.")
|
||
|
}
|
||
|
}
|