~ci-train-bot/ubuntu-settings-components/ubuntu-settings-components-ubuntu-yakkety-1895

« back to all changes in this revision

Viewing changes to tests/qmltests/Fingerprint/tst_FingerprintNames.qml

  • Committer: Bileto Bot
  • Date: 2016-06-20 14:01:03 UTC
  • mfrom: (103.6.69 fingerprint)
  • Revision ID: ci-train-bot@canonical.com-20160620140103-q57lulbze89e6yyd
jonas-drange
* Add components for Fingerprint management.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2016 Canonical Ltd.
 
3
 *
 
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.
 
7
 *
 
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.
 
12
 *
 
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/>.
 
15
 *
 
16
 * Authored by Jonas G. Drange <jonas.drange@canonical.com>
 
17
 */
 
18
 
 
19
import QtQuick 2.4
 
20
import QtTest 1.0
 
21
import Ubuntu.Test 0.1
 
22
import Ubuntu.Settings.Fingerprint 0.1
 
23
import Ubuntu.Components 1.3
 
24
import Biometryd 0.0
 
25
import GSettings 1.0
 
26
 
 
27
Item {
 
28
    id: testRoot
 
29
    width: units.gu(50)
 
30
    height: units.gu(90)
 
31
 
 
32
    PageStack {
 
33
        id: pageStack
 
34
    }
 
35
 
 
36
    Component {
 
37
        id: fingerprintsComponent
 
38
 
 
39
        Fingerprints {
 
40
            anchors.fill: parent
 
41
            visible: false
 
42
        }
 
43
    }
 
44
 
 
45
    Component {
 
46
        id: fingerprintComponent
 
47
 
 
48
        Fingerprint {
 
49
            anchors.fill: parent
 
50
            visible: false
 
51
        }
 
52
    }
 
53
 
 
54
    Component {
 
55
        id: gsettingsComponent
 
56
 
 
57
        GSettings {
 
58
            schema.id: "com.ubuntu.touch.system"
 
59
        }
 
60
    }
 
61
 
 
62
    UbuntuTestCase {
 
63
        name: "TestOverview"
 
64
        when: windowShown
 
65
 
 
66
        property var pageInstance: null
 
67
        property var gsettingsInstance: null
 
68
 
 
69
        function getTemplateEntry(i) {
 
70
            var id = "fingerprintInstance-" + i;
 
71
            return findChild(pageInstance, id);
 
72
        }
 
73
 
 
74
        function getListObserver() {
 
75
            return findInvisibleChild(pageInstance, "listObserver");
 
76
        }
 
77
 
 
78
        function getRemovalObserver() {
 
79
            return findInvisibleChild(pageInstance, "removalObserver");
 
80
        }
 
81
 
 
82
        function getClearanceObserver() {
 
83
            return findInvisibleChild(pageInstance, "clearanceObserver");
 
84
        }
 
85
 
 
86
        function getEnrollmentObserver() {
 
87
            return findInvisibleChild(pageInstance, "enrollmentObserver");
 
88
        }
 
89
 
 
90
        function initTestCase() {
 
91
            Biometryd.setAvailable(true);
 
92
        }
 
93
 
 
94
        function init() {
 
95
            gsettingsInstance = gsettingsComponent.createObject(testRoot);
 
96
            pageInstance = fingerprintsComponent.createObject(testRoot, {
 
97
                _settings: gsettingsInstance,
 
98
                passcodeSet: true
 
99
            });
 
100
            pageStack.push(pageInstance);
 
101
        }
 
102
 
 
103
        function test_listSort() {
 
104
            GSettingsController.setFingerprintNames({
 
105
                "first": "A finger",
 
106
                "second": "Big finger",
 
107
                "last": "Zmall finger",
 
108
            });
 
109
            compare(getTemplateEntry(0).title.text, "A finger");
 
110
            compare(getTemplateEntry(1).title.text, "Big finger");
 
111
            compare(getTemplateEntry(2).title.text, "Zmall finger");
 
112
        }
 
113
 
 
114
        function test_remoteRemoval() {
 
115
            GSettingsController.setFingerprintNames({
 
116
                "tmplId": "name"
 
117
            });
 
118
            verify(getTemplateEntry(0));
 
119
 
 
120
            GSettingsController.setFingerprintNames({});
 
121
            verify(!getTemplateEntry(0));
 
122
        }
 
123
 
 
124
        function test_remoteAddition() {
 
125
            GSettingsController.setFingerprintNames({
 
126
                "tmplId": "name"
 
127
            });
 
128
            verify(getTemplateEntry(0));
 
129
 
 
130
            GSettingsController.setFingerprintNames({
 
131
                "tmplId": "name",
 
132
                "tmplId2": "name2"
 
133
            });
 
134
            verify(getTemplateEntry(0));
 
135
            verify(getTemplateEntry(1));
 
136
        }
 
137
 
 
138
        function test_remoteRename() {
 
139
            GSettingsController.setFingerprintNames({
 
140
                "tmplId": "My finger",
 
141
            });
 
142
            compare(getTemplateEntry(0).title.text, "My finger");
 
143
            GSettingsController.setFingerprintNames({
 
144
                "tmplId": "Your finger",
 
145
            });
 
146
            compare(getTemplateEntry(0).title.text, "Your finger");
 
147
        }
 
148
 
 
149
        function test_localRemoval() {
 
150
            GSettingsController.setFingerprintNames({
 
151
                "tmplId": "name"
 
152
            });
 
153
            verify(getTemplateEntry(0));
 
154
            pageInstance.removeTemplate("tmplId");
 
155
            verify(!getTemplateEntry(0));
 
156
        }
 
157
 
 
158
        function test_localAddition() {
 
159
            pageInstance.addTemplate("tmplId", "My finger");
 
160
            verify(getTemplateEntry(0));
 
161
            compare(getTemplateEntry(0).title.text, "My finger");
 
162
        }
 
163
 
 
164
        function test_localRename() {
 
165
            GSettingsController.setFingerprintNames({
 
166
                "tmplId": "My finger"
 
167
            });
 
168
            pageInstance.renameTemplate("tmplId", "Your finger");
 
169
            verify(getTemplateEntry(0));
 
170
            compare(getTemplateEntry(0).title.text, "Your finger");
 
171
        }
 
172
 
 
173
        function test_createTemplateName() {
 
174
            GSettingsController.setFingerprintNames({
 
175
                "tmplId": i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1)
 
176
            });
 
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));
 
