This PR contains all the work related to setting up this project as required to implement the [Assignment](https://repo.rock-n-code.com/rock-n-code/deep-linking-assignment/wiki/Assignment) on top, as intended. To summarise this work: - [x] created a new **Xcode** project; - [x] cloned the `Wikipedia` app and inserted it into the **Xcode** project; - [x] created the `Locations` app and also, its `Libraries` package; - [x] created the `Shared` package to share dependencies between the apps; - [x] added a `Makefile` file and implemented some **environment** and **help** commands. Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Reviewed-on: rock-n-code/deep-linking-assignment#1
103 lines
4.0 KiB
Swift
103 lines
4.0 KiB
Swift
import XCTest
|
|
import CoreData
|
|
@testable import Wikipedia
|
|
|
|
class TalkPageManualPerformanceTests: XCTestCase {
|
|
|
|
let urlString1 = "https://en.wikipedia.org/api/rest_v1/page/talk/Username1"
|
|
let urlString2 = "https://en.wikipedia.org/api/rest_v1/page/talk/Username2"
|
|
let urlString3 = "https://es.wikipedia.org/api/rest_v1/page/talk/Username1"
|
|
|
|
var tempDataStore: MWKDataStore!
|
|
var moc: NSManagedObjectContext!
|
|
|
|
override func setUp() {
|
|
super.setUp()
|
|
tempDataStore = MWKDataStore.temporary()
|
|
moc = tempDataStore.viewContext
|
|
}
|
|
|
|
override func tearDown() {
|
|
tempDataStore.removeFolderAtBasePath()
|
|
tempDataStore = nil
|
|
super.tearDown()
|
|
}
|
|
|
|
func testPerformanceLargeToLargeUpdateTalkPages() {
|
|
// confirm no talk pages in DB
|
|
let fetchRequest: NSFetchRequest<TalkPage> = TalkPage.fetchRequest()
|
|
|
|
guard let firstResults = try? tempDataStore.viewContext.fetch(fetchRequest) else {
|
|
XCTFail("Failure fetching initial talk pages")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(firstResults.count, 0, "Expected zero existing talk pages at first")
|
|
|
|
guard let largeJson = wmf_bundle().wmf_data(fromContentsOfFile: TalkPageTestHelpers.TalkPageJSONType.largeForPerformance.fileName, ofType: "json"),
|
|
let largeUpdatedJson = wmf_bundle().wmf_data(fromContentsOfFile: TalkPageTestHelpers.TalkPageJSONType.largeUpdatedForPerformance.fileName, ofType: "json"),
|
|
let networkTalkPage = TalkPageTestHelpers.networkTalkPage(for: urlString1, data: largeJson, revisionId: 1),
|
|
let updatedNetworkTalkPage = TalkPageTestHelpers.networkTalkPage(for: urlString1, data: largeUpdatedJson, revisionId: 1) else {
|
|
XCTFail("Failure stubbing out network talk pages")
|
|
return
|
|
}
|
|
|
|
var i = 0
|
|
measure {
|
|
i += 1
|
|
|
|
// create db talk page
|
|
guard let talkPage = moc.createTalkPage(with: networkTalkPage) else {
|
|
XCTFail("Failure to create db talk page")
|
|
return
|
|
}
|
|
|
|
// update local copy
|
|
guard moc.updateTalkPage(talkPage, with: updatedNetworkTalkPage) != nil else {
|
|
XCTFail("Failure updating existing local talk page")
|
|
return
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
func testPerformanceSmallToLargeUpdateTalkPages() {
|
|
// confirm no talk pages in DB
|
|
let fetchRequest: NSFetchRequest<TalkPage> = TalkPage.fetchRequest()
|
|
|
|
guard let firstResults = try? tempDataStore.viewContext.fetch(fetchRequest) else {
|
|
XCTFail("Failure fetching initial talk pages")
|
|
return
|
|
}
|
|
|
|
XCTAssertEqual(firstResults.count, 0, "Expected zero existing talk pages at first")
|
|
|
|
guard let smallJson = wmf_bundle().wmf_data(fromContentsOfFile: TalkPageTestHelpers.TalkPageJSONType.smallForPerformance.fileName, ofType: "json"),
|
|
let largeUpdatedJson = wmf_bundle().wmf_data(fromContentsOfFile: TalkPageTestHelpers.TalkPageJSONType.largeUpdatedForPerformance.fileName, ofType: "json"),
|
|
let networkTalkPage = TalkPageTestHelpers.networkTalkPage(for: urlString1, data: smallJson, revisionId: 1),
|
|
let updatedNetworkTalkPage = TalkPageTestHelpers.networkTalkPage(for: urlString1, data: largeUpdatedJson, revisionId: 1) else {
|
|
XCTFail("Failure stubbing out network talk pages")
|
|
return
|
|
}
|
|
|
|
var i = 0
|
|
measure {
|
|
i += 1
|
|
|
|
// create db talk page
|
|
guard let talkPage = moc.createTalkPage(with: networkTalkPage) else {
|
|
XCTFail("Failure to create db talk page")
|
|
return
|
|
}
|
|
|
|
// update local copy
|
|
guard moc.updateTalkPage(talkPage, with: updatedNetworkTalkPage) != nil else {
|
|
XCTFail("Failure updating existing local talk page")
|
|
return
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|