190 lines
6.2 KiB
Dart
190 lines
6.2 KiB
Dart
import 'package:fluffychat/config/setting_keys.dart';
|
|
import 'package:fluffychat/pages/chat/chat_view.dart';
|
|
import 'package:fluffychat/pages/chat_list/chat_list_body.dart';
|
|
import 'package:fluffychat/pages/chat_list/search_title.dart';
|
|
import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.dart';
|
|
import 'package:fluffychat/widgets/m2_popup_menu_button.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:hive_flutter/hive_flutter.dart';
|
|
import 'package:integration_test/integration_test.dart';
|
|
|
|
import 'package:fluffychat/main.dart' as app;
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
import 'extensions/default_flows.dart';
|
|
import 'extensions/wait_for.dart';
|
|
import 'users.dart';
|
|
|
|
void main() {
|
|
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
group(
|
|
'Integration Test',
|
|
() {
|
|
setUpAll(
|
|
() async {
|
|
// this random dialog popping up is super hard to cover in tests
|
|
SharedPreferences.setMockInitialValues({
|
|
SettingKeys.showNoGoogle: false,
|
|
});
|
|
try {
|
|
Hive.deleteFromDisk();
|
|
Hive.initFlutter();
|
|
} catch (_) {}
|
|
},
|
|
);
|
|
|
|
testWidgets(
|
|
'Start app, login and logout',
|
|
(WidgetTester tester) async {
|
|
app.main();
|
|
await tester.ensureAppStartedHomescreen();
|
|
await tester.ensureLoggedOut();
|
|
},
|
|
);
|
|
|
|
testWidgets(
|
|
'Login again',
|
|
(WidgetTester tester) async {
|
|
app.main();
|
|
await tester.ensureAppStartedHomescreen();
|
|
},
|
|
);
|
|
|
|
testWidgets(
|
|
'Start chat and send message',
|
|
(WidgetTester tester) async {
|
|
app.main();
|
|
await tester.ensureAppStartedHomescreen();
|
|
await tester.waitFor(find.byType(TextField));
|
|
await tester.enterText(find.byType(TextField), Users.user2.name);
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.scrollUntilVisible(
|
|
find.text('Chats').first,
|
|
500,
|
|
scrollable: find
|
|
.descendant(
|
|
of: find.byType(ChatListViewBody),
|
|
matching: find.byType(Scrollable),
|
|
)
|
|
.first,
|
|
);
|
|
await tester.pumpAndSettle();
|
|
await tester.tap(find.text('Chats'));
|
|
await tester.pumpAndSettle();
|
|
await tester.waitFor(find.byType(SearchTitle));
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.scrollUntilVisible(
|
|
find.text(Users.user2.name).first,
|
|
500,
|
|
scrollable: find
|
|
.descendant(
|
|
of: find.byType(ChatListViewBody),
|
|
matching: find.byType(Scrollable),
|
|
)
|
|
.first,
|
|
);
|
|
await tester.pumpAndSettle();
|
|
await tester.tap(find.text(Users.user2.name).first);
|
|
|
|
try {
|
|
await tester.waitFor(
|
|
find.byType(ChatView),
|
|
timeout: const Duration(seconds: 5),
|
|
);
|
|
} catch (_) {
|
|
// in case the homeserver sends the username as search result
|
|
if (find.byIcon(Icons.send_outlined).evaluate().isNotEmpty) {
|
|
await tester.tap(find.byIcon(Icons.send_outlined));
|
|
await tester.pumpAndSettle();
|
|
}
|
|
}
|
|
|
|
await tester.waitFor(find.byType(ChatView));
|
|
await tester.enterText(find.byType(TextField).last, 'Test');
|
|
await tester.pumpAndSettle();
|
|
try {
|
|
await tester.waitFor(find.byIcon(Icons.send_outlined));
|
|
await tester.tap(find.byIcon(Icons.send_outlined));
|
|
} catch (_) {
|
|
await tester.testTextInput.receiveAction(TextInputAction.done);
|
|
}
|
|
await tester.pumpAndSettle();
|
|
await tester.waitFor(find.text('Test'));
|
|
await tester.pumpAndSettle();
|
|
},
|
|
);
|
|
|
|
testWidgets('Spaces', (tester) async {
|
|
app.main();
|
|
await tester.ensureAppStartedHomescreen();
|
|
|
|
await tester.waitFor(find.byTooltip('Show menu'));
|
|
await tester.tap(find.byTooltip('Show menu'));
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.waitFor(find.byIcon(Icons.workspaces_outlined));
|
|
await tester.tap(find.byIcon(Icons.workspaces_outlined));
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.waitFor(find.byType(TextField));
|
|
await tester.enterText(find.byType(TextField).last, 'Test Space');
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.testTextInput.receiveAction(TextInputAction.done);
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.waitFor(find.text('Invite contact'));
|
|
|
|
await tester.tap(find.text('Invite contact'));
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.waitFor(
|
|
find.descendant(
|
|
of: find.byType(InvitationSelectionView),
|
|
matching: find.byType(TextField)),
|
|
);
|
|
await tester.enterText(
|
|
find.descendant(
|
|
of: find.byType(InvitationSelectionView),
|
|
matching: find.byType(TextField)),
|
|
Users.user2.name,
|
|
);
|
|
|
|
await Future.delayed(const Duration(milliseconds: 250));
|
|
await tester.testTextInput.receiveAction(TextInputAction.done);
|
|
|
|
await Future.delayed(const Duration(milliseconds: 1000));
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.tap(find
|
|
.descendant(
|
|
of: find.descendant(
|
|
of: find.byType(InvitationSelectionView),
|
|
matching: find.byType(ListTile),
|
|
),
|
|
matching: find.text(Users.user2.name))
|
|
.last);
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.waitFor(find.maybeUppercaseText('Yes'));
|
|
await tester.tap(find.maybeUppercaseText('Yes'));
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.tap(find.byTooltip('Back'));
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.waitFor(find.text('Load 2 more participants'));
|
|
await tester.tap(find.text('Load 2 more participants'));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.text(Users.user2.name), findsOneWidget);
|
|
});
|
|
},
|
|
);
|
|
}
|