You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.7 KiB
172 lines
5.7 KiB
// Copyright © 2015 Abhishek Banthia |
|
|
|
import XCTest |
|
|
|
class AboutUsTests: XCTestCase { |
|
var app: XCUIApplication! |
|
|
|
override func setUp() { |
|
super.setUp() |
|
|
|
// Put setup code here. This method is called before the invocation of each test method in the class. |
|
|
|
// In UI tests it is usually best to stop immediately when a failure occurs. |
|
continueAfterFailure = false |
|
app = XCUIApplication() |
|
app.launch() |
|
|
|
if app.tables["FloatingTableView"].exists { |
|
app.tapMenubarIcon() |
|
app.buttons["FloatingPin"].click() |
|
} |
|
} |
|
|
|
private func tapAboutTab() { |
|
let aboutTab = app.toolbars.buttons.element(boundBy: 4) |
|
aboutTab.click() |
|
} |
|
|
|
func testMockingFeedback() { |
|
app.tapMenubarIcon() |
|
app.buttons["Preferences"].click() |
|
|
|
tapAboutTab() |
|
|
|
let expectedVersion = "Clocker 1.6.09 (64)" |
|
guard let presentVersion = app.windows["Clocker"].staticTexts["ClockerVersion"].value as? String else { |
|
XCTFail("Present version not present") |
|
return |
|
} |
|
|
|
XCTAssertEqual(expectedVersion, presentVersion) |
|
|
|
app.checkBoxes["ClockerPrivateFeedback"].click() |
|
app.buttons["Send Feedback"].click() |
|
|
|
let expectedInformativeText = "Please enter some feedback." |
|
XCTAssertTrue(app.staticTexts["InformativeText"].exists) |
|
|
|
guard let infoText = app.staticTexts["InformativeText"].value as? String else { |
|
XCTFail("InformativeText label was unexpectedly absent") |
|
return |
|
} |
|
|
|
XCTAssertEqual(infoText, expectedInformativeText) |
|
|
|
sleep(5) |
|
|
|
guard let newInfoText = app.staticTexts["InformativeText"].value as? String else { |
|
XCTFail("InformativeText label was unexpectedly absent") |
|
return |
|
} |
|
|
|
XCTAssertTrue(newInfoText.isEmpty) |
|
|
|
// Close window |
|
app.windows["Clocker Feedback"].buttons["Cancel"].click() |
|
} |
|
|
|
func testSendingDataToFirebase() { |
|
app.tapMenubarIcon() |
|
app.buttons["Preferences"].click() |
|
tapAboutTab() |
|
app.checkBoxes["ClockerPrivateFeedback"].click() |
|
|
|
let textView = app.textViews["FeedbackTextView"] |
|
textView.click() |
|
textView.typeText("This feedback was generated by UI Tests") |
|
|
|
let nameField = app.textFields["NameField"] |
|
nameField.click() |
|
nameField.typeText("Random Name") |
|
|
|
let emailField = app.textFields["EmailField"] |
|
emailField.click() |
|
emailField.typeText("randomemail@uitests.com") |
|
|
|
app.buttons["Send Feedback"].click() |
|
|
|
inverseWaiterFor(element: app.progressIndicators["ProgressIndicator"]) |
|
|
|
XCTAssertTrue(app.sheets.staticTexts["Thank you for helping make Clocker even better!"].exists) |
|
XCTAssertTrue(app.sheets.staticTexts["We owe you a candy. 😇"].exists) |
|
|
|
app.windows["Clocker Feedback"].sheets.buttons["Close"].click() |
|
} |
|
} |
|
|
|
extension XCTestCase { |
|
func inverseWaiterFor(element: XCUIElement, time: TimeInterval = 25) { |
|
let spinnerPredicate = NSPredicate(format: "exists == false") |
|
let spinnerExpectation = expectation(for: spinnerPredicate, evaluatedWith: element, handler: nil) |
|
let spinnerResult = XCTWaiter().wait(for: [spinnerExpectation], timeout: time) |
|
|
|
if spinnerResult != .completed { |
|
XCTFail("Still seeing Spinner after 25 seconds. Something's wrong") |
|
} |
|
} |
|
|
|
func addAPlace(place: String, to app: XCUIApplication, shouldSleep: Bool = true) { |
|
// Let's first check if the place is already present in the list |
|
|
|
let matchPredicate = NSPredicate(format: "value contains %@", place) |
|
let matchingFields = app.windows["Clocker"].tables["TimezoneTableView"].textFields.matching(matchPredicate) |
|
if matchingFields.count > 0 { |
|
return |
|
} |
|
|
|
if app.sheets.count == 0 { |
|
app.windows["Clocker"].checkBoxes["AddTimezone"].click() |
|
} |
|
|
|
let searchField = app.searchFields["AvailableSearchField"] |
|
searchField.reset(text: place) |
|
|
|
let results = app.tables["AvailableTimezoneTableView"].cells.staticTexts.matching(matchPredicate) |
|
|
|
let waiter = XCTWaiter() |
|
let isHittable = NSPredicate(format: "exists == true", "") |
|
let addExpectation = expectation(for: isHittable, |
|
evaluatedWith: results.firstMatch) { () -> Bool in |
|
print("Handler called") |
|
return true |
|
} |
|
|
|
waiter.wait(for: [addExpectation], timeout: 5) |
|
|
|
if results.count > 0 { |
|
results.firstMatch.click() |
|
} |
|
|
|
app.buttons["AddAvailableTimezone"].click() |
|
|
|
if shouldSleep { |
|
sleep(2) |
|
} |
|
} |
|
|
|
func deleteAllPlaces(app: XCUIApplication) { |
|
var rowQueryCount = app.windows["Clocker"].tables["TimezoneTableView"].tableRows.count |
|
if rowQueryCount == 0 { |
|
return |
|
} |
|
|
|
let currentElement = app.windows["Clocker"].tableRows.firstMatch |
|
currentElement.click() |
|
|
|
while rowQueryCount > 0 { |
|
app.windows["Clocker"].typeKey(XCUIKeyboardKey.delete, modifierFlags: XCUIElement.KeyModifierFlags()) |
|
rowQueryCount -= 1 |
|
} |
|
} |
|
|
|
func deleteAPlace(place: String, for app: XCUIApplication, shouldSleep: Bool = true) { |
|
let matchPredicate = NSPredicate(format: "value == %@", place) |
|
let row = app.tables["TimezoneTableView"].textFields.matching(matchPredicate).firstMatch |
|
row.click() |
|
row.typeKey(XCUIKeyboardKey.delete, modifierFlags: XCUIElement.KeyModifierFlags()) |
|
if shouldSleep { |
|
sleep(2) |
|
} |
|
} |
|
}
|
|
|