@@ -210,6 +210,14 @@ Item {
210210 compare(greeter.shown, false);
211211 }
212212
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");
219+ }
220+
213221 function test_unlockPass() {
214222 selectUser("has-password");
215223 tryCompare(viewShowPromptSpy, "count", 1);
@@ -566,6 +574,7 @@ Item {
566574
567575 function test_fingerprintSuccess() {
568576 var index = selectUser("has-password");
577+ unlockAndShowGreeter(); // turn on lockscreen mode
569578
570579 var biometryd = findInvisibleChild(greeter, "biometryd");
571580 verify(biometryd.operation);
@@ -575,8 +584,22 @@ Item {
575584 verify(!greeter.active);
576585 }
577586
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
590+
591+ var biometryd = findInvisibleChild(greeter, "biometryd");
592+ verify(biometryd.operation);
593+ verify(biometryd.operation.running);
594+
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"));
598+ }
599+
578600 function test_fingerprintFailureMessage() {
579601 var index = selectUser("has-password");
602+ unlockAndShowGreeter(); // turn on lockscreen mode
580603
581604 var biometryd = findInvisibleChild(greeter, "biometryd");
582605 verify(biometryd.operation);
@@ -588,7 +611,8 @@ Item {
588611 }
589612
590613 function test_fingerprintTooManyFailures() {
591− selectUser("has-password");
614+ var index = selectUser("has-password");
615+ unlockAndShowGreeter(); // turn on lockscreen mode
592616
593617 var biometryd = findInvisibleChild(greeter, "biometryd");
594618 biometryd.operation.mockFailure("error");
@@ -599,17 +623,31 @@ Item {
599623 compare(viewTryToUnlockSpy.count, 1);
600624
601625 compare(viewShowErrorMessageSpy.count, 3);
626+ compare(viewShowErrorMessageSpy.signalArguments[2][0], i18n.tr("Use passphrase"));
627+
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"));
632+
633+ greeter.forcedUnlock = true;
634+ LightDM.Greeter.showGreeter();
635+ tryCompare(greeter, "waiting", false);
636+
637+ biometryd.operation.mockSuccess(LightDM.Users.data(index, LightDM.UserRoles.UidRole));
638+ verify(!greeter.active);
602639 }
603640
604641 function test_fingerprintFailureCountReset() {
605642 selectUser("has-password");
643+ unlockAndShowGreeter(); // turn on lockscreen mode
606644
607645 var biometryd = findInvisibleChild(greeter, "biometryd");
608646 biometryd.operation.mockFailure("error");
609647 biometryd.operation.mockFailure("error");
610648 compare(viewTryToUnlockSpy.count, 0);
611649
612− greeter.forceShow();
650+ unlockAndShowGreeter();
613651 biometryd.operation.mockFailure("error");
614652 biometryd.operation.mockFailure("error");
615653 compare(viewTryToUnlockSpy.count, 0);
@@ -622,6 +660,7 @@ Item {
622660
623661 function test_fingerprintWrongUid() {
624662 selectUser("has-password");
663+ unlockAndShowGreeter(); // turn on lockscreen mode
625664
626665 var biometryd = findInvisibleChild(greeter, "biometryd");
627666 biometryd.operation.mockSuccess(0);
@@ -634,6 +673,7 @@ Item {
634673 function test_fingerprintNotEnabled() {
635674 AccountsService.enableFingerprintIdentification = false;
636675 selectUser("has-password");
676+ unlockAndShowGreeter(); // turn on lockscreen mode
637677
638678 var biometryd = findInvisibleChild(greeter, "biometryd");
639679 verify(!biometryd.operation);
@@ -649,6 +689,7 @@ Item {
649689 function test_fingerprintReaderNotPresent() {
650690 Biometryd.available = false;
651691 selectUser("has-password");
692+ unlockAndShowGreeter(); // turn on lockscreen mode
652693
653694 verify(!Biometryd.available);
654695
@@ -665,6 +706,7 @@ Item {
665706
666707 function test_fingerprintGreeterNotActive() {
667708 selectUser("has-password");
709+ unlockAndShowGreeter(); // turn on lockscreen mode
668710
669711 var biometryd = findInvisibleChild(greeter, "biometryd");
670712 verify(biometryd.operation);