180
        }
 
181
 
 
182
        function test_assignNames() {
 
183
            var templateIds = ["tmplId0", "tmplId1", "tmplId2"];
 
184
 
 
185
            // This name shouldn't be overwritten
 
186
            GSettingsController.setFingerprintNames({
 
187
                "tmplId1": "My finger"
 
188
            });
 
189
 
 
190
            getListObserver().mockList(templateIds, "");
 
191
 
 
192
            verify(getTemplateEntry(0));
 
193
            compare(getTemplateEntry(0).title.text, i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1));
 
194
 
 
195
            verify(getTemplateEntry(1));
 
196
            compare(getTemplateEntry(1).title.text, i18n.dtr("ubuntu-settings-components", "Finger %1").arg(2));
 
197
 
 
198
            verify(getTemplateEntry(2));
 
199
            compare(getTemplateEntry(2).title.text, "My finger");
 
200
        }
 
201
 
 
202
        function test_serviceRemoval() {
 
203
            GSettingsController.setFingerprintNames({
 
204
                "tmplId": "A finger"
 
205
            });
 
206
            getRemovalObserver().mockRemoval("tmplId", "");
 
207
            verify(!getTemplateEntry(0));
 
208
            compare(GSettingsController.fingerprintNames(), {});
 
209
        }
 
210
 
 
211
        function test_serviceEnrollment() {
 
212
            GSettingsController.setFingerprintNames({
 
213
                "tmplId1": "Existing finger"
 
214
            });
 
215
            getEnrollmentObserver().mockEnroll("tmplId2", "");
 
216
 
 
217
            verify(getTemplateEntry(0));
 
218
            compare(getTemplateEntry(0).title.text, "Existing finger");
 
219
 
 
220
            verify(getTemplateEntry(1));
 
221
            compare(getTemplateEntry(1).title.text, i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1));
 
222
        }
 
223
 
 
224
        function test_serviceEnrollmentFirstRun() {
 
225
            var targetName = i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1);
 
