@@ -210,6 +210,14 @@ Item {
210 compare(greeter.shown, false);
210 compare(greeter.shown, false);
213+ function unlockAndShowGreeter() {
214+ // useful to enable "lockscreen mode" in greeter
215+ greeter.forcedUnlock = true;
216+ LightDM.Greeter.showGreeter();
217+ tryCompare(greeter, "waiting", false);
218+ view = findChild(greeter, "testView");
213 function test_unlockPass() {
221 function test_unlockPass() {
214 selectUser("has-password");
222 selectUser("has-password");
215 tryCompare(viewShowPromptSpy, "count", 1);
223 tryCompare(viewShowPromptSpy, "count", 1);
@@ -566,6 +574,7 @@ Item {
567 function test_fingerprintSuccess() {
575 function test_fingerprintSuccess() {
568 var index = selectUser("has-password");
576 var index = selectUser("has-password");
577+ unlockAndShowGreeter(); // turn on lockscreen mode
570 var biometryd = findInvisibleChild(greeter, "biometryd");
579 var biometryd = findInvisibleChild(greeter, "biometryd");
571 verify(biometryd.operation);
580 verify(biometryd.operation);
@@ -575,8 +584,22 @@ Item {
575 verify(!greeter.active);
584 verify(!greeter.active);
587+ function test_fingerprintFirstLoginDisabled() {
588+ var index = selectUser("has-password");
589+ // don't hide/show greeter, we want to test behavior before lockscreen mode is on
591+ var biometryd = findInvisibleChild(greeter, "biometryd");
592+ verify(biometryd.operation);
593+ verify(biometryd.operation.running);
595+ biometryd.operation.mockSuccess(LightDM.Users.data(index, LightDM.UserRoles.UidRole));
596+ compare(viewShowErrorMessageSpy.count, 1);
597+ compare(viewShowErrorMessageSpy.signalArguments[0][0], i18n.tr("Use passphrase"));
578 function test_fingerprintFailureMessage() {
600 function test_fingerprintFailureMessage() {
579 var index = selectUser("has-password");
601 var index = selectUser("has-password");
602+ unlockAndShowGreeter(); // turn on lockscreen mode
581 var biometryd = findInvisibleChild(greeter, "biometryd");
604 var biometryd = findInvisibleChild(greeter, "biometryd");
582 verify(biometryd.operation);
605 verify(biometryd.operation);
@@ -588,7 +611,8 @@ Item {
590 function test_fingerprintTooManyFailures() {
613 function test_fingerprintTooManyFailures() {
591− selectUser("has-password");
614+ var index = selectUser("has-password");
615+ unlockAndShowGreeter(); // turn on lockscreen mode
593 var biometryd = findInvisibleChild(greeter, "biometryd");
617 var biometryd = findInvisibleChild(greeter, "biometryd");
594 biometryd.operation.mockFailure("error");
618 biometryd.operation.mockFailure("error");
@@ -599,17 +623,31 @@ Item {
599 compare(viewTryToUnlockSpy.count, 1);
623 compare(viewTryToUnlockSpy.count, 1);
601 compare(viewShowErrorMessageSpy.count, 3);
625 compare(viewShowErrorMessageSpy.count, 3);
626+ compare(viewShowErrorMessageSpy.signalArguments[2][0], i18n.tr("Use passphrase"));
628+ // Confirm that we are stuck in this mode until next login
629+ biometryd.operation.mockSuccess(LightDM.Users.data(index, LightDM.UserRoles.UidRole));
630+ compare(viewShowErrorMessageSpy.count, 4);
631+ compare(viewShowErrorMessageSpy.signalArguments[3][0], i18n.tr("Use passphrase"));
633+ greeter.forcedUnlock = true;
634+ LightDM.Greeter.showGreeter();
635+ tryCompare(greeter, "waiting", false);
637+ biometryd.operation.mockSuccess(LightDM.Users.data(index, LightDM.UserRoles.UidRole));
638+ verify(!greeter.active);
604 function test_fingerprintFailureCountReset() {
641 function test_fingerprintFailureCountReset() {
605 selectUser("has-password");
642 selectUser("has-password");
643+ unlockAndShowGreeter(); // turn on lockscreen mode
607 var biometryd = findInvisibleChild(greeter, "biometryd");
645 var biometryd = findInvisibleChild(greeter, "biometryd");
608 biometryd.operation.mockFailure("error");
646 biometryd.operation.mockFailure("error");
609 biometryd.operation.mockFailure("error");
647 biometryd.operation.mockFailure("error");
610 compare(viewTryToUnlockSpy.count, 0);
648 compare(viewTryToUnlockSpy.count, 0);
612− greeter.forceShow();
650+ unlockAndShowGreeter();
613 biometryd.operation.mockFailure("error");
651 biometryd.operation.mockFailure("error");
614 biometryd.operation.mockFailure("error");
652 biometryd.operation.mockFailure("error");
615 compare(viewTryToUnlockSpy.count, 0);
653 compare(viewTryToUnlockSpy.count, 0);
@@ -622,6 +660,7 @@ Item {
623 function test_fingerprintWrongUid() {
661 function test_fingerprintWrongUid() {
624 selectUser("has-password");
662 selectUser("has-password");
663+ unlockAndShowGreeter(); // turn on lockscreen mode
626 var biometryd = findInvisibleChild(greeter, "biometryd");
665 var biometryd = findInvisibleChild(greeter, "biometryd");
627 biometryd.operation.mockSuccess(0);
666 biometryd.operation.mockSuccess(0);
@@ -634,6 +673,7 @@ Item {
634 function test_fingerprintNotEnabled() {
673 function test_fingerprintNotEnabled() {
635 AccountsService.enableFingerprintIdentification = false;
674 AccountsService.enableFingerprintIdentification = false;
636 selectUser("has-password");
675 selectUser("has-password");
676+ unlockAndShowGreeter(); // turn on lockscreen mode
638 var biometryd = findInvisibleChild(greeter, "biometryd");
678 var biometryd = findInvisibleChild(greeter, "biometryd");
639 verify(!biometryd.operation);
679 verify(!biometryd.operation);
@@ -649,6 +689,7 @@ Item {
649 function test_fingerprintReaderNotPresent() {
689 function test_fingerprintReaderNotPresent() {
650 Biometryd.available = false;
690 Biometryd.available = false;
651 selectUser("has-password");
691 selectUser("has-password");
692+ unlockAndShowGreeter(); // turn on lockscreen mode
653 verify(!Biometryd.available);
694 verify(!Biometryd.available);
@@ -665,6 +706,7 @@ Item {
666 function test_fingerprintGreeterNotActive() {
707 function test_fingerprintGreeterNotActive() {
667 selectUser("has-password");
708 selectUser("has-password");
709+ unlockAndShowGreeter(); // turn on lockscreen mode
669 var biometryd = findInvisibleChild(greeter, "biometryd");
711 var biometryd = findInvisibleChild(greeter, "biometryd");
670 verify(biometryd.operation);
712 verify(biometryd.operation);