163 lines
4.7 KiB
Dart
163 lines
4.7 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:flutter_test/flutter_test.dart';
|
||
import 'package:moonwell_launcher/app/design_system/mw_launcher_components.dart';
|
||
import 'package:moonwell_launcher/app/launcher_version.dart';
|
||
import 'package:moonwell_launcher/app/theme/moonwell_design_system.dart';
|
||
|
||
void main() {
|
||
testWidgets('game rail shows WoW and MoonWell Karts', (tester) async {
|
||
await tester.pumpWidget(
|
||
MaterialApp(
|
||
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
||
home: const Scaffold(
|
||
body: SizedBox(width: 240, child: MwGameRail(username: 'Sindoring')),
|
||
),
|
||
),
|
||
);
|
||
|
||
expect(find.text('MOONWELL · WOW'), findsOneWidget);
|
||
expect(find.text('OPEN BETA'), findsOneWidget);
|
||
expect(find.text('S'), findsOneWidget);
|
||
expect(find.text('MOONWELL KARTS'), findsOneWidget);
|
||
expect(find.text('В РАЗРАБОТКЕ'), findsOneWidget);
|
||
expect(find.text('SOON'), findsNothing);
|
||
expect(find.textContaining('TIDES OF ELUNE'), findsNothing);
|
||
expect(find.textContaining('PROJECT VERGE'), findsNothing);
|
||
});
|
||
|
||
testWidgets('game rail settings button invokes settings callback', (
|
||
tester,
|
||
) async {
|
||
var settingsRequested = false;
|
||
await tester.pumpWidget(
|
||
MaterialApp(
|
||
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
||
home: Scaffold(
|
||
body: SizedBox(
|
||
width: 240,
|
||
child: MwGameRail(onSettings: () => settingsRequested = true),
|
||
),
|
||
),
|
||
),
|
||
);
|
||
|
||
await tester.tap(find.byTooltip('Настройки'));
|
||
|
||
expect(settingsRequested, isTrue);
|
||
});
|
||
|
||
testWidgets('sync area displays realm data received from API', (
|
||
tester,
|
||
) async {
|
||
await tester.pumpWidget(
|
||
MaterialApp(
|
||
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
||
home: const Scaffold(
|
||
body: SizedBox(
|
||
width: 1000,
|
||
height: 150,
|
||
child: MwSyncActionArea(
|
||
state: MwSyncPresentation.ready,
|
||
status: 'Клиент готов.',
|
||
realmName: 'MoonWell',
|
||
realmOnline: true,
|
||
realmGameBuild: 12340,
|
||
onPrimary: _noop,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
);
|
||
|
||
expect(find.text('MOONWELL'), findsOneWidget);
|
||
expect(find.text('ONLINE · BUILD 12340'), findsOneWidget);
|
||
});
|
||
|
||
testWidgets('news item invokes its link callback when pressed', (
|
||
tester,
|
||
) async {
|
||
var pressed = false;
|
||
await tester.pumpWidget(
|
||
MaterialApp(
|
||
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
||
home: Scaffold(
|
||
body: MwNewsItem(
|
||
item: MwNewsItemData(
|
||
title: 'Update 1.2',
|
||
body: 'News body',
|
||
onPressed: () => pressed = true,
|
||
),
|
||
),
|
||
),
|
||
),
|
||
);
|
||
|
||
await tester.tap(find.text('Update 1.2'));
|
||
|
||
expect(pressed, isTrue);
|
||
});
|
||
|
||
testWidgets('account affordance displays username without balance', (
|
||
tester,
|
||
) async {
|
||
await tester.pumpWidget(
|
||
MaterialApp(
|
||
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
||
home: Scaffold(
|
||
body: MwAccountAffordance(username: 'PLAYERONE', onLogout: _noop),
|
||
),
|
||
),
|
||
);
|
||
|
||
expect(find.text('PLAYERONE'), findsOneWidget);
|
||
expect(find.textContaining('1250'), findsNothing);
|
||
expect(find.text('P'), findsOneWidget);
|
||
|
||
await tester.tap(find.byType(PopupMenuButton<String>));
|
||
await tester.pumpAndSettle();
|
||
|
||
expect(find.text('Выйти'), findsOneWidget);
|
||
expect(find.text('Настройки'), findsNothing);
|
||
});
|
||
|
||
testWidgets('settings panel excludes logout action', (tester) async {
|
||
await tester.pumpWidget(
|
||
MaterialApp(
|
||
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
||
home: Scaffold(
|
||
body: MwSettingsPanel(
|
||
installationPath: r'C:\Games\MoonWell',
|
||
onChooseDirectory: _noop,
|
||
onVerify: _noop,
|
||
),
|
||
),
|
||
),
|
||
);
|
||
|
||
expect(find.text('Выбрать папку'), findsOneWidget);
|
||
expect(find.text('Проверить файлы'), findsOneWidget);
|
||
expect(find.text('Выйти'), findsNothing);
|
||
});
|
||
|
||
testWidgets('status bar uses the packaged launcher version', (tester) async {
|
||
await tester.pumpWidget(
|
||
LauncherVersionScope(
|
||
version: '9.8.7',
|
||
child: MaterialApp(
|
||
theme: MoonWellTheme.create(MoonWellThemeVariant.forest),
|
||
home: const Scaffold(
|
||
body: SizedBox(
|
||
height: 26,
|
||
child: MwLauncherStatusBar(status: 'Ready'),
|
||
),
|
||
),
|
||
),
|
||
),
|
||
);
|
||
|
||
expect(find.textContaining('v9.8.7'), findsOneWidget);
|
||
});
|
||
}
|
||
|
||
void _noop() {}
|