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( find.descendant( of: find.byType(MwAuthenticationForm), matching: find.byType(Container), ), ) .map((container) => container.decoration) .whereType() .map((decoration) => decoration.border) .whereType() .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); }); }