diff --git a/integration_test/flows/auth_flows.dart b/integration_test/flows/auth_flows.dart index e16fd686..d5aebf91 100644 --- a/integration_test/flows/auth_flows.dart +++ b/integration_test/flows/auth_flows.dart @@ -1,9 +1,13 @@ import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import '../data/environment_constants.dart'; import '../utils/fluffy_chat_tester.dart'; +Future finalLogout(WidgetTester widgetTester) => + widgetTester.startFluffyChatTest().then((tester) => tester.logout()); + extension AuthFlows on FluffyChatTester { Future login() async { await waitFor('Sign in'); @@ -18,6 +22,7 @@ extension AuthFlows on FluffyChatTester { } Future logout() async { + await ensureLoggedIn(); await tapOn(Key('accounts_and_settings_buttons')); await tapOn('Settings'); await scrollUntilVisible('Logout'); diff --git a/integration_test/flows/basic_messaging.dart b/integration_test/flows/basic_messaging.dart index eb3e0944..c0c2547c 100644 --- a/integration_test/flows/basic_messaging.dart +++ b/integration_test/flows/basic_messaging.dart @@ -1,10 +1,9 @@ -import 'package:fluffychat/pages/chat_list/chat_list.dart'; -import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import '../utils/fluffy_chat_tester.dart'; import 'auth_flows.dart'; +import 'chat_flows.dart'; Future basicMessaging(WidgetTester widgetTester) => widgetTester .startFluffyChatTest() @@ -12,31 +11,13 @@ Future basicMessaging(WidgetTester widgetTester) => widgetTester extension on FluffyChatTester { Future _basicMessaging() async { - final shouldLogout = await ensureLoggedIn(); + await ensureLoggedIn(); + await ensureGroupChatCreated(); - // Create a new group chat - await tapOn(FloatingActionButton); - await tapOn('Create group'); - await enterText(TextField, 'Test Group 01'); - await tapOn('Create a group and invite users'); - await waitFor('Invite contact'); - await goBack(); - - // Send a message + await tapOn(ChatFlows.groupChatName); const testMessage = 'Hello from integration test!'; await enterText(Key('chat_input_field'), testMessage); await tapOn(Key('send_button')); - - // Ensure message is visible await waitFor(testMessage); - - // Archive the chat - await tapOn(ChatSettingsPopupMenu); - await tapOn('Leave'); - await waitFor('Are you sure?'); - await tapOn('Leave'); - await waitFor(ChatList); - - if (shouldLogout) await logout(); } } diff --git a/integration_test/flows/chat_flows.dart b/integration_test/flows/chat_flows.dart new file mode 100644 index 00000000..512a6af2 --- /dev/null +++ b/integration_test/flows/chat_flows.dart @@ -0,0 +1,35 @@ +import 'package:fluffychat/pages/chat_list/chat_list.dart'; +import 'package:fluffychat/widgets/chat_settings_popup_menu.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../utils/fluffy_chat_tester.dart'; +import 'auth_flows.dart'; + +Future archiveChats(WidgetTester widgetTester) => + widgetTester.startFluffyChatTest().then((tester) => tester._archiveChats()); + +extension ChatFlows on FluffyChatTester { + static const String groupChatName = 'Test Group 01'; + + Future ensureGroupChatCreated() async { + if (await isVisible(groupChatName)) return; + await tapOn(FloatingActionButton); + await tapOn('Create group'); + await enterText(TextField, groupChatName); + await tapOn('Create a group and invite users'); + await waitFor('Invite contact'); + await goBack(); + await goBack(); + } + + Future _archiveChats() async { + await ensureLoggedIn(); + await ensureGroupChatCreated(); + await tapOn(ChatSettingsPopupMenu); + await tapOn('Leave'); + await waitFor('Are you sure?'); + await tapOn('Leave'); + await waitFor(ChatList); + } +} diff --git a/integration_test/mobile_test.dart b/integration_test/mobile_test.dart index fe10b949..8da68b0a 100644 --- a/integration_test/mobile_test.dart +++ b/integration_test/mobile_test.dart @@ -1,7 +1,9 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; +import 'flows/auth_flows.dart'; import 'flows/basic_messaging.dart'; +import 'flows/chat_flows.dart'; import 'flows/login_and_chat_backup.dart'; void main() { @@ -10,5 +12,7 @@ void main() { group('FluffyChat Integration Tests', () { testWidgets('Login and logout flow', loginAndChatBackup); testWidgets('Basic Messaging', basicMessaging); + testWidgets('Archive chats', archiveChats); + testWidgets('Final logout', finalLogout); }); } diff --git a/integration_test/utils/fluffy_chat_tester.dart b/integration_test/utils/fluffy_chat_tester.dart index fe3f754a..b91736fc 100644 --- a/integration_test/utils/fluffy_chat_tester.dart +++ b/integration_test/utils/fluffy_chat_tester.dart @@ -67,10 +67,7 @@ extension type FluffyChatTester(WidgetTester tester) { await tester.pumpAndSettle(); } - Future goBack() async { - _print('🔙 Going a page back'); - await tester.pageBack(); - } + Future goBack() => tapOn(find.byTooltip('Back')); Future enterText(Object object, String text, {int? index}) async { final finder = await _ensureVisible(object, index: index); diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 80d52545..90e43b87 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -2807,4 +2807,4 @@ "skipSupportingFluffyChat": "FluffyChat unterstützen überspringen", "iDoNotWantToSupport": "Ich möchte nicht unterstützen", "iAlreadySupportFluffyChat": "I unterstütze FluffyChat bereits" -} +} \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 7321c5b7..dfc8570f 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -2790,7 +2790,6 @@ "iAlreadySupportFluffyChat": "I already support FluffyChat", "setLowPriority": "Set low priority", "unsetLowPriority": "Unset low priority", - "jitsiGroupCalls": "Jitsi group calls", "removeCallFromChat": "Remove call from chat", "removeCallFromChatDescription": "Do you want to remove the call from the chat for all members?", "removeCallForEveryone": "Remove call for everyone", @@ -2799,4 +2798,4 @@ "joinVoiceCall": "Join voice call", "joinVideoCall": "Join video call", "live": "Live" -} +} \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index 7357fe1c..de030272 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -2801,4 +2801,4 @@ "iDoNotWantToSupport": "Ma ei soovi toetada", "setLowPriority": "Märgi vähetähtsaks", "unsetLowPriority": "Eemalda märkimine vähetähtsaks" -} +} \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index 15dc3a0b..246b11f4 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -2807,4 +2807,4 @@ "iAlreadySupportFluffyChat": "Tacaím le FluffyChat cheana féin", "setLowPriority": "Socraigh tosaíocht íseal", "unsetLowPriority": "Díshuiteáil tosaíocht íseal" -} +} \ No newline at end of file diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index aac975fb..1a817bfe 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -2801,4 +2801,4 @@ "iAlreadySupportFluffyChat": "Xa apoiei a FluffyChat", "setLowPriority": "Establecer prioridade baixa", "unsetLowPriority": "Non establecer prioridade baixa" -} +} \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index 085b157b..2741ed22 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -2808,4 +2808,4 @@ "iAlreadySupportFluffyChat": "Jeg støtter allerede FluffyChat", "setLowPriority": "Sett lav prioritet", "unsetLowPriority": "Fjern lav prioritet" -} +} \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 4896a6e3..2b33e66b 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -2800,4 +2800,4 @@ "support": "Steunen", "setLowPriority": "Lage prioriteit instellen", "unsetLowPriority": "Lage prioriteit uitschakelen" -} +} \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index be172484..504efa89 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -2801,4 +2801,4 @@ "iAlreadySupportFluffyChat": "我已支持 FluffyChat", "setLowPriority": "设置低优先级", "unsetLowPriority": "取消设置低优先级" -} +} \ No newline at end of file diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 6432bc39..731ca1b7 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -553,6 +553,7 @@ class ChatController extends State timeline?.cancelSubscriptions(); timeline = null; inputFocus.removeListener(_inputFocusListener); + if (currentlyTyping) room.setTyping(false); super.dispose(); } @@ -1289,6 +1290,7 @@ class ChatController extends State if (AppSettings.sendTypingNotifications.value) { typingCoolDown?.cancel(); typingCoolDown = Timer(const Duration(seconds: 2), () { + if (!mounted) return; typingCoolDown = null; currentlyTyping = false; room.setTyping(false);