Skip to content
2 changes: 1 addition & 1 deletion integration_test/robots/add_member_robot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class AddMemberRobot extends CoreRobot {
Future<void> selectAllFilteredAccounts() async {
final accounts = getListOfChatGroup();
for( final account in accounts){
await account.getCheckBox().tap();
account.getCheckBox().tap();
}
}

Expand Down
9 changes: 9 additions & 0 deletions integration_test/robots/chat_list_robot.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:fluffychat/pages/chat_list/chat_list_bottom_navigator.dart';
import 'package:fluffychat/pages/chat_list/chat_list_item_title.dart';
import 'package:fluffychat/widgets/twake_components/twake_fab.dart';
import 'package:flutter/material.dart';
Expand All @@ -23,6 +24,14 @@ class ChatListRobot extends HomeRobot {
return $(TwakeFloatingActionButton);
}

PatrolFinder getPinIcon(){
return $(ChatListBottomNavigator).$(InkWell).containing($("Pin"));
}

PatrolFinder getUnPinIcon(){
return $(ChatListBottomNavigator).$(InkWell).containing($("Unpin"));
}

Future<void> clickOnPenIcon() async{
await getPenIcon().tap();
await $.waitUntilVisible($(AppBar).$("New chat"));
Expand Down
41 changes: 41 additions & 0 deletions integration_test/robots/chat_search_view_robot.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import 'package:fluffychat/pages/chat_search/chat_search_view.dart';
import 'package:fluffychat/widgets/twake_components/twake_icon_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:linagora_design_flutter/list_item/twake_list_item.dart';
import 'package:patrol/patrol.dart';
import '../base/core_robot.dart';
import 'twake_list_item_robot.dart';

class ChatSearchViewRobot extends CoreRobot {
ChatSearchViewRobot(super.$);

PatrolFinder getBackIcon() {
return $(ChatSearchView).$(TwakeIconButton).containing(find.byTooltip('Back'));
}

PatrolFinder getTextField() {
return $(ChatSearchView).$(AppBar).$(TextField);
}

PatrolFinder getSearchIcon() {
return getTextField().$(Icon).at(0);
}

PatrolFinder getCloseIcon() {
return getTextField().$(IconButton);
}

Future<List<TwakeListItemRobot>> getListOfChatSeach() async {
final List<TwakeListItemRobot> groupList = [];

// Evaluate once to find how many TwakeListItem widgets exist
final matches = $(TwakeListItem).evaluate();
for (final element in matches) {
final finder = $(element.widget.runtimeType);
groupList.add(TwakeListItemRobot($, finder));
}
return groupList;
}

}
2 changes: 1 addition & 1 deletion integration_test/robots/twake_list_item_robot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class TwakeListItemRobot extends CoreRobot {
return root.$(Radio).at(0);
}

Future<PatrolFinder> getCheckBox() async {
PatrolFinder getCheckBox() {
return root.$(Checkbox).at(0);
}

Expand Down
19 changes: 19 additions & 0 deletions integration_test/scenarios/chat_detail_scenario.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:linagora_design_flutter/list_item/twake_list_item.dart';
import '../base/base_scenario.dart';
import '../robots/chat_group_detail_robot.dart';
import 'package:flutter/material.dart';

class ChatDetailScenario extends BaseScenario {
ChatDetailScenario(super.$);

Future<void> makeASearch(String searchText) async {
await ChatGroupDetailRobot($).getSearchIcon().tap();
await $.waitUntilVisible($(AppBar).$(TextField));
await $(AppBar).$(TextField).enterText(searchText);
// await SearchRobot($).enterSearchText(searchText);
await ChatGroupDetailRobot($).waitForEitherVisible($: $, first: $(TwakeListItem), second: $("No Results"), timeout: const Duration(seconds: 10));
await Future.delayed(const Duration(seconds: 2));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't want to add the click on a search result and see if it display / scroll to the right message? (We know that today, it doesn't work, maybe that's why you didn't add it here?)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank for your suggestion @Crash-- .In the next PRs, I’ll try simulating the user’s scroll actions to figure out the item they want

}

}
39 changes: 39 additions & 0 deletions integration_test/scenarios/chat_scenario.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'package:fluffychat/pages/chat/events/message_time.dart';
import 'package:fluffychat/pages/chat/seen_by_row.dart';
import 'package:fluffychat/pages/chat_draft/draft_chat_view.dart';
import 'package:fluffychat/pages/chat_list/chat_list_body_view.dart';
import 'package:fluffychat/pages/chat_list/chat_list_item_title.dart';
import 'package:fluffychat/widgets/context_menu/context_menu_action_item_widget.dart';
import 'package:fluffychat/widgets/twake_components/twake_icon_button.dart';
import 'package:flutter_test/flutter_test.dart';
Expand All @@ -30,6 +31,7 @@ import '../robots/menu_robot.dart';
import '../robots/new_chat_robot.dart';
import '../robots/search_robot.dart';
import '../robots/setting_for_new_group.dart';
import '../robots/twake_list_item_robot.dart';

enum UserLevel { member, admin, owner, moderator }
class ChatScenario extends BaseScenario {
Expand Down Expand Up @@ -481,4 +483,41 @@ class ChatScenario extends BaseScenario {
s.softAssertEquals( await CoreRobot($).isActuallyScrollable($,root: $(SingleChildScrollView),), true,
'Chat list is not scrollable',);
}

bool isPinAChat(TwakeListItemRobot takeListItem) {
final title = takeListItem.root.$(ChatListItemTitle);
const pinData = IconData(0xF2D7, fontFamily: 'MaterialIcons');
final pinFinder = find.descendant(of: title, matching: find.byIcon(pinData));
final pin = $(pinFinder);
return pin.exists;
}

Future<void> pinAChat(String title) async {
final twakeListItem = ChatListRobot($).getChatGroupByTitle(title);
if(!isPinAChat(twakeListItem))
{
await twakeListItem.root.longPress();
await $.waitUntilVisible(twakeListItem.getCheckBox());
await ChatListRobot($).getPinIcon().tap();
await ChatListRobot($).waitUntilAbsent($, ChatListRobot($).getPinIcon());
}
}

Future<void> unPinAChat(String title) async {
final twakeListItem = ChatListRobot($).getChatGroupByTitle(title);
if(isPinAChat(twakeListItem))
{
await twakeListItem.root.longPress();
await $.waitUntilVisible(twakeListItem.getCheckBox());
await ChatListRobot($).getUnPinIcon().tap();
await ChatListRobot($).waitUntilAbsent($, ChatListRobot($).getUnPinIcon());
}
}

Future<void> verifyAChatIsPin(String title, bool isPin) async {
final twakeListItem = ChatListRobot($).getChatGroupByTitle(title);
final exists = isPinAChat(twakeListItem);
expect(exists, isPin, reason: 'Expected pin=$isPin but got $exists for "$title"');
}

}
17 changes: 17 additions & 0 deletions integration_test/tests/chat/chat_group_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import 'package:flutter_test/flutter_test.dart';
import '../../base/test_base.dart';
import '../../help/soft_assertion_helper.dart';
import '../../robots/chat_group_detail_robot.dart';
import '../../robots/chat_search_view_robot.dart';
import '../../scenarios/chat_detail_scenario.dart';
import '../../scenarios/chat_scenario.dart';
import '../../robots/home_robot.dart';
import 'package:patrol/patrol.dart';
Expand Down Expand Up @@ -179,4 +181,19 @@ void main() {

},
);

TestBase().runPatrolTest(
description: 'Search for messages inside a chat',
test: ($) async {
//open chat and make some messages
final receiveMessage = (await prepareTwoMessages($)).$2;
final searchPharse = receiveMessage.substring(receiveMessage.indexOf("sent"), receiveMessage.length);

//open a chat
await ChatDetailScenario($).makeASearch(searchPharse);
// verify info dialog is shown
final numberOfResult = (await ChatSearchViewRobot($).getListOfChatSeach()).length;
expect(numberOfResult == 2, isTrue, reason: "expect is 2 but got: $numberOfResult");
},
);
}
18 changes: 18 additions & 0 deletions integration_test/tests/chat/chat_list_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,22 @@ void main() {
reason: "expect the different is 1 but the second is $numberOfUnreadMessage2 and the first is $numberOfUnreadMessage1",);
},
);

TestBase().runPatrolTest(
description: 'Pin/unpin a chat',
test: ($) async {
const groupTest = String.fromEnvironment('GroupTest');
// goto chat screen
await HomeRobot($).gotoChatListScreen();
// pin a chat
await ChatScenario($).pinAChat(groupTest);
// verify the chat is pin
await ChatScenario($).verifyAChatIsPin(groupTest, true);

// unpin a chat
await ChatScenario($).unPinAChat(groupTest);
// verify the chat is unPin
await ChatScenario($).verifyAChatIsPin(groupTest, false);
},
);
}
Loading