2
* Copyright 2016 Canonical Ltd.
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation; version 3.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Lesser General Public License for more details.
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by Jonas G. Drange <jonas.drange@canonical.com>
21
import Ubuntu.Test 0.1
22
import Ubuntu.Settings.Fingerprint 0.1
23
import Ubuntu.Components 1.3
37
id: fingerprintsComponent
46
id: fingerprintComponent
55
id: gsettingsComponent
58
schema.id: "com.ubuntu.touch.system"
66
property var pageInstance: null
67
property var gsettingsInstance: null
69
function getTemplateEntry(i) {
70
var id = "fingerprintInstance-" + i;
71
return findChild(pageInstance, id);
74
function getListObserver() {
75
return findInvisibleChild(pageInstance, "listObserver");
78
function getRemovalObserver() {
79
return findInvisibleChild(pageInstance, "removalObserver");
82
function getClearanceObserver() {
83
return findInvisibleChild(pageInstance, "clearanceObserver");
86
function getEnrollmentObserver() {
87
return findInvisibleChild(pageInstance, "enrollmentObserver");
90
function initTestCase() {
91
Biometryd.setAvailable(true);
95
gsettingsInstance = gsettingsComponent.createObject(testRoot);
96
pageInstance = fingerprintsComponent.createObject(testRoot, {
97
_settings: gsettingsInstance,
100
pageStack.push(pageInstance);
103
function test_listSort() {
104
GSettingsController.setFingerprintNames({
106
"second": "Big finger",
107
"last": "Zmall finger",
109
compare(getTemplateEntry(0).title.text, "A finger");
110
compare(getTemplateEntry(1).title.text, "Big finger");
111
compare(getTemplateEntry(2).title.text, "Zmall finger");
114
function test_remoteRemoval() {
115
GSettingsController.setFingerprintNames({
118
verify(getTemplateEntry(0));
120
GSettingsController.setFingerprintNames({});
121
verify(!getTemplateEntry(0));
124
function test_remoteAddition() {
125
GSettingsController.setFingerprintNames({
128
verify(getTemplateEntry(0));
130
GSettingsController.setFingerprintNames({
134
verify(getTemplateEntry(0));
135
verify(getTemplateEntry(1));
138
function test_remoteRename() {
139
GSettingsController.setFingerprintNames({
140
"tmplId": "My finger",
142
compare(getTemplateEntry(0).title.text, "My finger");
143
GSettingsController.setFingerprintNames({
144
"tmplId": "Your finger",
146
compare(getTemplateEntry(0).title.text, "Your finger");
149
function test_localRemoval() {
150
GSettingsController.setFingerprintNames({
153
verify(getTemplateEntry(0));
154
pageInstance.removeTemplate("tmplId");
155
verify(!getTemplateEntry(0));
158
function test_localAddition() {
159
pageInstance.addTemplate("tmplId", "My finger");
160
verify(getTemplateEntry(0));
161
compare(getTemplateEntry(0).title.text, "My finger");
164
function test_localRename() {
165
GSettingsController.setFingerprintNames({
166
"tmplId": "My finger"
168
pageInstance.renameTemplate("tmplId", "Your finger");
169
verify(getTemplateEntry(0));
170
compare(getTemplateEntry(0).title.text, "Your finger");
173
function test_createTemplateName() {
174
GSettingsController.setFingerprintNames({
175
"tmplId": i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1)
177
compare(pageInstance.createTemplateName(), i18n.dtr("ubuntu-settings-components", "Finger %1").arg(2));
178
pageInstance.renameTemplate("tmplId", i18n.dtr("ubuntu-settings-components", "Finger %1").arg(2));
179
compare(pageInstance.createTemplateName(), i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1));
182
function test_assignNames() {
183
var templateIds = ["tmplId0", "tmplId1", "tmplId2"];
185
// This name shouldn't be overwritten
186
GSettingsController.setFingerprintNames({
187
"tmplId1": "My finger"
190
getListObserver().mockList(templateIds, "");
192
verify(getTemplateEntry(0));
193
compare(getTemplateEntry(0).title.text, i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1));
195
verify(getTemplateEntry(1));
196
compare(getTemplateEntry(1).title.text, i18n.dtr("ubuntu-settings-components", "Finger %1").arg(2));
198
verify(getTemplateEntry(2));
199
compare(getTemplateEntry(2).title.text, "My finger");
202
function test_serviceRemoval() {
203
GSettingsController.setFingerprintNames({
206
getRemovalObserver().mockRemoval("tmplId", "");
207
verify(!getTemplateEntry(0));
208
compare(GSettingsController.fingerprintNames(), {});
211
function test_serviceEnrollment() {
212
GSettingsController.setFingerprintNames({
213
"tmplId1": "Existing finger"
215
getEnrollmentObserver().mockEnroll("tmplId2", "");
217
verify(getTemplateEntry(0));
218
compare(getTemplateEntry(0).title.text, "Existing finger");
220
verify(getTemplateEntry(1));
221
compare(getTemplateEntry(1).title.text, i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1));
224
function test_serviceEnrollmentFirstRun() {
225
var targetName = i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1);
227
// A test where the template id is 0.
228
getEnrollmentObserver().mockEnroll(0, "");
230
verify(getTemplateEntry(0));
231
compare(getTemplateEntry(0).title.text, targetName);
234
function test_serviceEnrollmentReusesId() {
235
// Test a case where enrollment processes re-uses the template id
236
// Hopefully this will never happen, but it currently does in testing,
238
var targetName = i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1);
240
getEnrollmentObserver().mockEnroll(0, "");
241
verify(getTemplateEntry(0));
242
compare(getTemplateEntry(0).title.text, targetName);
244
// Re-enroll same id, make sure it doesn't change the name
245
getEnrollmentObserver().mockEnroll(0, "");
246
verify(getTemplateEntry(0));
247
compare(getTemplateEntry(0).title.text, targetName);
251
function test_serviceClearance() {
252
GSettingsController.setFingerprintNames({
253
"tmplId1": "A finger",
254
"tmplId2": "My finger"
256
getClearanceObserver().mockClearance("");
258
verify(!getTemplateEntry(0));
259
compare(GSettingsController.fingerprintNames(), {});
264
GSettingsController.setFingerprintNames({});
265
gsettingsInstance.destroy();
266
gsettingsInstance = null;
267
pageInstance.destroy();
273
id: requestDeletionSpy
274
signalName: "requestDeletion"
279
signalName: "requestRename"
286
property var templateInstance: null
288
function getDeleteButton() {
289
return findChild(templateInstance, "templateDelete");
292
function getHeader() {
293
return findChild(templateInstance, "templateHeader");
296
function getNameInput() {
297
return findChild(templateInstance, "nameInput");
300
function getFailedDialog() {
301
return findChild(testRoot, "fingerprintDeletionFailedDialog");
304
function getFailedDialogOk() {
305
return findChild(testRoot, "fingerprintDeleteionFailedOk");
309
templateInstance = fingerprintComponent.createObject(testRoot);
310
pageStack.push(templateInstance);
311
requestRenameSpy.target = templateInstance;
312
requestDeletionSpy.target = templateInstance;
316
requestRenameSpy.clear();
317
requestDeletionSpy.clear();
319
templateInstance.destroy();
320
templateInstance = null;
323
function test_name() {
324
templateInstance.name = "My finger";
325
compare(getHeader().title, "My finger");
326
compare(getNameInput().text, "My finger");
329
function test_requestDeletion() {
330
templateInstance.templateId = "tmplId";
331
var button = getDeleteButton();
332
mouseClick(button, button.width / 2, button.height / 2);
333
requestDeletionSpy.wait();
334
compare(requestDeletionSpy.count, 1);
335
compare(requestDeletionSpy.signalArguments[0][0], "tmplId");
338
function test_requestRename() {
339
templateInstance.templateId = "tmplId";
340
templateInstance.name = "My finger";
341
requestRenameSpy.clear();
343
getNameInput().text = "Your finger";
344
requestRenameSpy.wait();
345
compare(requestRenameSpy.count, 1);
346
compare(requestRenameSpy.signalArguments[0][0], "tmplId");
347
compare(requestRenameSpy.signalArguments[0][1], "Your finger");
350
function test_deletionFailed() {
351
templateInstance.deletionFailed();
352
tryCompareFunction(function () {
353
return !!getFailedDialog();
356
var button = getFailedDialogOk();
357
mouseClick(button, button.width / 2, button.height / 2);
359
tryCompareFunction(function () {
360
return !!getFailedDialog();