/
LoginInputTests.swift
124 lines (103 loc) · 5.29 KB
/
LoginInputTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import Foundation
import EarlGrey
@testable import Client
class LoginInputTests: KIFTestCase {
fileprivate var webRoot: String!
fileprivate var profile: Profile!
override func setUp() {
super.setUp()
profile = (UIApplication.shared.delegate as! AppDelegate).profile!
webRoot = SimplePageServer.start()
BrowserUtils.dismissFirstRunUI()
}
override func tearDown() {
_ = profile.logins.removeAll().value
BrowserUtils.resetToAboutHome(tester())
BrowserUtils.clearPrivateData(tester: tester())
super.tearDown()
}
func enterUrl(url: String) {
EarlGrey.select(elementWithMatcher: grey_accessibilityID("url")).perform(grey_tap())
EarlGrey.select(elementWithMatcher: grey_accessibilityID("address")).perform(grey_replaceText(url))
EarlGrey.select(elementWithMatcher: grey_accessibilityID("address")).perform(grey_typeText("\n"))
}
func waitForLoginDialog(text: String, appears: Bool = true) {
var success = false
var failedReason = "Failed to display dialog"
if appears == false {
failedReason = "Dialog still displayed"
}
let saveLoginDialog = GREYCondition(name: "Check login dialog appears", block: { _ in
var errorOrNil: NSError?
let matcher = grey_allOf([grey_accessibilityLabel(text),
grey_sufficientlyVisible()])
EarlGrey.select(elementWithMatcher: matcher)
.assert(grey_notNil(), error: &errorOrNil)
if appears == true {
success = errorOrNil == nil
} else {
success = errorOrNil != nil
}
return success
}).wait(withTimeout: 10)
GREYAssertTrue(saveLoginDialog, reason: failedReason)
}
func testLoginFormDisplaysNewSnackbar() {
let url = "\(webRoot!)/loginForm.html"
let username = "test@user.com"
enterUrl(url: url)
tester().enterText(username, intoWebViewInputWithName: "username")
tester().enterText("password", intoWebViewInputWithName: "password")
tester().tapWebViewElementWithAccessibilityLabel("submit_btn")
waitForLoginDialog(text: "Save login \(username) for \(self.webRoot!)?")
EarlGrey.select(elementWithMatcher: grey_accessibilityID("SaveLoginPrompt.dontSaveButton")).perform(grey_tap())
}
func testLoginFormDisplaysUpdateSnackbarIfPreviouslySaved() {
let url = "\(webRoot!)/loginForm.html"
let username = "test@user.com"
let password1 = "password1"
let password2 = "password2"
enterUrl(url: url)
tester().enterText(username, intoWebViewInputWithName: "username")
tester().enterText(password1, intoWebViewInputWithName: "password")
tester().tapWebViewElementWithAccessibilityLabel("submit_btn")
waitForLoginDialog(text: "Save login \(username) for \(self.webRoot!)?")
EarlGrey.select(elementWithMatcher: grey_accessibilityID("SaveLoginPrompt.saveLoginButton"))
.perform(grey_tap())
tester().enterText(username, intoWebViewInputWithName: "username")
tester().enterText(password2, intoWebViewInputWithName: "password")
tester().tapWebViewElementWithAccessibilityLabel("submit_btn")
waitForLoginDialog(text: "Update login \(username) for \(self.webRoot!)?")
EarlGrey.select(elementWithMatcher: grey_accessibilityID("UpdateLoginPrompt.updateButton"))
.perform(grey_tap())
}
func testLoginFormDoesntOfferSaveWhenEmptyPassword() {
let url = "\(webRoot!)/loginForm.html"
let username = "test@user.com"
enterUrl(url: url)
tester().enterText(username, intoWebViewInputWithName: "username")
tester().enterText("", intoWebViewInputWithName: "password")
tester().tapWebViewElementWithAccessibilityLabel("submit_btn")
waitForLoginDialog(text: "Save login \(username) for \(self.webRoot!)?", appears: false)
}
func testLoginFormDoesntOfferUpdateWhenEmptyPassword() {
let url = "\(webRoot!)/loginForm.html"
let username = "test@user.com"
let password1 = "password1"
let password2 = ""
enterUrl(url: url)
tester().enterText(username, intoWebViewInputWithName: "username")
tester().enterText(password1, intoWebViewInputWithName: "password")
tester().tapWebViewElementWithAccessibilityLabel("submit_btn")
waitForLoginDialog(text: "Save login \(username) for \(self.webRoot!)?")
EarlGrey.select(elementWithMatcher: grey_accessibilityID("SaveLoginPrompt.saveLoginButton"))
.perform(grey_tap())
tester().enterText(username, intoWebViewInputWithName: "username")
tester().enterText(password2, intoWebViewInputWithName: "password")
tester().tapWebViewElementWithAccessibilityLabel("submit_btn")
waitForLoginDialog(text: "Save login \(username) for \(self.webRoot!)?", appears: false)
}
}