Complete verification links and preserve verified login email (#60)
This commit is contained in:
1 parent
30f06c2f8f
commit
5f3b443e7b
25 files changed
+270
-32
No files matched your search
@@ -145,8 +145,8 @@ void main() {
|
||||
find.byKey(const ValueKey('verification-verified')),
|
||||
findsOneWidget,
|
||||
);
|
||||
await tester.ensureVisible(find.text('Back to login'));
|
||||
await tester.tap(find.text('Back to login'));
|
||||
await tester.ensureVisible(find.text('Continue to login'));
|
||||
await tester.tap(find.text('Continue to login'));
|
||||
await tester.pumpAndSettle();
|
||||
expect(find.byKey(const ValueKey('confirmation')), findsNothing);
|
||||
expect(find.text('example-password'), findsNothing);
|
||||
|
||||
@@ -42,6 +42,67 @@ Future<GoRouter> openRoute(
|
||||
}
|
||||
|
||||
void main() {
|
||||
for (final language in ['en', 'ru']) {
|
||||
testWidgets(
|
||||
'verified link keeps success visible and prefills login ($language)',
|
||||
(tester) async {
|
||||
tester.platformDispatcher.defaultRouteNameTestValue =
|
||||
'/verify-email?token=demo-valid';
|
||||
addTearDown(tester.platformDispatcher.clearDefaultRouteNameTestValue);
|
||||
await tester.pumpWidget(
|
||||
SxchngeApp(
|
||||
localeProvider: LocaleProvider(initialLocale: Locale(language)),
|
||||
verificationService: const DummyVerificationService(
|
||||
delay: Duration.zero,
|
||||
verifiedEmail: 'private-alias@example.com',
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
expect(
|
||||
find.byKey(const ValueKey('verification-verified')),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(find.byKey(const ValueKey('email')), findsNothing);
|
||||
final router = GoRouter.of(
|
||||
tester.element(find.byType(VerificationPage)),
|
||||
);
|
||||
expect(router.routeInformationProvider.value.uri.path, '/verify-email');
|
||||
await tester.ensureVisible(
|
||||
find.byKey(const ValueKey('verification-continue')),
|
||||
);
|
||||
await tester.tap(find.byKey(const ValueKey('verification-continue')));
|
||||
await tester.pumpAndSettle();
|
||||
final email = tester.widget<TextFormField>(
|
||||
find.byKey(const ValueKey('email')),
|
||||
);
|
||||
expect(email.controller!.text, 'private-alias@example.com');
|
||||
final password = tester.state<EditableTextState>(
|
||||
find.descendant(
|
||||
of: find.byKey(const ValueKey('password')),
|
||||
matching: find.byType(EditableText),
|
||||
),
|
||||
);
|
||||
expect(password.currentTextEditingValue.text, isEmpty);
|
||||
expect(password.widget.focusNode.hasFocus, isTrue);
|
||||
expect(router.routeInformationProvider.value.uri.toString(), '/');
|
||||
final restored = router.routeInformationParser.restoreRouteInformation(
|
||||
router.routerDelegate.currentConfiguration,
|
||||
)!;
|
||||
expect(
|
||||
restored.state.toString(),
|
||||
isNot(contains('private-alias@example.com')),
|
||||
);
|
||||
expect(restored.state.toString(), isNot(contains('demo-valid')));
|
||||
await tester.enterText(
|
||||
find.byKey(const ValueKey('email')),
|
||||
'changed@example.com',
|
||||
);
|
||||
expect(email.controller!.text, 'changed@example.com');
|
||||
expect(find.byKey(const ValueKey('confirmation')), findsNothing);
|
||||
},
|
||||
);
|
||||
}
|
||||
testWidgets('unknown deep link redirects to canonical login URL', (
|
||||
tester,
|
||||
) async {
|
||||
|
||||
Reference in new issue
Block a user