144 lines
4.5 KiB
Dart
144 lines
4.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:moonwell_launcher/app/design_system/mw_authentication.dart';
|
|
import 'package:moonwell_launcher/app/launcher_version.dart';
|
|
import 'package:moonwell_launcher/app/theme/moonwell_design_system.dart';
|
|
|
|
void main() {
|
|
testWidgets('authentication placeholders use muted text color', (
|
|
tester,
|
|
) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
|
home: Scaffold(
|
|
body: MwAuthenticationForm(
|
|
usernameController: TextEditingController(),
|
|
passwordController: TextEditingController(),
|
|
onSubmit: () {},
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
final fieldContext = tester.element(find.byType(TextField).first);
|
|
final hintColor = Theme.of(
|
|
fieldContext,
|
|
).inputDecorationTheme.hintStyle?.color;
|
|
|
|
expect(hintColor, const Color(0x69ECE4D0));
|
|
});
|
|
|
|
testWidgets('registration mode exposes all API registration fields', (
|
|
tester,
|
|
) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
|
home: Scaffold(
|
|
body: SingleChildScrollView(
|
|
child: MwAuthenticationForm(
|
|
usernameController: TextEditingController(),
|
|
emailController: TextEditingController(),
|
|
passwordController: TextEditingController(),
|
|
passwordConfirmationController: TextEditingController(),
|
|
inviteCodeController: TextEditingController(),
|
|
mode: MwAuthenticationMode.registration,
|
|
termsAccepted: true,
|
|
onSubmit: () {},
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
expect(find.text('СОЗДАТЬ АККАУНТ'), findsOneWidget);
|
|
expect(find.text('EMAIL'), findsOneWidget);
|
|
expect(find.text('ПОВТОРИТЕ ПАРОЛЬ'), findsOneWidget);
|
|
expect(find.text('ИНВАЙТ-КОД (НЕОБЯЗАТЕЛЬНО)'), findsOneWidget);
|
|
expect(
|
|
find.text('Я принимаю правила сервера и пользовательское соглашение'),
|
|
findsOneWidget,
|
|
);
|
|
});
|
|
|
|
testWidgets('authentication tabs request mode changes', (tester) async {
|
|
MwAuthenticationMode? requestedMode;
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
|
home: Scaffold(
|
|
body: MwAuthenticationForm(
|
|
usernameController: TextEditingController(),
|
|
passwordController: TextEditingController(),
|
|
onModeChanged: (mode) => requestedMode = mode,
|
|
onSubmit: () {},
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
await tester.tap(find.text('РЕГИСТРАЦИЯ'));
|
|
|
|
expect(requestedMode, MwAuthenticationMode.registration);
|
|
});
|
|
|
|
testWidgets('inactive authentication tab has no divider', (tester) async {
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
|
home: Scaffold(
|
|
body: MwAuthenticationForm(
|
|
usernameController: TextEditingController(),
|
|
passwordController: TextEditingController(),
|
|
onSubmit: () {},
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
final tabBorders = tester
|
|
.widgetList<Container>(
|
|
find.descendant(
|
|
of: find.byType(MwAuthenticationForm),
|
|
matching: find.byType(Container),
|
|
),
|
|
)
|
|
.map((container) => container.decoration)
|
|
.whereType<BoxDecoration>()
|
|
.map((decoration) => decoration.border)
|
|
.whereType<Border>()
|
|
.where((border) => border.bottom.style != BorderStyle.none)
|
|
.map((border) => border.bottom.color)
|
|
.toList();
|
|
|
|
expect(tabBorders, hasLength(2));
|
|
expect(
|
|
tabBorders.where((color) => color == Colors.transparent),
|
|
hasLength(1),
|
|
);
|
|
});
|
|
|
|
testWidgets('authentication footer uses the packaged launcher version', (
|
|
tester,
|
|
) async {
|
|
await tester.pumpWidget(
|
|
LauncherVersionScope(
|
|
version: '9.8.7',
|
|
child: MaterialApp(
|
|
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
|
home: Scaffold(
|
|
body: MwAuthenticationForm(
|
|
usernameController: TextEditingController(),
|
|
passwordController: TextEditingController(),
|
|
onSubmit: () {},
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
expect(find.textContaining('V 9.8.7'), findsOneWidget);
|
|
});
|
|
}
|