Files
moonwell-launcher/test/app/design_system/mw_authentication_test.dart
T
2026-07-28 21:12:21 +04:00

121 lines
3.9 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/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),
);
});
}