You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			194 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			194 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: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);
 | 
						|
      });
 | 
						|
    },
 | 
						|
  );
 | 
						|
}
 |