226
 
 
227
            // A test where the template id is 0.
 
228
            getEnrollmentObserver().mockEnroll(0, "");
 
229
 
 
230
            verify(getTemplateEntry(0));
 
231
            compare(getTemplateEntry(0).title.text, targetName);
 
232
        }
 
233
 
 
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,
 
237
            // so test it.
 
238
            var targetName = i18n.dtr("ubuntu-settings-components", "Finger %1").arg(1);
 
239
 
 
240
            getEnrollmentObserver().mockEnroll(0, "");
 
241
            verify(getTemplateEntry(0));
 
242
            compare(getTemplateEntry(0).title.text, targetName);
 
243
 
 
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);
 
248
 
 
249
        }
 
250
 
 
251
        function test_serviceClearance() {
 
252
            GSettingsController.setFingerprintNames({
 
253
                "tmplId1": "A finger",
 
254
                "tmplId2": "My finger"
 
255
            });
 
256
            getClearanceObserver().mockClearance("");
 
257
 
 
258
            verify(!getTemplateEntry(0));
 
259
            compare(GSettingsController.fingerprintNames(), {});
 
260
        }
 
261
 
 
262
        function cleanup() {
 
263
            pageStack.pop();
 
264
            GSettingsController.setFingerprintNames({});
 
265
            gsettingsInstance.destroy();
 
266
            gsettingsInstance = null;
 
267
            pageInstance.destroy();
 
268
            pageInstance = null;
 
269
        }
 
270
    }
 
271
 
 
272
    SignalSpy {
 
273
        id: requestDeletionSpy
 
274
        signalName: "requestDeletion"
 
275
    }
 
276
 
 
277
    SignalSpy {
 
278
        id: requestRenameSpy
 
279
        signalName: "requestRename"
 
280
    }
 
281
 
 
282
    UbuntuTestCase {
 
283
        name: "TestTemplate"
 
284
        when: windowShown
 
285
 
 
286
        property var templateInstance: null
 
287
 
 
288
        function getDeleteButton() {
 
289
            return findChild(templateInstance, "templateDelete");
 
290
        }
 
291
 
 
292
        function getHeader() {
 
293
            return findChild(templateInstance, "templateHeader");
 
294
        }
 
295
 
 
296
        function getNameInput() {
 
297
            return findChild(templateInstance, "nameInput");
 
298
        }
 
299
 
 
300
        function getFailedDialog() {
 
301
            return findChild(testRoot, "fingerprintDeletionFailedDialog");
 
302
        }
 
303
 
 
304
        function getFailedDialogOk() {
 
305
            return findChild(testRoot, "fingerprintDeleteionFailedOk");
 
306
        }
 
307
 
 
308
        function init() {
 
309
            templateInstance = fingerprintComponent.createObject(testRoot);
 
310
            pageStack.push(templateInstance);
 
311
            requestRenameSpy.target = templateInstance;
 
312
            requestDeletionSpy.target = templateInstance;
 
313
        }
 
314
 
 
315
        function cleanup() {
 
316
            requestRenameSpy.clear();
 
317
            requestDeletionSpy.clear();
 
318
            pageStack.pop();
 
319
            templateInstance.destroy();
 
320
            templateInstance = null;
 
321
        }
 
322
 
 
323
        function test_name() {
 
324
            templateInstance.name = "My finger";
 
325
            compare(getHeader().title, "My finger");
 
326
            compare(getNameInput().text, "My finger");
 
327
        }
 
328
 
 
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");
 
336
        }
 
337
 
 
338
        function test_requestRename() {
 
339
            templateInstance.templateId = "tmplId";
 
340
            templateInstance.name = "My finger";
 
341
            requestRenameSpy.clear();
 
342
 
 
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");
 
348
        }
 
349
 
 
350
        function test_deletionFailed() {
 
351
            templateInstance.deletionFailed();
 
352
            tryCompareFunction(function () {
 
353
                return !!getFailedDialog();
 
354
            }, true);
 
355
 
 
356
            var button = getFailedDialogOk();
 
357
            mouseClick(button, button.width / 2, button.height / 2);
 
358
 
 
359
            tryCompareFunction(function () {
 
360
                return !!getFailedDialog();
 
361
            }, false);
 
362
        }
 
363
    }
 
364
}