deep-linking-sample/Apps/Wikipedia/WikipediaUnitTests/Manual Tests/TalkPageManualPerformanceTests.swift
Javier Cicchelli 9bcdaa697b [Setup] Basic project structure (#1)
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
2023-04-08 18:37:13 +00:00

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