From 98da54dacca23dbf26d057aba85954acb9fac558 Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 4 Feb 2024 13:51:49 +0530 Subject: [PATCH 1/8] removed all code related to task feature --- lang/de.json | 2 - lang/en.json | 2 - lang/es.json | 2 - lang/fr.json | 2 - lang/hi.json | 2 - lang/ja.json | 2 - lang/pt.json | 2 - lang/zh.json | 2 - lib/locator.dart | 6 - lib/models/task/task_model.dart | 45 --- lib/router.dart | 36 +- lib/services/task_service.dart | 176 --------- lib/utils/task_queries.dart | 109 ------ .../create_task_view_model.dart | 88 ----- .../explore_tasks_view_model.dart | 55 --- .../tasks/create_task_page.dart | 28 -- .../tasks/edit_task_page.dart | 30 -- .../tasks/event_tasks_page.dart | 45 --- .../tasks/user_tasks_page.dart | 32 -- lib/widgets/task_form.dart | 206 ---------- lib/widgets/task_schedule.dart | 234 ------------ pubspec.lock | 42 +- test/helpers/test_helpers.dart | 38 +- test/helpers/test_helpers.mocks.dart | 110 ------ test/helpers/test_locator.dart | 4 - test/model_tests/task_model_test.dart | 51 --- test/router_test.dart | 39 -- test/service_tests/event_service_test.dart | 11 +- test/service_tests/task_service_test.dart | 237 ------------ .../create_task_view_model_test.dart | 71 ---- .../explore_tasks_view_model_test.dart | 47 --- .../tasks/user_tasks_page_test.dart | 94 ----- .../tasks/create_task_page_test.dart | 33 -- .../tasks/edit_task_page_test.dart | 67 ---- .../tasks/event_tasks_page_test.dart | 40 -- .../tasks/user_tasks_page_test.dart | 33 -- .../select_language_page_test.dart | 5 +- test/widget_tests/widgets/task_form_test.dart | 147 ------- .../widgets/task_schedule_test.dart | 359 ------------------ 39 files changed, 41 insertions(+), 2493 deletions(-) delete mode 100644 lib/models/task/task_model.dart delete mode 100644 lib/services/task_service.dart delete mode 100644 lib/utils/task_queries.dart delete mode 100644 lib/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart delete mode 100644 lib/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart delete mode 100644 lib/views/after_auth_screens/tasks/create_task_page.dart delete mode 100644 lib/views/after_auth_screens/tasks/edit_task_page.dart delete mode 100644 lib/views/after_auth_screens/tasks/event_tasks_page.dart delete mode 100644 lib/views/after_auth_screens/tasks/user_tasks_page.dart delete mode 100644 lib/widgets/task_form.dart delete mode 100644 lib/widgets/task_schedule.dart delete mode 100644 test/model_tests/task_model_test.dart delete mode 100644 test/service_tests/task_service_test.dart delete mode 100644 test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/create_task_view_model_test.dart delete mode 100644 test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/explore_tasks_view_model_test.dart delete mode 100644 test/views/after_auth_screens/tasks/user_tasks_page_test.dart delete mode 100644 test/widget_tests/after_auth_screens/tasks/create_task_page_test.dart delete mode 100644 test/widget_tests/after_auth_screens/tasks/edit_task_page_test.dart delete mode 100644 test/widget_tests/after_auth_screens/tasks/event_tasks_page_test.dart delete mode 100644 test/widget_tests/after_auth_screens/tasks/user_tasks_page_test.dart delete mode 100644 test/widget_tests/widgets/task_form_test.dart delete mode 100644 test/widget_tests/widgets/task_schedule_test.dart diff --git a/lang/de.json b/lang/de.json index 88a9fc80f..709016c6b 100644 --- a/lang/de.json +++ b/lang/de.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "Melden Sie den Beitrag dem Admin", "Do you really want to delete the post?": "Möchten Sie den Beitrag wirklich löschen?", "Liked": "Gefällt", - "Add Task Title": "Aufgabentitel hinzufügen", - "Describe the task": "Beschreiben Sie die Aufgabe", "Looks like there aren't any events.": "Es scheint keine Veranstaltungen zu geben.", "You have not created any event.": "Sie haben keine Veranstaltung erstellt.", "No registered events are present": "Keine registrierten Veranstaltungen vorhanden", diff --git a/lang/en.json b/lang/en.json index f01750f09..10dacfe68 100644 --- a/lang/en.json +++ b/lang/en.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "Report the post to the Admin", "Do you really want to delete the post?": "Do you really want to delete the post?", "Liked": "Liked", - "Add Task Title": "Add Task Title", - "Describe the task": "Describe the task", "Looks like there aren't any events.": "Looks like there aren't any events.", "You have not created any event.": "You have not created any event.", "No registered events are present": "No registered events are present", diff --git a/lang/es.json b/lang/es.json index 775be9269..55e0a3bc1 100644 --- a/lang/es.json +++ b/lang/es.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "Reportar la publicación al Administrador", "Do you really want to delete the post?": "¿Realmente quieres eliminar la publicación?", "Liked": "Gustado", - "Add Task Title": "Añadir título de tarea", - "Describe the task": "Describir la tarea", "Looks like there aren't any events.": "Parece que no hay eventos.", "You have not created any event.": "No has creado ningún evento.", "No registered events are present": "No hay eventos registrados", diff --git a/lang/fr.json b/lang/fr.json index 4b2dca9f0..2f7a8b84a 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "Signaler le post à l'Admin", "Do you really want to delete the post?": "Voulez-vous vraiment supprimer le post?", "Liked": "Aimé", - "Add Task Title": "Ajouter un titre de tâche", - "Describe the task": "Décrire la tâche", "Looks like there aren't any events.": "On dirait qu'il n'y a pas d'événements.", "You have not created any event.": "Vous n'avez créé aucun événement.", "No registered events are present": "Aucun événement enregistré n'est présent", diff --git a/lang/hi.json b/lang/hi.json index dfbe4d2c9..2009720dd 100644 --- a/lang/hi.json +++ b/lang/hi.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "पोस्ट को एडमिन को रिपोर्ट करें", "Do you really want to delete the post?": "क्या आप वाकई पोस्ट को हटाना चाहते हैं?", "Liked": "पसंद किया", - "Add Task Title": "टास्क का शीर्षक जोड़ें", - "Describe the task": "कार्य का वर्णन करें", "Looks like there aren't any events.": "लगता है कि कोई इवेंट नहीं हैं।", "You have not created any event.": "आपने कोई इवेंट नहीं बनाया है।", "No registered events are present": "कोई पंजीकृत इवेंट मौजूद नहीं हैं", diff --git a/lang/ja.json b/lang/ja.json index c1f9fb462..f5c9654fc 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "投稿を管理者に報告する", "Do you really want to delete the post?": "本当に投稿を削除しますか?", "Liked": "いいね", - "Add Task Title": "タスクのタイトルを追加", - "Describe the task": "タスクを説明する", "Looks like there aren't any events.": "イベントがないようです。", "You have not created any event.": "あなたはどんなイベントも作成していません。", "No registered events are present": "登録されたイベントは存在しません", diff --git a/lang/pt.json b/lang/pt.json index 131ddc34b..20c78a894 100644 --- a/lang/pt.json +++ b/lang/pt.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "Reportar a postagem ao Administrador", "Do you really want to delete the post?": "Você realmente quer deletar a postagem?", "Liked": "Curtido", - "Add Task Title": "Adicionar título da tarefa", - "Describe the task": "Descrever a tarefa", "Looks like there aren't any events.": "Parece que não há eventos.", "You have not created any event.": "Você não criou nenhum evento.", "No registered events are present": "Não há eventos registrados", diff --git a/lang/zh.json b/lang/zh.json index c2dfed2b1..a4e5aa0b5 100644 --- a/lang/zh.json +++ b/lang/zh.json @@ -200,8 +200,6 @@ "Report the post to the Admin": "向管理员举报帖子", "Do you really want to delete the post?": "您真的想要删除这个帖子吗?", "Liked": "喜欢", - "Add Task Title": "添加任务标题", - "Describe the task": "描述任务", "Looks like there aren't any events.": "看起来没有任何活动。", "You have not created any event.": "您还没有创建任何活动。", "No registered events are present": "没有注册的活动", diff --git a/lib/locator.dart b/lib/locator.dart index b3746ea41..e4d321c97 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -13,7 +13,6 @@ import 'package:talawa/services/navigation_service.dart'; import 'package:talawa/services/org_service.dart'; import 'package:talawa/services/post_service.dart'; import 'package:talawa/services/size_config.dart'; -import 'package:talawa/services/task_service.dart'; import 'package:talawa/services/third_party_service/multi_media_pick_service.dart'; import 'package:talawa/services/user_config.dart'; import 'package:talawa/utils/queries.dart'; @@ -29,8 +28,6 @@ import 'package:talawa/view_model/after_auth_view_models/feed_view_models/organi import 'package:talawa/view_model/after_auth_view_models/profile_view_models/edit_profile_view_model.dart'; import 'package:talawa/view_model/after_auth_view_models/profile_view_models/profile_page_view_model.dart'; import 'package:talawa/view_model/after_auth_view_models/settings_view_models/app_setting_view_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; import 'package:talawa/view_model/lang_view_model.dart'; import 'package:talawa/view_model/main_screen_view_model.dart'; import 'package:talawa/view_model/pre_auth_view_models/login_view_model.dart'; @@ -97,7 +94,6 @@ void setupLocator() { //Services locator.registerLazySingleton(() => PostService()); locator.registerLazySingleton(() => EventService()); - locator.registerLazySingleton(() => TaskService()); locator.registerLazySingleton(() => CommentService()); locator.registerLazySingleton(() => OrganizationService()); locator.registerLazySingleton(() => MultiMediaPickerService()); @@ -127,8 +123,6 @@ void setupLocator() { locator.registerFactory(() => SignupDetailsViewModel()); locator.registerFactory(() => WaitingViewModel()); locator.registerFactory(() => ExploreEventsViewModel()); - locator.registerFactory(() => ExploreTasksViewModel()); - locator.registerFactory(() => CreateTaskViewModel()); locator.registerFactory(() => MainScreenViewModel()); locator.registerFactory(() => ProfilePageViewModel()); locator.registerFactory(() => EditProfilePageViewModel()); diff --git a/lib/models/task/task_model.dart b/lib/models/task/task_model.dart deleted file mode 100644 index ccecca96b..000000000 --- a/lib/models/task/task_model.dart +++ /dev/null @@ -1,45 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:talawa/models/events/event_model.dart'; -import 'package:talawa/models/user/user_info.dart'; - -//This class creates a Task model and returns a Task instance. -class Task { - const Task({ - required this.id, - required this.title, - required this.creator, - required this.event, - required this.createdAt, - this.description, - this.deadline, - }); - ////Creating a new Task instance from a map structure. - factory Task.fromJson( - Map json, - ) { - return Task( - id: json['_id'] as String, - title: json['title'] as String, - creator: User.fromJson( - json['creator'] as Map, - fromOrg: true, - ), - event: Event.fromJson( - json['event'] as Map, - ), - createdAt: json['createdAt'] as String, - description: json['description'] as String?, - deadline: json['deadline'] as String?, - ); - } - - final String id; - final String title; - final User creator; - final Event event; - final String createdAt; - final String? description; - final String? deadline; -} diff --git a/lib/router.dart b/lib/router.dart index 45e533fe3..6df9c44a2 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -6,7 +6,6 @@ import 'package:talawa/models/events/event_model.dart'; import 'package:talawa/models/mainscreen_navigation_args.dart'; import 'package:talawa/models/organization/org_info.dart'; import 'package:talawa/models/post/post_model.dart'; -import 'package:talawa/models/task/task_model.dart'; import 'package:talawa/splash_screen.dart'; import 'package:talawa/view_model/after_auth_view_models/chat_view_models/direct_chat_view_model.dart'; import 'package:talawa/views/after_auth_screens/add_post_page.dart'; @@ -26,10 +25,6 @@ import 'package:talawa/views/after_auth_screens/join_org_after_auth/access_reque import 'package:talawa/views/after_auth_screens/join_org_after_auth/join_organisation_after_auth.dart'; import 'package:talawa/views/after_auth_screens/profile/edit_profile_page.dart'; import 'package:talawa/views/after_auth_screens/profile/profile_page.dart'; -import 'package:talawa/views/after_auth_screens/tasks/create_task_page.dart'; -import 'package:talawa/views/after_auth_screens/tasks/edit_task_page.dart'; -import 'package:talawa/views/after_auth_screens/tasks/event_tasks_page.dart'; -import 'package:talawa/views/after_auth_screens/tasks/user_tasks_page.dart'; import 'package:talawa/views/demo_screens/explore_events_demo.dart'; import 'package:talawa/views/demo_screens/organization_feed_demo.dart'; import 'package:talawa/views/demo_screens/profile_page_demo.dart'; @@ -280,36 +275,7 @@ Route generateRoute(RouteSettings settings) { key: const Key('Calendar'), ), ); - case Routes.eventTasks: - final eventId = settings.arguments! as String; - return MaterialPageRoute( - builder: (context) => EventTasksPage( - eventId: eventId, - key: const Key('EventTasks'), - ), - ); - case Routes.userTasks: - return MaterialPageRoute( - builder: (context) => const UserTasksPage( - key: Key('UserTasks'), - ), - ); - case Routes.addTask: - final eventId = settings.arguments! as String; - return MaterialPageRoute( - builder: (context) => CreateTaskPage( - key: const Key('AddTask'), - eventId: eventId, - ), - ); - case Routes.editTask: - final task = settings.arguments! as Task; - return MaterialPageRoute( - builder: (context) => EditTaskPage( - key: const Key('EditTask'), - task: task, - ), - ); + case Routes.selectContact: return MaterialPageRoute( builder: (context) => const SelectContact(key: Key('selectContact')), diff --git a/lib/services/task_service.dart b/lib/services/task_service.dart deleted file mode 100644 index 6f818f491..000000000 --- a/lib/services/task_service.dart +++ /dev/null @@ -1,176 +0,0 @@ -import 'package:flutter/painting.dart'; -import 'package:graphql_flutter/graphql_flutter.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/services/database_mutation_functions.dart'; -import 'package:talawa/services/user_config.dart'; -import 'package:talawa/utils/task_queries.dart'; - -/// Provides functions in the context of a Task. -/// -/// Services include: -/// * `getTasksForEvent` : to get the task for the event. -/// * `getTasksByUser` : to get the task added by the user. -/// * `editTask` : to edit the task added by the user. -/// * `createTask` : to create the task for the event. -/// * `deleteTask` : to delete the task added by the user. -class TaskService { - final _databaseMutationFunctions = locator(); - final _userConfig = locator(); - - /// callBack to NotifyListeners. - late VoidCallback callbackNotifyListeners; - - final _tasks = []; - - /// List of Tasks. - List get tasks => _tasks; - - /// Retrieves tasks for a specific event. - /// - /// **params**: - /// * `eventId`: The ID of the event for which tasks - /// are to be retrieved. - /// - /// **returns**: - /// None - Future getTasksForEvent(String eventId) async { - await _databaseMutationFunctions - .refreshAccessToken(_userConfig.currentUser.refreshToken!); - final res = await _databaseMutationFunctions - .gqlNonAuthQuery(TaskQueries.eventTasks(eventId)); - - if (res != null) { - _tasks.clear(); - final tasksList = res.data!['tasksByEvent'] as List; - tasksList.forEach((task) { - _tasks.add(Task.fromJson(task as Map)); - }); - } - } - - /// Retrieves tasks associated with the current user. - /// - /// **params**: - /// None - /// - /// **returns**: - /// None - Future getTasksByUser() async { - await _databaseMutationFunctions - .refreshAccessToken(_userConfig.currentUser.refreshToken!); - final res = await _databaseMutationFunctions - .gqlNonAuthQuery(TaskQueries.userTasks(_userConfig.currentUser.id!)); - - if (res != null) { - _tasks.clear(); - final tasksList = res.data!['tasksByUser'] as List; - tasksList.forEach((task) { - _tasks.add(Task.fromJson(task as Map)); - }); - } - } - - /// Edits a task with the provided details. - /// - /// **params**: - /// * `title`: The new title for the task. - /// * `description`: The new description for the task. - /// * `deadline`: The new deadline for the task. - /// * `taskId`: The ID of the task to be edited. - /// - /// **returns**: - /// * `Future`: A promise that will be fulfilled - /// with a boolean value indicating whether the task - /// was successfully edited. - Future editTask({ - required String title, - required String description, - required String deadline, - required String taskId, - }) async { - _databaseMutationFunctions - .refreshAccessToken(_userConfig.currentUser.refreshToken!); - final res = await _databaseMutationFunctions.gqlAuthMutation( - TaskQueries.editTask( - title: title, - description: description, - deadline: deadline, - taskId: taskId, - ), - ); - - // if res is not null. - if (res != null) { - final updatedtaskJson = - (res as QueryResult).data!['updateTask'] as Map; - final index = _tasks.indexWhere((task) => task.id == taskId); - if (index == -1) return false; - final updatedtask = Task.fromJson(updatedtaskJson); - updatedtask.event.title = _tasks[index].event.title; - _tasks[index] = updatedtask; - callbackNotifyListeners(); - // if successfully updated then return true. - return true; - } - return false; - } - - /// Creates a new task with the provided details. - /// - /// **params**: - /// * `title`: The title for the new task. - /// * `description`: The description for the new task. - /// * `deadline`: The deadline for the new task. - /// * `eventId`: The ID of the event associated with - /// the new task. - /// - /// **returns**: - /// * `Future`: A promise that will be fulfilled - /// with a boolean value indicating whether the task - /// was successfully created. - Future createTask({ - required String title, - required String description, - required String deadline, - required String eventId, - }) async { - _databaseMutationFunctions - .refreshAccessToken(_userConfig.currentUser.refreshToken!); - final res = await _databaseMutationFunctions.gqlAuthMutation( - TaskQueries.addTask( - title: title, - description: description, - deadline: deadline, - eventId: eventId, - ), - ); - - if (res != null) { - final task = - (res as QueryResult).data!['createTask'] as Map; - _tasks.add(Task.fromJson(task)); - callbackNotifyListeners(); - return true; - } - return false; - } - - /// Deletes a task given its ID and the creator's ID. - /// - /// **params**: - /// * `taskId`: The ID of the task to be deleted. - /// * `creatorId`: The ID of the task's creator. - /// - /// **returns**: - /// None - Future deleteTask(String taskId, String creatorId) async { - if (creatorId == _userConfig.currentUser.id) { - await _databaseMutationFunctions - .refreshAccessToken(_userConfig.currentUser.refreshToken!); - final res = await _databaseMutationFunctions - .gqlAuthMutation(TaskQueries.deleteTask(taskId)); - if (res != null) _tasks.removeWhere((task) => task.id == taskId); - } - } -} diff --git a/lib/utils/task_queries.dart b/lib/utils/task_queries.dart deleted file mode 100644 index 09308421f..000000000 --- a/lib/utils/task_queries.dart +++ /dev/null @@ -1,109 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -///This class creates queries for the tasks in the application. -class TaskQueries { - static String eventTasks(String eventId) => ''' - query { - tasksByEvent(id: "$eventId") { - _id - title - description - createdAt - deadline - creator { - _id - firstName - } - event { - _id - title - } - } - } - '''; - - static String userTasks(String userId) => ''' - query { - tasksByUser(id: "$userId") { - _id - title - description - createdAt - deadline - creator { - _id - firstName - } - event { - _id - title - } - } - } - '''; - - static String addTask({ - required String title, - required String description, - required String deadline, - required String eventId, - }) => - ''' - mutation { - createTask( - data: { title: "$title", description: "$description", deadline: "$deadline" } - eventId: "$eventId" - ) { - _id - title - description - createdAt - deadline - creator { - _id - firstName - } - event { - _id - title - } - } - } - '''; - - static String editTask({ - required String title, - required String description, - required String deadline, - required String taskId, - }) => - ''' - mutation { - updateTask( - data: { title: "$title", description: "$description", deadline: "$deadline" } - id: "$taskId" - ) { - _id - title - description - createdAt - deadline - creator { - _id - } - event { - _id - } - } - } - '''; - - static String deleteTask(String taskId) => ''' - mutation { - removeTask(id: "$taskId") { - _id - } - } - '''; -} diff --git a/lib/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart b/lib/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart deleted file mode 100644 index 7c5d92042..000000000 --- a/lib/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart +++ /dev/null @@ -1,88 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/services/task_service.dart'; -import 'package:talawa/view_model/base_view_model.dart'; - -/// CreateTaskViewModel class helps to interact with model to serve data -/// and react to user's input in Create Task view. -/// -/// Methods include: -/// * `fillTask` -/// * `editTask -/// * `createTask` -class CreateTaskViewModel extends BaseModel { - final _taskService = locator(); - - final taskTitleTextController = TextEditingController(); - final taskDescriptionTextController = TextEditingController(); - - DateTime taskEndDate = DateTime.now(); - TimeOfDay taskEndTime = TimeOfDay.now(); - - /// This functions fills the task controller data. - /// - /// params: - /// * [task] : `Task` type contain task data. - void fillTask(Task task) { - taskTitleTextController.text = task.title; - taskDescriptionTextController.text = task.description ?? ''; - if (task.deadline != null) { - taskEndDate = - DateTime.fromMicrosecondsSinceEpoch(int.parse(task.deadline!)); - taskEndTime = TimeOfDay.fromDateTime(taskEndDate); - } - } - - /// This function updates the task. - /// The function uses `editTask` method provided by Task Services. - /// - /// params: - /// * [taskId] : id of the task that needs to be updated. - Future editTask(String taskId) async { - final deadline = DateTime( - taskEndDate.year, - taskEndDate.month, - taskEndDate.day, - taskEndTime.hour, - taskEndTime.minute, - ); - return _taskService.editTask( - title: taskTitleTextController.text, - description: taskDescriptionTextController.text, - deadline: deadline.microsecondsSinceEpoch.toString(), - taskId: taskId, - ); - } - - /// This function creates a new task for an event. - /// The function uses `createTask` method provided by Task Services. - /// - /// params: - /// * [eventId] : id of the event for which task need to be add. - Future createTask(String eventId) async { - final deadline = DateTime( - taskEndDate.year, - taskEndDate.month, - taskEndDate.day, - taskEndTime.hour, - taskEndTime.minute, - ); - return _taskService.createTask( - title: taskTitleTextController.text, - description: taskDescriptionTextController.text, - deadline: deadline.microsecondsSinceEpoch.toString(), - eventId: eventId, - ); - } - - @override - void dispose() { - taskTitleTextController.dispose(); - taskDescriptionTextController.dispose(); - super.dispose(); - } -} diff --git a/lib/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart b/lib/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart deleted file mode 100644 index ca8d8d34a..000000000 --- a/lib/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart +++ /dev/null @@ -1,55 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:talawa/enums/enums.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/services/task_service.dart'; -import 'package:talawa/view_model/base_view_model.dart'; - -/// ExploreTasksViewModel class helps to interact with model to serve data -/// and react to user's input in Explore Task section. -/// -/// Methods include: -/// * `fetchTasks` -/// * `fetchTasksByUser -/// * `deleteTask` -class ExploreTasksViewModel extends BaseModel { - ExploreTasksViewModel() { - _taskService.callbackNotifyListeners = () => notifyListeners(); - } - - final _taskService = locator(); - - List get tasks => _taskService.tasks; - - /// This function fetch all the task for an event. - /// The function uses `getTasksForEvent` method of Task Service. - /// - /// params: - /// * [eventId] : id of an event for which tasks need to be fetched. - Future fetchTasks(String eventId) async { - setState(ViewState.busy); - await _taskService.getTasksForEvent(eventId); - setState(ViewState.idle); - } - - /// This function fetch tasks created by the current user for an event. - /// The function uses `getTasksByUser` method of Task Service. - Future fetchTasksByUser() async { - setState(ViewState.busy); - await _taskService.getTasksByUser(); - setState(ViewState.idle); - } - - /// This function deletes the task for an event. - /// The function uses `deleteTask` method of Task Service. - /// - /// params: - /// * [taskId] : id of the task need to be deleted. - /// * [creatorId] : id of the task creator. - Future deleteTask(String taskId, String creatorId) async { - await _taskService.deleteTask(taskId, creatorId); - notifyListeners(); - } -} diff --git a/lib/views/after_auth_screens/tasks/create_task_page.dart b/lib/views/after_auth_screens/tasks/create_task_page.dart deleted file mode 100644 index ba16f56af..000000000 --- a/lib/views/after_auth_screens/tasks/create_task_page.dart +++ /dev/null @@ -1,28 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; -import 'package:talawa/views/base_view.dart'; -import 'package:talawa/widgets/task_form.dart'; - -/// CreateTaskPage returns a widget for page to create task for the user. -class CreateTaskPage extends StatelessWidget { - const CreateTaskPage({required this.eventId, super.key}); - - final String eventId; - - @override - Widget build(BuildContext context) { - return BaseView( - builder: (context, model, _) { - // renders custom widget TaskForm, you can explore TaskForm widget [here](/widgets/task_form.dart). - return TaskForm( - onSave: () => model.createTask(eventId), - title: 'Create Task', - actionText: 'Add', - ); - }, - ); - } -} diff --git a/lib/views/after_auth_screens/tasks/edit_task_page.dart b/lib/views/after_auth_screens/tasks/edit_task_page.dart deleted file mode 100644 index 3ec502811..000000000 --- a/lib/views/after_auth_screens/tasks/edit_task_page.dart +++ /dev/null @@ -1,30 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; -import 'package:talawa/views/base_view.dart'; -import 'package:talawa/widgets/task_form.dart'; - -/// EditTaskPage returns a widget for page to edit the task for the user. -class EditTaskPage extends StatelessWidget { - const EditTaskPage({required this.task, super.key}); - - final Task task; - - @override - Widget build(BuildContext context) { - return BaseView( - onModelReady: (model) => model.fillTask(task), - builder: (context, model, _) { - // renders custom widget TaskForm, you can explore TaskForm widget [here](/widgets/task_form.dart). - return TaskForm( - onSave: () => model.editTask(task.id), - title: 'Edit Task', - actionText: 'Update', - ); - }, - ); - } -} diff --git a/lib/views/after_auth_screens/tasks/event_tasks_page.dart b/lib/views/after_auth_screens/tasks/event_tasks_page.dart deleted file mode 100644 index e10396ab2..000000000 --- a/lib/views/after_auth_screens/tasks/event_tasks_page.dart +++ /dev/null @@ -1,45 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:talawa/constants/routing_constants.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; -import 'package:talawa/views/base_view.dart'; -import 'package:talawa/widgets/task_schedule.dart'; - -/// EventTasksPage return a widget for Event Task Page that is created by event creator. -class EventTasksPage extends StatelessWidget { - const EventTasksPage({super.key, required this.eventId}); - - final String eventId; - - @override - Widget build(BuildContext context) { - return BaseView( - onModelReady: (model) => model.fetchTasks(eventId), - builder: (_, model, __) { - final tasks = model.tasks; - return RefreshIndicator( - onRefresh: () => model.fetchTasks(eventId), - child: Scaffold( - appBar: AppBar( - title: const Text('Event Tasks'), - ), - // TaskSchedule is custom widget. - body: TaskSchedule(tasks: tasks), - floatingActionButton: FloatingActionButton( - onPressed: () async { - await navigationService.pushScreen( - Routes.addTask, - arguments: eventId, - ); - }, - child: const Icon(Icons.add), - ), - ), - ); - }, - ); - } -} diff --git a/lib/views/after_auth_screens/tasks/user_tasks_page.dart b/lib/views/after_auth_screens/tasks/user_tasks_page.dart deleted file mode 100644 index 47fa3b286..000000000 --- a/lib/views/after_auth_screens/tasks/user_tasks_page.dart +++ /dev/null @@ -1,32 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; -import 'package:talawa/views/base_view.dart'; -import 'package:talawa/widgets/task_schedule.dart'; - -/// UserTasksPage returns a widget for page of User Tasks. -class UserTasksPage extends StatelessWidget { - const UserTasksPage({super.key}); - - @override - Widget build(BuildContext context) { - return BaseView( - onModelReady: (model) => model.fetchTasksByUser(), - builder: (_, model, __) { - final tasks = model.tasks; - return RefreshIndicator( - onRefresh: () => model.fetchTasksByUser(), - child: Scaffold( - appBar: AppBar( - title: const Text('User Tasks'), - ), - // TaskSchedule is custom widget. - body: TaskSchedule(tasks: tasks, showMoreOptions: true), - ), - ); - }, - ); - } -} diff --git a/lib/widgets/task_form.dart b/lib/widgets/task_form.dart deleted file mode 100644 index 12a01e49e..000000000 --- a/lib/widgets/task_form.dart +++ /dev/null @@ -1,206 +0,0 @@ -// ignore_for_file: talawa_api_doc -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/utils/validators.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; -import 'package:talawa/widgets/custom_progress_dialog.dart'; -import 'package:talawa/widgets/date_time_picker.dart'; -import 'package:talawa/widgets/event_date_time_tile.dart'; - -class TaskForm extends StatefulWidget { - const TaskForm({ - required this.onSave, - required this.title, - required this.actionText, - super.key, - }); - - final Future Function() onSave; - final String title; - final String actionText; - - @override - State createState() => _TaskFormState(); -} - -class _TaskFormState extends State { - final _formKey = GlobalKey(); - @override - Widget build(BuildContext context) { - final model = context.read(); - return Scaffold( - appBar: AppBar( - backgroundColor: Theme.of(context).primaryColor, - elevation: 1, - centerTitle: true, - leading: GestureDetector( - onTap: () { - navigationService.pop(); - }, - child: const Icon(Icons.close), - ), - title: Text( - AppLocalizations.of(context)!.strictTranslate(widget.title), - style: Theme.of(context).textTheme.titleLarge!.copyWith( - fontWeight: FontWeight.w600, - fontSize: 20, - ), - ), - actions: [ - TextButton( - key: const Key('task_form_text_button'), - onPressed: () async { - if (!_formKey.currentState!.validate()) return; - FocusManager.instance.primaryFocus?.unfocus(); - navigationService.pushDialog( - const CustomProgressDialog( - key: Key('EventTaskCreationProgress'), - ), - ); - final success = await widget.onSave(); - navigationService.pop(); - if (success) navigationService.pop(); - }, - child: Text( - AppLocalizations.of(context)!.strictTranslate(widget.actionText), - style: Theme.of(context).textTheme.bodyLarge!.copyWith( - fontSize: 16, - color: Theme.of(context).colorScheme.secondary, - ), - ), - ), - ], - ), - body: Scrollbar( - thickness: 2, - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(15), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Form( - key: _formKey, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const TitleField(), - SizedBox(height: SizeConfig.screenHeight! * 0.013), - SizedBox(height: SizeConfig.screenHeight! * 0.013), - const DescriptionField(), - ], - ), - ), - SizedBox(height: SizeConfig.screenHeight! * 0.013), - const Divider(), - Text( - AppLocalizations.of(context)! - .strictTranslate('Select End Date and Time'), - style: Theme.of(context) - .textTheme - .headlineSmall! - .copyWith(fontSize: 16), - ), - SizedBox(height: SizeConfig.screenHeight! * 0.013), - DateTimeTile( - date: "${model.taskEndDate.toLocal()}".split(' ')[0], - time: model.taskEndTime.format(context), - setDate: () async { - final date = - await customDatePicker(initialDate: model.taskEndDate); - setState(() => model.taskEndDate = date); - }, - setTime: () async { - final time = - await customTimePicker(initialTime: model.taskEndTime); - setState(() => model.taskEndTime = time); - }, - ), - ], - ), - ), - ), - ), - ); - } -} - -class TitleField extends StatelessWidget { - const TitleField({super.key}); - - @override - Widget build(BuildContext context) { - final taskTitleTextController = context - .select((CreateTaskViewModel model) => model.taskTitleTextController); - return TextFormField( - textInputAction: TextInputAction.next, - controller: taskTitleTextController, - keyboardType: TextInputType.name, - maxLength: 100, - validator: (value) => Validator.validateEventForm(value!, 'Title'), - decoration: InputDecoration( - labelText: - AppLocalizations.of(context)!.strictTranslate('Add Task Title'), - isDense: true, - labelStyle: Theme.of(context).textTheme.titleMedium, - focusedBorder: InputBorder.none, - counterText: "", - enabledBorder: InputBorder.none, - prefixIcon: Container( - transform: Matrix4.translationValues( - -SizeConfig.screenWidth! * 0.027, - 0.0, - 0.0, - ), - child: const Icon( - Icons.title, - size: 25, - ), - ), - ), - ); - } -} - -class DescriptionField extends StatelessWidget { - const DescriptionField({super.key}); - - @override - Widget build(BuildContext context) { - final taskDescriptionTextController = context.select( - (CreateTaskViewModel model) => model.taskDescriptionTextController, - ); - - return TextFormField( - keyboardType: TextInputType.multiline, - controller: taskDescriptionTextController, - validator: (value) => Validator.validateEventForm(value!, 'Description'), - maxLines: 10, - minLines: 1, - decoration: InputDecoration( - hintText: - AppLocalizations.of(context)!.strictTranslate('Describe the task'), - labelText: - AppLocalizations.of(context)!.strictTranslate('Add Description'), - labelStyle: Theme.of(context).textTheme.titleMedium, - border: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - prefixIcon: Container( - transform: Matrix4.translationValues( - -SizeConfig.screenWidth! * 0.027, - 0.0, - 0.0, - ), - child: const Icon( - Icons.view_headline, - size: 25, - ), - ), - ), - ); - } -} diff --git a/lib/widgets/task_schedule.dart b/lib/widgets/task_schedule.dart deleted file mode 100644 index 39807408c..000000000 --- a/lib/widgets/task_schedule.dart +++ /dev/null @@ -1,234 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:provider/provider.dart'; -import 'package:syncfusion_flutter_calendar/calendar.dart'; -import 'package:talawa/constants/routing_constants.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; - -class TaskSchedule extends StatelessWidget { - const TaskSchedule({ - super.key, - required this.tasks, - this.showMoreOptions = false, - }); - - final List tasks; - final bool showMoreOptions; - - void calendarTapped(CalendarTapDetails details) { - if (details.targetElement == CalendarElement.appointment || - details.targetElement == CalendarElement.agenda) { - final Appointment appointmentDetails = - details.appointments![0] as Appointment; - final subjectText = appointmentDetails.subject; - final dateText = - DateFormat('MMMM dd, yyyy').format(appointmentDetails.startTime); - final endTimeText = - DateFormat('hh:mm a').format(appointmentDetails.endTime); - final timeDetails = endTimeText; - - navigationService.pushDialog( - AlertDialog( - title: Text( - subjectText, - style: TextStyle( - color: Theme.of(navigationService.navigatorKey.currentContext!) - .primaryColorLight, - fontWeight: FontWeight.w500, - fontSize: 22, - ), - ), - content: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text(appointmentDetails.notes!), - const SizedBox(height: 10), - Text('$dateText $timeDetails'), - ], - ), - actions: [ - TextButton( - onPressed: () => navigationService.pop(), - child: const Text('Close'), - ), - ], - ), - ); - } - } - - @override - Widget build(BuildContext context) { - return SfCalendar( - view: CalendarView.schedule, - dataSource: _getCalendarDataSource(tasks), - scheduleViewSettings: const ScheduleViewSettings( - hideEmptyScheduleWeek: true, - appointmentItemHeight: 70, - monthHeaderSettings: MonthHeaderSettings( - height: 0, - ), - ), - onTap: calendarTapped, - appointmentBuilder: (context, appointments) { - final appointment = appointments.appointments.first as Appointment; - final task = tasks.firstWhere((task) => task.id == appointment.id); - return TaskCard( - appointment: appointment, - showMoreOptions: showMoreOptions, - task: task, - ); - }, - ); - } -} - -class TaskCard extends StatelessWidget { - const TaskCard({ - super.key, - required this.appointment, - required this.showMoreOptions, - required this.task, - }); - - final Appointment appointment; - final bool showMoreOptions; - final Task task; - - @override - Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - color: appointment.color, - borderRadius: const BorderRadius.all( - Radius.circular(4), - ), - ), - padding: const EdgeInsets.only(left: 8), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - ' ${appointment.subject}', - style: const TextStyle( - fontWeight: FontWeight.w500, - fontSize: 18, - ), - ), - const SizedBox(height: 8), - Row( - children: [ - const Icon( - Icons.access_time_filled, - size: 16, - ), - const SizedBox(width: 4), - Text( - DateFormat('hh:mm a').format(appointment.endTime), - ), - ], - ), - ], - ), - showMoreOptions - ? IconButton( - onPressed: () { - navigationService.pushDialog( - AlertDialog( - title: Text( - 'User Actions', - style: TextStyle( - color: Theme.of(context).primaryColorLight, - ), - ), - actions: [ - TextButton( - child: const Text('Delete'), - onPressed: () { - context.read().deleteTask( - task.id, - task.creator.id!, - ); - navigationService.pop(); - }, - ), - TextButton( - child: const Text('Edit'), - onPressed: () { - navigationService.pop(); - navigationService.pushScreen( - Routes.editTask, - arguments: task, - ); - }, - ), - TextButton( - child: const Text('Cancel'), - onPressed: () => navigationService.pop(), - ), - ], - ), - ); - }, - icon: const Icon(Icons.more_vert), - ) - : Container(), - ], - ), - ); - } -} - -_AppointmentDataSource _getCalendarDataSource(List tasksList) { - final appointments = []; - final colors = [ - Colors.green, - Colors.blue, - Colors.red, - Colors.orange, - Colors.purple, - Colors.pink, - ]; - int index = 0; - tasksList.forEach((task) { - final currentTime = DateTime.now(); - final deadline = - task.deadline ?? currentTime.microsecondsSinceEpoch.toString(); - final endTime = DateTime.fromMicrosecondsSinceEpoch( - int.parse(deadline), - ); - final description = task.description ?? ''; - final creator = - task.creator.firstName ?? userConfig.currentUser.firstName ?? ''; - - appointments.add( - Appointment( - startTime: endTime, - endTime: endTime, - subject: task.title, - notes: '$description\n- $creator (${task.event.title})', - color: colors[index % colors.length], - id: task.id, - ), - ); - index++; - }); - - return _AppointmentDataSource(appointments); -} - -class _AppointmentDataSource extends CalendarDataSource { - _AppointmentDataSource(List source) { - appointments = source; - } -} diff --git a/pubspec.lock b/pubspec.lock index b9d033f6b..24b963d69 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -885,6 +885,30 @@ packages: url: "https://pub.dev" source: hosted version: "6.7.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: cdd14e3836065a1f6302a236ec8b5f700695c803c57ae11a1c84df31e6bcf831 + url: "https://pub.dev" + source: hosted + version: "10.0.3" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "9b2ef90589911d665277464e0482b209d39882dffaaf4ef69a3561a3354b2ebc" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: fd3cd66cb2bcd7b50dcd3b413af49d78051f809c8b3f6e047962765c15a0d23d + url: "https://pub.dev" + source: hosted + version: "3.0.0" lint: dependency: "direct dev" description: @@ -905,26 +929,26 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" mime: dependency: transitive description: @@ -1009,10 +1033,10 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1771,4 +1795,4 @@ packages: version: "3.1.2" sdks: dart: ">=3.2.0 <3.13.0" - flutter: ">=3.16.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/test/helpers/test_helpers.dart b/test/helpers/test_helpers.dart index 083b449fb..83ae0359d 100644 --- a/test/helpers/test_helpers.dart +++ b/test/helpers/test_helpers.dart @@ -30,7 +30,6 @@ import 'package:talawa/services/navigation_service.dart'; import 'package:talawa/services/org_service.dart'; import 'package:talawa/services/post_service.dart'; import 'package:talawa/services/size_config.dart'; -import 'package:talawa/services/task_service.dart'; import 'package:talawa/services/third_party_service/multi_media_pick_service.dart'; import 'package:talawa/services/user_config.dart'; import 'package:talawa/utils/event_queries.dart'; @@ -43,8 +42,6 @@ import 'package:talawa/view_model/after_auth_view_models/event_view_models/event import 'package:talawa/view_model/after_auth_view_models/event_view_models/explore_events_view_model.dart'; import 'package:talawa/view_model/after_auth_view_models/feed_view_models/organization_feed_view_model.dart'; import 'package:talawa/view_model/after_auth_view_models/profile_view_models/profile_page_view_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; import 'package:talawa/view_model/lang_view_model.dart'; import 'package:talawa/view_model/main_screen_view_model.dart'; import 'package:talawa/view_model/pre_auth_view_models/select_organization_view_model.dart'; @@ -54,6 +51,7 @@ import 'package:talawa/view_model/theme_view_model.dart'; import 'package:talawa/view_model/widgets_view_models/custom_drawer_view_model.dart'; import 'package:talawa/view_model/widgets_view_models/like_button_view_model.dart'; import 'package:talawa/view_model/widgets_view_models/progress_dialog_view_model.dart'; + import '../service_tests/image_service_test.dart'; import '../views/main_screen_test.dart'; import 'test_helpers.mocks.dart'; @@ -91,7 +89,6 @@ import 'test_helpers.mocks.dart'; MockSpec(onMissingStub: OnMissingStub.returnDefault), MockSpec(onMissingStub: OnMissingStub.returnDefault), MockSpec(onMissingStub: OnMissingStub.returnDefault), - MockSpec(onMissingStub: OnMissingStub.returnDefault), MockSpec(onMissingStub: OnMissingStub.returnDefault), MockSpec(onMissingStub: OnMissingStub.returnDefault), MockSpec(onMissingStub: OnMissingStub.returnDefault), @@ -449,34 +446,6 @@ ImagePicker getAndRegisterImagePicker() { return service; } -TaskService getAndRegisterTaskService() { - _removeRegistrationIfExists(); - final service = MockTaskService(); - - when(service.tasks).thenReturn([]); - - when( - service.createTask( - title: anyNamed('title'), - description: anyNamed('description'), - deadline: anyNamed('deadline'), - eventId: anyNamed('eventId'), - ), - ).thenAnswer((realInvocation) async => true); - - when( - service.editTask( - title: anyNamed('title'), - description: anyNamed('description'), - deadline: anyNamed('deadline'), - taskId: anyNamed('taskId'), - ), - ).thenAnswer((realInvocation) async => true); - - locator.registerSingleton(service); - return service; -} - EventService getAndRegisterEventService() { _removeRegistrationIfExists(); final service = MockEventService(); @@ -698,7 +667,6 @@ void registerServices() { getAndRegisterUserConfig(); getAndRegisterPostService(); getAndRegisterEventService(); - getAndRegisterTaskService(); getAndRegisterMultiMediaPickerService(); getAndRegisterConnectivityService(); getAndRegisterDatabaseMutationFunctions(); @@ -739,8 +707,6 @@ void registerViewModels() { locator.registerFactory(() => EventInfoViewModel()); locator.registerFactory(() => ProgressDialogViewModel()); locator.registerFactory(() => SelectOrganizationViewModel()); - locator.registerFactory(() => CreateTaskViewModel()); - locator.registerFactory(() => ExploreTasksViewModel()); locator.registerFactory(() => CustomDrawerViewModel()); locator.registerFactory(() => SelectContactViewModel()); } @@ -759,8 +725,6 @@ void unregisterViewModels() { locator.unregister(); locator.unregister(); locator.unregister(); - locator.unregister(); - locator.unregister(); locator.unregister(); locator.unregister(); } diff --git a/test/helpers/test_helpers.mocks.dart b/test/helpers/test_helpers.mocks.dart index 962ee4a93..3d9a6df6f 100644 --- a/test/helpers/test_helpers.mocks.dart +++ b/test/helpers/test_helpers.mocks.dart @@ -28,7 +28,6 @@ import 'package:talawa/models/chats/chat_message.dart' as _i25; import 'package:talawa/models/events/event_model.dart' as _i22; import 'package:talawa/models/organization/org_info.dart' as _i6; import 'package:talawa/models/post/post_model.dart' as _i15; -import 'package:talawa/models/task/task_model.dart' as _i40; import 'package:talawa/models/user/user_info.dart' as _i7; import 'package:talawa/services/chat_service.dart' as _i23; import 'package:talawa/services/comment_service.dart' as _i37; @@ -38,7 +37,6 @@ import 'package:talawa/services/graphql_config.dart' as _i18; import 'package:talawa/services/navigation_service.dart' as _i8; import 'package:talawa/services/org_service.dart' as _i31; import 'package:talawa/services/post_service.dart' as _i19; -import 'package:talawa/services/task_service.dart' as _i39; import 'package:talawa/services/third_party_service/multi_media_pick_service.dart' as _i20; import 'package:talawa/services/user_config.dart' as _i26; @@ -3210,115 +3208,7 @@ class MockAppTheme extends _i2.Mock implements _i38.AppTheme { ); } -/// A class which mocks [TaskService]. -/// -/// See the documentation for Mockito's code generation for more information. -class MockTaskService extends _i2.Mock implements _i39.TaskService { - @override - _i10.VoidCallback get callbackNotifyListeners => (super.noSuchMethod( - Invocation.getter(#callbackNotifyListeners), - returnValue: () {}, - returnValueForMissingStub: () {}, - ) as _i10.VoidCallback); - @override - set callbackNotifyListeners(_i10.VoidCallback? _callbackNotifyListeners) => - super.noSuchMethod( - Invocation.setter( - #callbackNotifyListeners, - _callbackNotifyListeners, - ), - returnValueForMissingStub: null, - ); - - @override - List<_i40.Task> get tasks => (super.noSuchMethod( - Invocation.getter(#tasks), - returnValue: <_i40.Task>[], - returnValueForMissingStub: <_i40.Task>[], - ) as List<_i40.Task>); - - @override - _i5.Future getTasksForEvent(String? eventId) => (super.noSuchMethod( - Invocation.method( - #getTasksForEvent, - [eventId], - ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); - - @override - _i5.Future getTasksByUser() => (super.noSuchMethod( - Invocation.method( - #getTasksByUser, - [], - ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); - - @override - _i5.Future editTask({ - required String? title, - required String? description, - required String? deadline, - required String? taskId, - }) => - (super.noSuchMethod( - Invocation.method( - #editTask, - [], - { - #title: title, - #description: description, - #deadline: deadline, - #taskId: taskId, - }, - ), - returnValue: _i5.Future.value(false), - returnValueForMissingStub: _i5.Future.value(false), - ) as _i5.Future); - - @override - _i5.Future createTask({ - required String? title, - required String? description, - required String? deadline, - required String? eventId, - }) => - (super.noSuchMethod( - Invocation.method( - #createTask, - [], - { - #title: title, - #description: description, - #deadline: deadline, - #eventId: eventId, - }, - ), - returnValue: _i5.Future.value(false), - returnValueForMissingStub: _i5.Future.value(false), - ) as _i5.Future); - - @override - _i5.Future deleteTask( - String? taskId, - String? creatorId, - ) => - (super.noSuchMethod( - Invocation.method( - #deleteTask, - [ - taskId, - creatorId, - ], - ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); -} /// A class which mocks [CreateEventViewModel]. /// diff --git a/test/helpers/test_locator.dart b/test/helpers/test_locator.dart index 481f5a465..698696d44 100644 --- a/test/helpers/test_locator.dart +++ b/test/helpers/test_locator.dart @@ -29,8 +29,6 @@ import 'package:talawa/view_model/after_auth_view_models/feed_view_models/organi import 'package:talawa/view_model/after_auth_view_models/profile_view_models/edit_profile_view_model.dart'; import 'package:talawa/view_model/after_auth_view_models/profile_view_models/profile_page_view_model.dart'; import 'package:talawa/view_model/after_auth_view_models/settings_view_models/app_setting_view_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; import 'package:talawa/view_model/lang_view_model.dart'; import 'package:talawa/view_model/main_screen_view_model.dart'; import 'package:talawa/view_model/pre_auth_view_models/login_view_model.dart'; @@ -108,11 +106,9 @@ void testSetupLocator() { locator.registerFactory(() => ProfilePageViewModel()); locator.registerFactory(() => EditProfilePageViewModel()); locator.registerFactory(() => CreateEventViewModel()); - locator.registerFactory(() => CreateTaskViewModel()); locator.registerFactory(() => EditEventViewModel()); locator.registerFactory(() => AddPostViewModel()); locator.registerFactory(() => EventInfoViewModel()); - locator.registerFactory(() => ExploreTasksViewModel()); locator.registerFactory(() => AppSettingViewModel()); //Widgets viewModels diff --git a/test/model_tests/task_model_test.dart b/test/model_tests/task_model_test.dart deleted file mode 100644 index f7e6a4649..000000000 --- a/test/model_tests/task_model_test.dart +++ /dev/null @@ -1,51 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter_test/flutter_test.dart'; -import 'package:talawa/models/events/event_model.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/models/user/user_info.dart'; - -void main() { - group('Test Task model', () { - test('Test task json', () { - final task = Task( - id: '123', - title: 'Test task', - creator: User( - id: '123', - firstName: 'John', - lastName: 'Doe', - email: 'test@test.com', - ), - createdAt: '123456', - event: Event( - id: '123', - ), - ); - final taskJson = { - '_id': '123', - 'title': 'Test task', - 'creator': { - '_id': '123', - 'firstName': 'John', - 'lastName': 'Doe', - 'email': 'test@test.com', - }, - 'createdAt': '123456', - 'event': { - '_id': '123', - }, - }; - final taskFromJson = Task.fromJson(taskJson); - expect(task.id, taskFromJson.id); - expect(task.title, taskFromJson.title); - expect(task.creator.id, taskFromJson.creator.id); - expect(task.creator.firstName, taskFromJson.creator.firstName); - expect(task.creator.lastName, taskFromJson.creator.lastName); - expect(task.creator.email, taskFromJson.creator.email); - expect(task.createdAt, taskFromJson.createdAt); - expect(task.event.id, taskFromJson.event.id); - }); - }); -} diff --git a/test/router_test.dart b/test/router_test.dart index 71c626086..4963c3e7a 100644 --- a/test/router_test.dart +++ b/test/router_test.dart @@ -30,9 +30,6 @@ import 'package:talawa/views/after_auth_screens/join_org_after_auth/access_reque import 'package:talawa/views/after_auth_screens/join_org_after_auth/join_organisation_after_auth.dart'; import 'package:talawa/views/after_auth_screens/profile/edit_profile_page.dart'; import 'package:talawa/views/after_auth_screens/profile/profile_page.dart'; -import 'package:talawa/views/after_auth_screens/tasks/create_task_page.dart'; -import 'package:talawa/views/after_auth_screens/tasks/event_tasks_page.dart'; -import 'package:talawa/views/after_auth_screens/tasks/user_tasks_page.dart'; import 'package:talawa/views/demo_screens/explore_events_demo.dart'; import 'package:talawa/views/demo_screens/organization_feed_demo.dart'; import 'package:talawa/views/demo_screens/profile_page_demo.dart'; @@ -294,43 +291,7 @@ void main() { } }); - testWidgets('Test for eventTasks route', (WidgetTester tester) async { - const String eventId = '123'; - final route = generateRoute( - const RouteSettings(name: Routes.eventTasks, arguments: eventId), - ); - expect(route, isA()); - if (route is MaterialPageRoute) { - final builder = route.builder; - final widget = builder(MockBuildContext()); - expect(widget, isA()); - } - }); - testWidgets('Test for userTasks route', (WidgetTester tester) async { - final route = generateRoute( - const RouteSettings(name: Routes.userTasks), - ); - expect(route, isA()); - if (route is MaterialPageRoute) { - final builder = route.builder; - final widget = builder(MockBuildContext()); - expect(widget, isA()); - } - }); - - testWidgets('Test for addTask route', (WidgetTester tester) async { - const String eventId = '123'; - final route = generateRoute( - const RouteSettings(name: Routes.addTask, arguments: eventId), - ); - expect(route, isA()); - if (route is MaterialPageRoute) { - final builder = route.builder; - final widget = builder(MockBuildContext()); - expect(widget, isA()); - } - }); testWidgets('Test for selectContact route', (WidgetTester tester) async { final route = diff --git a/test/service_tests/event_service_test.dart b/test/service_tests/event_service_test.dart index aa8dace48..5666f50bb 100644 --- a/test/service_tests/event_service_test.dart +++ b/test/service_tests/event_service_test.dart @@ -8,7 +8,6 @@ import 'package:talawa/models/organization/org_info.dart'; import 'package:talawa/services/database_mutation_functions.dart'; import 'package:talawa/services/event_service.dart'; import 'package:talawa/utils/event_queries.dart'; -import 'package:talawa/utils/task_queries.dart'; import '../helpers/test_helpers.dart'; import '../helpers/test_locator.dart'; @@ -22,7 +21,7 @@ void main() { group('Test EventService', () { test('Test editEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = TaskQueries.eventTasks('eventId'); + final query = ''; final Map variables = {}; when( dataBaseMutationFunctions.gqlAuthMutation( @@ -56,7 +55,7 @@ void main() { test('Test deleteEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = TaskQueries.eventTasks('eventId'); + final query = ''; when( dataBaseMutationFunctions.gqlAuthMutation( EventQueries().deleteEvent('eventId'), @@ -80,7 +79,7 @@ void main() { test('Test registerForAnEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = TaskQueries.eventTasks('eventId'); + final query = ''; when( dataBaseMutationFunctions.gqlAuthMutation( EventQueries().registerForEvent(), @@ -103,7 +102,7 @@ void main() { test('Test fetchRegistrantsByEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = TaskQueries.eventTasks('eventId'); + final query = ''; when( dataBaseMutationFunctions.gqlAuthQuery( EventQueries().registrantsByEvent('eventId'), @@ -123,7 +122,7 @@ void main() { test('Test getEvents method', () async { final dataBaseMutationFunctions = locator(); - final query = TaskQueries.eventTasks('eventId'); + final query = ''; userConfig.currentOrg = OrgInfo(name: 'org', id: 'id'); when( dataBaseMutationFunctions.gqlAuthMutation( diff --git a/test/service_tests/task_service_test.dart b/test/service_tests/task_service_test.dart deleted file mode 100644 index 3acb95200..000000000 --- a/test/service_tests/task_service_test.dart +++ /dev/null @@ -1,237 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter_test/flutter_test.dart'; -import 'package:graphql_flutter/graphql_flutter.dart'; -import 'package:mockito/mockito.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/models/events/event_model.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/models/user/user_info.dart'; -import 'package:talawa/services/database_mutation_functions.dart'; -import 'package:talawa/services/task_service.dart'; -import 'package:talawa/utils/task_queries.dart'; - -import '../helpers/test_helpers.dart'; - -void main() { - setUp(() { - registerServices(); - }); - group('Test TaskService', () { - test('Test getTasksForEvent method', () async { - final dataBaseMutationFunctions = locator(); - final query = TaskQueries.eventTasks('eventId'); - when(dataBaseMutationFunctions.gqlNonAuthQuery(query)).thenAnswer( - (_) async => QueryResult( - options: QueryOptions(document: gql(query)), - data: { - 'tasksByEvent': [ - { - '_id': '123', - 'title': 'Test task', - 'creator': { - '_id': '123', - 'firstName': 'John', - 'lastName': 'Doe', - 'email': 'test@test.com', - }, - 'createdAt': '123456', - 'event': { - '_id': '123', - }, - } - ], - }, - source: QueryResultSource.network, - ), - ); - - final service = TaskService(); - await service.getTasksForEvent('eventId'); - - expect(service.tasks.length, 1); - }); - test('Test getTasksByUser method', () async { - final dataBaseMutationFunctions = locator(); - final query = TaskQueries.userTasks('xzy1'); - when(dataBaseMutationFunctions.gqlNonAuthQuery(query)).thenAnswer( - (_) async => QueryResult( - options: QueryOptions(document: gql(query)), - data: { - 'tasksByUser': [ - { - '_id': '123', - 'title': 'Test task', - 'creator': { - '_id': '123', - 'firstName': 'John', - 'lastName': 'Doe', - 'email': 'test@test.com', - }, - 'createdAt': '123456', - 'event': { - '_id': '123', - }, - } - ], - }, - source: QueryResultSource.network, - ), - ); - - final service = TaskService(); - await service.getTasksByUser(); - - expect(service.tasks.length, 1); - }); - test('Test createTask method', () async { - final dataBaseMutationFunctions = locator(); - final query = TaskQueries.addTask( - title: 'Test task', - description: 'Test description', - deadline: '123456', - eventId: 'eventId', - ); - when(dataBaseMutationFunctions.gqlAuthMutation(query)).thenAnswer( - (_) async => QueryResult( - options: QueryOptions(document: gql(query)), - data: { - 'createTask': { - '_id': '123', - 'title': 'Test task', - 'creator': { - '_id': '123', - 'firstName': 'John', - 'lastName': 'Doe', - 'email': 'test@test.com', - }, - 'createdAt': '123456', - 'event': { - '_id': '123', - }, - }, - }, - source: QueryResultSource.network, - ), - ); - - final service = TaskService(); - int index = 0; - service.callbackNotifyListeners = () => index++; - await service.createTask( - title: 'Test task', - description: 'Test description', - deadline: '123456', - eventId: 'eventId', - ); - - expect(service.tasks.length, 1); - expect(index, 1); - }); - test('Test deleteTask method', () async { - final dataBaseMutationFunctions = locator(); - final query = TaskQueries.deleteTask('taskId'); - when(dataBaseMutationFunctions.gqlAuthMutation(query)).thenAnswer( - (_) async => QueryResult( - options: QueryOptions(document: gql(query)), - source: QueryResultSource.network, - ), - ); - - final service = TaskService(); - service.tasks.add( - Task( - id: 'taskId', - title: 'Test task', - description: 'Test description', - deadline: '123456', - createdAt: '123456', - event: Event(), - creator: User(), - ), - ); - await service.deleteTask('taskId', 'xzy1'); - - expect(service.tasks.length, 0); - }); - test('Test deleteTask method', () async { - final dataBaseMutationFunctions = locator(); - final query = TaskQueries.deleteTask('taskId'); - when(dataBaseMutationFunctions.gqlAuthMutation(query)).thenAnswer( - (_) async => QueryResult( - options: QueryOptions(document: gql(query)), - source: QueryResultSource.network, - ), - ); - - final service = TaskService(); - service.tasks.add( - Task( - id: 'taskId', - title: 'Test task', - description: 'Test description', - deadline: '123456', - createdAt: '123456', - event: Event(), - creator: User(), - ), - ); - await service.deleteTask('taskId', 'xzy1'); - - expect(service.tasks.length, 0); - }); - test('Test deleteTask method', () async { - final dataBaseMutationFunctions = locator(); - final query = TaskQueries.editTask( - title: 'new', - description: 'Test description', - deadline: '123456', - taskId: 'taskId', - ); - when(dataBaseMutationFunctions.gqlAuthMutation(query)).thenAnswer( - (_) async => QueryResult( - options: QueryOptions(document: gql(query)), - data: { - 'updateTask': { - '_id': 'taskId', - 'title': 'new', - 'creator': { - '_id': '123', - }, - 'createdAt': '123456', - 'description': 'Test description', - 'deadline': '123456', - 'event': { - '_id': '123', - }, - }, - }, - source: QueryResultSource.network, - ), - ); - - final service = TaskService(); - service.callbackNotifyListeners = () {}; - service.tasks.add( - Task( - id: 'taskId', - title: 'Test task', - creator: User(id: '123'), - createdAt: '123456', - description: 'Test description', - deadline: '123456', - event: Event(id: '123'), - ), - ); - await service.editTask( - title: 'new', - description: 'Test description', - deadline: '123456', - taskId: 'taskId', - ); - - expect(service.tasks[0].title, 'new'); - }); - }); -} diff --git a/test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/create_task_view_model_test.dart b/test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/create_task_view_model_test.dart deleted file mode 100644 index ad20a59bf..000000000 --- a/test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/create_task_view_model_test.dart +++ /dev/null @@ -1,71 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/models/events/event_model.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/models/user/user_info.dart'; -import 'package:talawa/services/task_service.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; - -import '../../../helpers/test_helpers.dart'; -import '../../../helpers/test_helpers.mocks.dart'; - -void main() { - setUp(() { - registerServices(); - }); - group('Test Create Task View Model', () { - test('Test createTask method', () async { - final model = CreateTaskViewModel(); - await model.createTask('eventId'); - - verify( - (locator() as MockTaskService).createTask( - title: anyNamed('title'), - description: anyNamed('description'), - deadline: anyNamed('deadline'), - eventId: anyNamed('eventId'), - ), - ); - }); - test('Test editTask method', () async { - final model = CreateTaskViewModel(); - await model.editTask('eventId'); - - verify( - (locator() as MockTaskService).editTask( - title: anyNamed('title'), - description: anyNamed('description'), - deadline: anyNamed('deadline'), - taskId: anyNamed('taskId'), - ), - ); - }); - test('Test fillTask method', () async { - final model = CreateTaskViewModel(); - model.fillTask( - Task( - title: 'title', - id: 'id', - event: Event(), - creator: User(), - createdAt: '123456', - deadline: '123458', - ), - ); - - expect(model.taskTitleTextController.text, 'title'); - }); - test('Test dispose method', () async { - final model = CreateTaskViewModel(); - model.dispose(); - expect( - () => model.taskTitleTextController.text = 'test', - throwsFlutterError, - ); - }); - }); -} diff --git a/test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/explore_tasks_view_model_test.dart b/test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/explore_tasks_view_model_test.dart deleted file mode 100644 index cd93c128a..000000000 --- a/test/view_model_tests/after_auth_view_model_tests/task_view_model_tests.dart/explore_tasks_view_model_test.dart +++ /dev/null @@ -1,47 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/services/task_service.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; - -import '../../../helpers/test_helpers.dart'; -import '../../../helpers/test_helpers.mocks.dart'; - -void main() { - setUp(() { - registerServices(); - }); - group('Test Create Task View Model', () { - test('Test fetchTasks method', () async { - final model = ExploreTasksViewModel(); - await model.fetchTasks('eventId'); - verify( - (locator() as MockTaskService).getTasksForEvent('eventId'), - ); - }); - test('Test fetchTasksByUser method', () async { - final model = ExploreTasksViewModel(); - await model.fetchTasksByUser(); - - verify( - (locator() as MockTaskService).getTasksByUser(), - ); - }); - test('Test deleteTask method', () async { - final model = ExploreTasksViewModel(); - model.deleteTask('taskId', 'creatorId'); - - verify( - (locator() as MockTaskService) - .deleteTask('taskId', 'creatorId'), - ); - }); - test('Test model tasks', () async { - final model = ExploreTasksViewModel(); - expect(model.tasks, []); - }); - }); -} diff --git a/test/views/after_auth_screens/tasks/user_tasks_page_test.dart b/test/views/after_auth_screens/tasks/user_tasks_page_test.dart deleted file mode 100644 index 654e91d5f..000000000 --- a/test/views/after_auth_screens/tasks/user_tasks_page_test.dart +++ /dev/null @@ -1,94 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:talawa/services/graphql_config.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/services/task_service.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/view_model/lang_view_model.dart'; -import 'package:talawa/views/after_auth_screens/tasks/user_tasks_page.dart'; -import 'package:talawa/views/base_view.dart'; -import 'package:talawa/widgets/task_schedule.dart'; - -import '../../../helpers/test_helpers.dart'; -import '../../../helpers/test_locator.dart'; - -Widget createUserTasksPage() { - return BaseView( - onModelReady: (model) => model.initialize(), - builder: (context, langModel, child) { - return const MaterialApp( - locale: Locale('en'), - localizationsDelegates: [ - AppLocalizationsDelegate(isTest: true), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - home: UserTasksPage(), - ); - }, - ); -} - -void main() { - testSetupLocator(); - locator().test(); - TestWidgetsFlutterBinding.ensureInitialized(); - - setUp(() { - registerServices(); - locator().test(); - }); - - tearDown(() { - unregisterServices(); - }); - - group("Test for UserTasksPage", () { - testWidgets("Check if UserTasksPage shows up", (tester) async { - await tester.pumpWidget(createUserTasksPage()); - await tester.pumpAndSettle(); - - expect(find.byType(UserTasksPage), findsOneWidget); - }); - - testWidgets("Check if all children show up correctly", (tester) async { - await tester.pumpWidget(createUserTasksPage()); - await tester.pumpAndSettle(); - - expect(find.byType(RefreshIndicator), findsOneWidget); - expect(find.byType(Scaffold), findsOneWidget); - expect(find.byType(TaskSchedule), findsOneWidget); - expect( - find.byWidgetPredicate( - (widget) => widget is Scaffold && widget.appBar is AppBar, - ), - findsOneWidget, - ); - expect(find.text("User Tasks"), findsOneWidget); - }); - - testWidgets("Check if refreshing works", (tester) async { - await tester.pumpWidget(createUserTasksPage()); - await tester.pumpAndSettle(); - - bool isRefreshed = false; - - when(locator().getTasksByUser()).thenAnswer((_) async { - isRefreshed = true; - }); - - await tester.drag( - find.byType(RefreshIndicator), - const Offset(0, 200), - ); - await tester.pumpAndSettle(); - - expect(isRefreshed, true); - }); - }); -} diff --git a/test/widget_tests/after_auth_screens/tasks/create_task_page_test.dart b/test/widget_tests/after_auth_screens/tasks/create_task_page_test.dart deleted file mode 100644 index a7b741eec..000000000 --- a/test/widget_tests/after_auth_screens/tasks/create_task_page_test.dart +++ /dev/null @@ -1,33 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/views/after_auth_screens/tasks/create_task_page.dart'; -import 'package:talawa/widgets/task_form.dart'; - -import '../../../helpers/test_helpers.dart'; - -Widget createTaskPage() => const MaterialApp( - localizationsDelegates: [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - ], - home: CreateTaskPage(eventId: '1'), - ); - -void main() { - setUp(() { - SizeConfig().test(); - registerServices(); - registerViewModels(); - }); - testWidgets('CreateTaskPage UI Test', (tester) async { - await tester.pumpWidget(createTaskPage()); - await tester.pump(); - expect(find.byType(TaskForm), findsOneWidget); - }); -} diff --git a/test/widget_tests/after_auth_screens/tasks/edit_task_page_test.dart b/test/widget_tests/after_auth_screens/tasks/edit_task_page_test.dart deleted file mode 100644 index 768b13c23..000000000 --- a/test/widget_tests/after_auth_screens/tasks/edit_task_page_test.dart +++ /dev/null @@ -1,67 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:talawa/constants/custom_theme.dart'; -import 'package:talawa/models/events/event_model.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/models/user/user_info.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/views/after_auth_screens/tasks/edit_task_page.dart'; -import 'package:talawa/widgets/task_form.dart'; - -import '../../../helpers/test_helpers.dart'; - -Widget createEditTaskPage() => MaterialApp( - locale: const Locale('en'), - localizationsDelegates: [ - const AppLocalizationsDelegate(isTest: true), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - themeMode: ThemeMode.light, - theme: TalawaTheme.lightTheme, - home: EditTaskPage( - task: Task( - id: '1', - title: 'title', - description: 'description', - event: Event(), - creator: User(), - createdAt: '123456', - ), - ), - ); - -void main() { - setUpAll(() { - SizeConfig().test(); - registerServices(); - registerViewModels(); - }); - - group("Functionality tests", () { - testWidgets('Check onSave functionality for TaskForm', (tester) async { - await tester.pumpWidget(createEditTaskPage()); - await tester.pump(); - await tester.tap(find.byType(TextButton)); - expect(find.byType(TaskForm), findsOneWidget); - }); - }); - - group("UI Tests", () { - testWidgets('EditTaskPage UI Test', (tester) async { - await tester.pumpWidget(createEditTaskPage()); - await tester.pump(); - expect(find.byType(TaskForm), findsOneWidget); - }); - }); - - tearDownAll(() { - unregisterServices(); - unregisterViewModels(); - }); -} diff --git a/test/widget_tests/after_auth_screens/tasks/event_tasks_page_test.dart b/test/widget_tests/after_auth_screens/tasks/event_tasks_page_test.dart deleted file mode 100644 index ddfaeaffd..000000000 --- a/test/widget_tests/after_auth_screens/tasks/event_tasks_page_test.dart +++ /dev/null @@ -1,40 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:talawa/constants/routing_constants.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/views/after_auth_screens/tasks/event_tasks_page.dart'; -import 'package:talawa/widgets/task_schedule.dart'; - -import '../../../helpers/test_helpers.dart'; - -Widget createEventTasksPage() => const MaterialApp( - localizationsDelegates: [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - ], - home: EventTasksPage(eventId: '1'), - ); - -void main() { - setUp(() { - SizeConfig().test(); - registerServices(); - registerViewModels(); - }); - testWidgets('EventTasksPage UI Test', (tester) async { - await tester.pumpWidget(createEventTasksPage()); - await tester.pump(); - expect(find.byType(TaskSchedule), findsOneWidget); - - await tester.tap(find.byType(FloatingActionButton)); - await tester.pump(); - verify(navigationService.pushScreen(Routes.addTask, arguments: '1')); - }); -} diff --git a/test/widget_tests/after_auth_screens/tasks/user_tasks_page_test.dart b/test/widget_tests/after_auth_screens/tasks/user_tasks_page_test.dart deleted file mode 100644 index 11b87aeeb..000000000 --- a/test/widget_tests/after_auth_screens/tasks/user_tasks_page_test.dart +++ /dev/null @@ -1,33 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/views/after_auth_screens/tasks/user_tasks_page.dart'; -import 'package:talawa/widgets/task_schedule.dart'; - -import '../../../helpers/test_helpers.dart'; - -Widget createUserTasksPage() => const MaterialApp( - localizationsDelegates: [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - ], - home: UserTasksPage(), - ); - -void main() { - setUp(() { - SizeConfig().test(); - registerServices(); - registerViewModels(); - }); - testWidgets('UserTasksPage UI Test', (tester) async { - await tester.pumpWidget(createUserTasksPage()); - await tester.pump(); - expect(find.byType(TaskSchedule), findsOneWidget); - }); -} diff --git a/test/widget_tests/pre_auth_screens/select_language_page_test.dart b/test/widget_tests/pre_auth_screens/select_language_page_test.dart index cafd870c4..ab28d9878 100644 --- a/test/widget_tests/pre_auth_screens/select_language_page_test.dart +++ b/test/widget_tests/pre_auth_screens/select_language_page_test.dart @@ -293,8 +293,5 @@ Future main() async { expect(findAppNameWidget, findsNothing); }); }); - File('test/fixtures/core/currentorg.hive').delete(); - File('test/fixtures/core/currentorg.lock').delete(); - File('test/fixtures/core/currentuser.hive').delete(); - File('test/fixtures/core/currentuser.lock').delete(); + } diff --git a/test/widget_tests/widgets/task_form_test.dart b/test/widget_tests/widgets/task_form_test.dart deleted file mode 100644 index be6baa483..000000000 --- a/test/widget_tests/widgets/task_form_test.dart +++ /dev/null @@ -1,147 +0,0 @@ -// ignore_for_file: talawa_api_doc - -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:mockito/mockito.dart'; -import 'package:talawa/router.dart' as router; -import 'package:talawa/services/navigation_service.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/create_task_view_model.dart'; -import 'package:talawa/views/base_view.dart'; -import 'package:talawa/widgets/event_date_time_tile.dart'; -import 'package:talawa/widgets/task_form.dart'; - -import '../../helpers/test_helpers.dart'; -import '../../helpers/test_locator.dart'; - -/// OnSaveCallback class provides a simple call function to test callbacks. -/// -/// Services include: -/// * `call` : mock function to test callback -class OnSaveCallback { - void call() {} -} - -/// MockOnSaveCallback class is the mocked version of OnSaveCallback. -/// -/// Services include: -class MockOnSaveCallback extends Mock implements OnSaveCallback {} - -/// The object created for MockOnSaveCallback. -MockOnSaveCallback mockOnSaveCallback = MockOnSaveCallback(); - -/// This function is used to return TaskFormWidget for testing. -/// -/// **params**: -/// None -/// -/// **returns**: -/// * `Widget`: TaskForm Widget for testing. - -Widget createTaskFormWidget() { - return BaseView( - onModelReady: (model) {}, - builder: (context, model, child) { - return MaterialApp( - key: const Key('Root'), - navigatorKey: locator().navigatorKey, - navigatorObservers: [], - locale: const Locale('en'), - supportedLocales: [ - const Locale('en', 'US'), - ], - localizationsDelegates: [ - const AppLocalizationsDelegate(isTest: true), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - home: Scaffold( - body: TaskForm( - onSave: () async { - mockOnSaveCallback.call(); - return true; - }, - title: "TITLE", - actionText: "ACTION", - ), - ), - onGenerateRoute: router.generateRoute, - ); - }, - ); -} - -void callback() {} - -void main() { - testSetupLocator(); - setUp(() { - registerServices(); - locator().test(); - }); - - tearDown(() { - unregisterServices(); - }); - - group('Test datetime callbacks', () { - testWidgets( - "Check DateTimeTile setTime and setDate callback", - (tester) async { - await tester.pumpWidget(createTaskFormWidget()); - await tester.pumpAndSettle(); - final dateTimeTile = find.byType(DateTimeTile); - final datePicker = find.byKey(const Key("EventDateTimeTileDate")); - final timePicker = find.byKey(const Key("EventDateTimeTileTime")); - - expect(dateTimeTile, findsOneWidget); - expect(datePicker, findsOneWidget); - expect(timePicker, findsOneWidget); - - await tester.tap(timePicker); - await tester.pumpAndSettle(); - expect(find.text("OK"), findsOneWidget); - await tester.tap(find.text('OK')); - await tester.pumpAndSettle(); - - await tester.tap(timePicker); - await tester.pumpAndSettle(); - expect(find.text("OK"), findsOneWidget); - await tester.tap(find.text('OK')); - await tester.pumpAndSettle(); - }, - ); - }); - - group("Widget Tests for TaskForm", () { - testWidgets("Check if TaskForm shows up", (tester) async { - await tester.pumpWidget(createTaskFormWidget()); - await tester.pumpAndSettle(); - - expect(find.byType(TaskForm), findsOneWidget); - }); - - testWidgets("Check if all children show up correctly", (tester) async { - await tester.pumpWidget(createTaskFormWidget()); - await tester.pumpAndSettle(); - - expect(find.byType(Scaffold), findsWidgets); - expect(find.byType(AppBar), findsOneWidget); - expect(find.byType(Scrollbar), findsOneWidget); - expect(find.byType(TitleField), findsOneWidget); - expect(find.byType(DescriptionField), findsOneWidget); - }); - - testWidgets("Check if all update button work", (tester) async { - await tester.pumpWidget(createTaskFormWidget()); - await tester.pumpAndSettle(); - await tester.enterText(find.byType(TitleField), "title"); - await tester.enterText(find.byType(DescriptionField), "description"); - await tester.tap(find.byType(TextButton)); - - verify(mockOnSaveCallback.call()); - }); - }); -} diff --git a/test/widget_tests/widgets/task_schedule_test.dart b/test/widget_tests/widgets/task_schedule_test.dart deleted file mode 100644 index e70409f30..000000000 --- a/test/widget_tests/widgets/task_schedule_test.dart +++ /dev/null @@ -1,359 +0,0 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - -import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; -import 'package:flutter_test/flutter_test.dart'; -import 'package:intl/intl.dart'; -import 'package:mockito/mockito.dart'; -import 'package:provider/provider.dart'; -import 'package:syncfusion_flutter_calendar/calendar.dart'; -import 'package:talawa/models/events/event_model.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/models/user/user_info.dart'; -import 'package:talawa/router.dart' as router; -import 'package:talawa/services/navigation_service.dart'; -import 'package:talawa/services/size_config.dart'; -import 'package:talawa/utils/app_localization.dart'; -import 'package:talawa/view_model/after_auth_view_models/task_view_models/explore_tasks_view_model.dart'; -import 'package:talawa/view_model/lang_view_model.dart'; -import 'package:talawa/views/base_view.dart'; -import 'package:talawa/widgets/task_schedule.dart'; - -import '../../helpers/test_helpers.dart'; -import '../../helpers/test_helpers.mocks.dart'; -import '../../helpers/test_locator.dart'; - -final mockNavigationService = MockNavigationService(); - -final task1 = Task( - id: '123', - title: 'Test task', - creator: User( - id: '123', - firstName: 'Ayush', - lastName: 'Chaudhary', - email: 'test@test.com', - ), - createdAt: '123456', - event: Event( - id: '123', - ), - // description: 'test description', - // deadline: 'test deadline' -); -final task2 = Task( - id: '123', - title: 'Test task', - creator: User( - id: '123', - firstName: 'Ansh', - lastName: 'Chaudhary', - email: 'test@test.com', - ), - createdAt: '123456', - event: Event( - id: '123', - ), - // description: 'test description', - // deadline: 'test deadline', -); - -Widget createTaskScheduleWidget({ - bool reverse = false, - String? dialogTitle, - bool showMoreOptions = false, -}) { - return MaterialApp( - key: const Key('Root'), - navigatorKey: locator().navigatorKey, - navigatorObservers: [], - locale: const Locale('en'), - supportedLocales: [ - const Locale('en', 'US'), - const Locale('es', 'ES'), - const Locale('fr', 'FR'), - const Locale('hi', 'IN'), - const Locale('zh', 'CN'), - const Locale('de', 'DE'), - const Locale('ja', 'JP'), - const Locale('pt', 'PT'), - ], - localizationsDelegates: [ - const AppLocalizationsDelegate(isTest: true), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - home: Scaffold( - body: TaskSchedule( - tasks: [task1, task2], - ), - ), - onGenerateRoute: router.generateRoute, - ); -} - -// -Widget createTaskCardWidget({ - bool reverse = false, - String? dialogTitle, - bool showMoreOptions = false, -}) { - return MultiProvider( - providers: [ - ChangeNotifierProvider( - create: (_) => ExploreTasksViewModel(), - ), - ], - child: MaterialApp( - navigatorKey: locator().navigatorKey, - navigatorObservers: [], - locale: const Locale('en'), - supportedLocales: [ - const Locale('en', 'US'), - const Locale('es', 'ES'), - const Locale('fr', 'FR'), - const Locale('hi', 'IN'), - const Locale('zh', 'CN'), - const Locale('de', 'DE'), - const Locale('ja', 'JP'), - const Locale('pt', 'PT'), - ], - localizationsDelegates: [ - const AppLocalizationsDelegate(isTest: true), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - onGenerateRoute: router.generateRoute, - home: Scaffold( - body: TaskCard( - appointment: appointment, - showMoreOptions: true, - task: task1, - ), - ), - ), - ); -} - -Widget createJoinOrgAfterAuth({String orgId = "fake_id"}) { - return BaseView( - onModelReady: (model) => model.initialize(), - builder: (context, langModel, child) { - return MaterialApp( - locale: const Locale('en'), - localizationsDelegates: const [ - AppLocalizationsDelegate(isTest: true), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - ], - home: TaskCard( - appointment: appointment, - showMoreOptions: true, - task: task1, - ), - ); - }, - ); -} - -final Appointment appointment = Appointment( - startTime: DateTime.now(), - endTime: DateTime.now().add(const Duration(seconds: 5)), -); - -void main() { - testSetupLocator(); - getAndRegisterTaskService(); - TestWidgetsFlutterBinding.ensureInitialized(); - - locator().test(); - - testWidgets('Check if the Task Schedule up', (tester) async { - await tester.pumpWidget(createTaskScheduleWidget()); - await tester.pump(); - - expect(find.byType(TaskSchedule), findsOneWidget); - }); - testWidgets('Check if the onTap works', (tester) async { - await tester.pumpWidget(createTaskScheduleWidget()); - await tester.pump(); - - final finder = find.byType(SfCalendar); - await tester.tap(finder); - await tester.pump(); - expect(find.byType(TaskSchedule), findsOneWidget); - }); - testWidgets('Check if the Task Card is returned', (tester) async { - await tester.pumpWidget(createTaskScheduleWidget()); - await tester.pump(); - - final finder = find.byType(SfCalendar); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(TaskCard), findsNWidgets(2)); - }); - testWidgets( - 'Check if the Task Card is pressable and onTap function is called', - (tester) async { - await tester.pumpWidget(createTaskScheduleWidget()); - await tester.pump(); - - final finder = find.byType(SfCalendar); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(TaskCard), findsNWidgets(2)); - await tester.tap(find.byType(TaskCard).first); - await tester.pump(); - - expect(find.byType(AlertDialog), findsOneWidget); - }); - - testWidgets( - "Check calendarTapped when targetElement is CalendarElement.header", - (tester) async { - await tester.pumpWidget(createTaskScheduleWidget()); - await tester.pump(); - - final finder = find.byType(SfCalendar); - await tester.tap(finder); - await tester.pump(); - - await tester.tap(find.text(DateFormat("MMMM y").format(DateTime.now()))); - await tester.pump(); - verifyNever(mockNavigationService.pushDialog(const AlertDialog())); - }); - testWidgets( - 'Check when the Task Card is pressed the close button is available', - (tester) async { - await tester.pumpWidget(createTaskScheduleWidget()); - await tester.pump(); - - final finder = find.byType(SfCalendar); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(TaskCard), findsNWidgets(2)); - await tester.tap(find.byType(TaskCard).first); - await tester.pump(); - - final closeBtn = find.text('Close'); - expect(closeBtn, findsOneWidget); - }); - testWidgets('Check if close button is working in AlertDialog', - (tester) async { - await tester.pumpWidget(createTaskScheduleWidget()); - await tester.pump(); - - final finder = find.byType(SfCalendar); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(TaskCard), findsNWidgets(2)); - await tester.tap(find.byType(TaskCard).first); - await tester.pump(); - - ///the AlertBOX is in open status - expect(find.byType(AlertDialog), findsOneWidget); - final closeBtn = find.text('Close'); - await tester.tap(closeBtn); - await tester.pump(); - - ///the AlertBOX is in closed status - expect(find.byType(AlertDialog), findsNothing); - }); - testWidgets('Check TaskCard is showing up', (tester) async { - await tester.pumpWidget(createTaskCardWidget()); - await tester.pump(); - - expect(find.byType(Container), findsOneWidget); - await tester.tap(find.byType(IconButton)); - await tester.pump(); - }); - testWidgets('Check TaskCard Icons.more_vert is working', (tester) async { - await tester.pumpWidget(createTaskCardWidget()); - await tester.pump(); - - final finder = find.byIcon(Icons.more_vert); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(AlertDialog), findsOneWidget); - }); - testWidgets('Check AlertDialog have all button', (tester) async { - await tester.pumpWidget(createTaskCardWidget()); - await tester.pump(); - - final finder = find.byIcon(Icons.more_vert); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(AlertDialog), findsOneWidget); - - expect(find.text('Delete'), findsOneWidget); - expect(find.text('Edit'), findsOneWidget); - expect(find.text('Cancel'), findsOneWidget); - }); - testWidgets('Check AlertDialog delete button iss working', (tester) async { - await tester.pumpWidget(createTaskCardWidget()); - await tester.pump(); - - final finder = find.byIcon(Icons.more_vert); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(AlertDialog), findsOneWidget); - final deleteBtn = find.text('Delete'); - - expect(find.text('Delete'), findsOneWidget); - expect(find.text('Edit'), findsOneWidget); - expect(find.text('Cancel'), findsOneWidget); - - await tester.tap(deleteBtn); - await tester.pump(); - - expect(find.byType(AlertDialog), findsNothing); - }); - testWidgets('Check AlertDialog edit button iss working', (tester) async { - await tester.pumpWidget(createTaskCardWidget()); - // await tester - await tester.pump(); - - final finder = find.byIcon(Icons.more_vert); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(AlertDialog), findsOneWidget); - final editBtn = find.text('Edit'); - - expect(find.text('Delete'), findsOneWidget); - expect(find.text('Edit'), findsOneWidget); - expect(find.text('Cancel'), findsOneWidget); - - await tester.tap(editBtn); - await tester.pump(); - - // expect(find.byType(EditEventPage), findsOneWidget); - }); - testWidgets('Check AlertDialog cancel button iss working', (tester) async { - await tester.pumpWidget(createTaskCardWidget()); - await tester.pump(); - - final finder = find.byIcon(Icons.more_vert); - await tester.tap(finder); - await tester.pump(); - - expect(find.byType(AlertDialog), findsOneWidget); - final cancelBtn = find.text('Cancel'); - - expect(find.text('Delete'), findsOneWidget); - expect(find.text('Edit'), findsOneWidget); - expect(find.text('Cancel'), findsOneWidget); - - await tester.tap(cancelBtn); - await tester.pump(); - expect(find.byType(AlertDialog), findsNothing); - }); -} From 15e12ecd20fc3db8bbf82d3c07e9daa0928af4a6 Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 4 Feb 2024 14:47:24 +0530 Subject: [PATCH 2/8] fix failing test --- .../pre_auth_screens/select_language_page_test.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/widget_tests/pre_auth_screens/select_language_page_test.dart b/test/widget_tests/pre_auth_screens/select_language_page_test.dart index ab28d9878..cafd870c4 100644 --- a/test/widget_tests/pre_auth_screens/select_language_page_test.dart +++ b/test/widget_tests/pre_auth_screens/select_language_page_test.dart @@ -293,5 +293,8 @@ Future main() async { expect(findAppNameWidget, findsNothing); }); }); - + File('test/fixtures/core/currentorg.hive').delete(); + File('test/fixtures/core/currentorg.lock').delete(); + File('test/fixtures/core/currentuser.hive').delete(); + File('test/fixtures/core/currentuser.lock').delete(); } From 659643340e1f49e86be181303518870935bc47ea Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 4 Feb 2024 18:40:03 +0530 Subject: [PATCH 3/8] fix failing test --- lib/router.dart | 2 +- test/helpers/test_helpers.mocks.dart | 2 -- test/router_test.dart | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/router.dart b/lib/router.dart index 6df9c44a2..e5040ace2 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -275,7 +275,7 @@ Route generateRoute(RouteSettings settings) { key: const Key('Calendar'), ), ); - + case Routes.selectContact: return MaterialPageRoute( builder: (context) => const SelectContact(key: Key('selectContact')), diff --git a/test/helpers/test_helpers.mocks.dart b/test/helpers/test_helpers.mocks.dart index 3d9a6df6f..a6253957f 100644 --- a/test/helpers/test_helpers.mocks.dart +++ b/test/helpers/test_helpers.mocks.dart @@ -3208,8 +3208,6 @@ class MockAppTheme extends _i2.Mock implements _i38.AppTheme { ); } - - /// A class which mocks [CreateEventViewModel]. /// /// See the documentation for Mockito's code generation for more information. diff --git a/test/router_test.dart b/test/router_test.dart index 4963c3e7a..ec22cb1e9 100644 --- a/test/router_test.dart +++ b/test/router_test.dart @@ -291,8 +291,6 @@ void main() { } }); - - testWidgets('Test for selectContact route', (WidgetTester tester) async { final route = generateRoute(const RouteSettings(name: Routes.selectContact)); From 89aab8214ce3475f46205f4613f1a04e7495c882 Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 4 Feb 2024 18:43:55 +0530 Subject: [PATCH 4/8] fix failing test --- test/service_tests/event_service_test.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/service_tests/event_service_test.dart b/test/service_tests/event_service_test.dart index 5666f50bb..21a590b82 100644 --- a/test/service_tests/event_service_test.dart +++ b/test/service_tests/event_service_test.dart @@ -21,7 +21,7 @@ void main() { group('Test EventService', () { test('Test editEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = ''; + const query = ''; final Map variables = {}; when( dataBaseMutationFunctions.gqlAuthMutation( @@ -55,7 +55,7 @@ void main() { test('Test deleteEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = ''; + const query = ''; when( dataBaseMutationFunctions.gqlAuthMutation( EventQueries().deleteEvent('eventId'), @@ -79,7 +79,7 @@ void main() { test('Test registerForAnEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = ''; + const query = ''; when( dataBaseMutationFunctions.gqlAuthMutation( EventQueries().registerForEvent(), @@ -102,7 +102,7 @@ void main() { test('Test fetchRegistrantsByEvent method', () async { final dataBaseMutationFunctions = locator(); - final query = ''; + const query = ''; when( dataBaseMutationFunctions.gqlAuthQuery( EventQueries().registrantsByEvent('eventId'), @@ -122,7 +122,7 @@ void main() { test('Test getEvents method', () async { final dataBaseMutationFunctions = locator(); - final query = ''; + const query = ''; userConfig.currentOrg = OrgInfo(name: 'org', id: 'id'); when( dataBaseMutationFunctions.gqlAuthMutation( From 204e673ad3d8027f13917f69f4d0206f0daf090c Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 11 Feb 2024 22:24:54 +0530 Subject: [PATCH 5/8] Squashed commit of the following: commit 69e6513a90284a61a4713eb21244b45fa717aba2 Author: Shaik Azad <120930148+Azad99-9@users.noreply.github.com> Date: Sun Feb 11 20:17:19 2024 +0530 Created Session Management. (#2362) * feat: efficient session management * chore: run check ignore * Revert "chore: run check ignore" This reverts commit be7e49f1d03a6a047417af98f327ea49ade5f807. * chore fix: run check ignore * feat: added new package fake_async * chore: fixed codecov drop * Update README.md * Deprecate Google Maps Integration (#2363) * Post comments were invisible in Individual Post Page with Image (#2350) * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment * Bump syncfusion_flutter_datepicker from 24.1.47 to 24.2.3 (#2365) Bumps [syncfusion_flutter_datepicker](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.47 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_datepicker dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump syncfusion_flutter_calendar from 24.1.45 to 24.2.3 (#2367) Bumps [syncfusion_flutter_calendar](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.45 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_calendar dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fixed requested changes * pulled latest upstream --------- Signed-off-by: dependabot[bot] Co-authored-by: Peter Harrison <16875803+palisadoes@users.noreply.github.com> Co-authored-by: Parag Gupta <103507835+Dante291@users.noreply.github.com> Co-authored-by: Shivam Gupta Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit 1110aef0987e1b37ff6c6351fcb30be2d372548c Author: Crystian I <60124535+Cioppolo14@users.noreply.github.com> Date: Tue Feb 6 21:38:27 2024 -0500 Update pull-request-target.yml commit 10d58db4f79739fa59f5a83f37034fa4a62d3c65 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Feb 5 02:40:39 2024 -0800 Bump syncfusion_flutter_calendar from 24.1.45 to 24.2.3 (#2367) Bumps [syncfusion_flutter_calendar](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.45 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_calendar dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit 7bfbaef41d77fd8a34a64d6b78059e3d71f09df8 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Feb 5 02:04:46 2024 -0800 Bump syncfusion_flutter_datepicker from 24.1.47 to 24.2.3 (#2365) Bumps [syncfusion_flutter_datepicker](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.47 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_datepicker dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit 38682c8319b7b3a82e62f87e0b37e139a65d95bd Author: Shivam Gupta Date: Sun Feb 4 01:16:07 2024 +0530 Post comments were invisible in Individual Post Page with Image (#2350) * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment --- .github/workflows/pull-request-target.yml | 1 + lib/locator.dart | 27 +-- lib/plugins/fetch_plugin_list.dart | 2 +- lib/services/comment_service.dart | 3 +- lib/services/database_mutation_functions.dart | 35 ++-- lib/services/event_service.dart | 14 -- lib/services/graphql_config.dart | 5 - lib/services/post_service.dart | 2 - lib/services/session_manager.dart | 52 ++++++ lib/services/task_service.dart | 167 ++++++++++++++++++ lib/services/user_config.dart | 4 +- lib/splash_screen.dart | 11 +- lib/utils/comment_queries.dart | 36 ++-- lib/utils/post_queries.dart | 2 +- .../create_event_view_model.dart | 3 - pubspec.lock | 16 +- pubspec.yaml | 6 +- test/helpers/test_helpers.dart | 9 + test/model_tests/user/user_info_test.dart | 1 + test/service_tests/comment_service_test.dart | 11 +- .../database_mutations_function_test.dart | 1 + test/service_tests/event_service_test.dart | 4 + test/service_tests/post_service_test.dart | 7 +- test/service_tests/session_manager_test.dart | 41 +++++ test/service_tests/user_config_test.dart | 20 ++- test/utils/comment_queries_test.dart | 20 +-- test/utils/post_queries_test.dart | 41 +++++ .../pre_auth_screens/splash_screen_test.dart | 55 ++++-- 28 files changed, 485 insertions(+), 111 deletions(-) create mode 100644 lib/services/session_manager.dart create mode 100644 lib/services/task_service.dart create mode 100644 test/service_tests/session_manager_test.dart diff --git a/.github/workflows/pull-request-target.yml b/.github/workflows/pull-request-target.yml index 34b8cb590..f8077e44d 100644 --- a/.github/workflows/pull-request-target.yml +++ b/.github/workflows/pull-request-target.yml @@ -38,6 +38,7 @@ jobs: ### Reviewers + Do not assign reviewers. Our Queue Monitors will review your PR and assign them. When your PR has been assigned reviewers contact them to get your code reviewed and approved via: 1. comments in this PR or diff --git a/lib/locator.dart b/lib/locator.dart index e4d321c97..dc1b148b5 100644 --- a/lib/locator.dart +++ b/lib/locator.dart @@ -12,6 +12,7 @@ import 'package:talawa/services/image_service.dart'; import 'package:talawa/services/navigation_service.dart'; import 'package:talawa/services/org_service.dart'; import 'package:talawa/services/post_service.dart'; +import 'package:talawa/services/session_manager.dart'; import 'package:talawa/services/size_config.dart'; import 'package:talawa/services/third_party_service/multi_media_pick_service.dart'; import 'package:talawa/services/user_config.dart'; @@ -41,37 +42,40 @@ import 'package:talawa/view_model/widgets_view_models/custom_drawer_view_model.d import 'package:talawa/view_model/widgets_view_models/like_button_view_model.dart'; import 'package:talawa/view_model/widgets_view_models/progress_dialog_view_model.dart'; -// Creating an instance of GetIt and storing it in a global variable +// Instance of GetIt and storing it in a global variable /// Intializaing the locator. GetIt locator = GetIt.instance; -///creating GetIt for UserConfig. +///GetIt for UserConfig. final userConfig = locator(); -///creating GetIt for NavigationService. +///GetIt for NavigationService. final navigationService = locator(); -///creating GetIt for DataBaseMutationFunctions. +///GetIt for DataBaseMutationFunctions. final databaseFunctions = locator(); -///creating GetIt for GraphqlConfig. +///GetIt for GraphqlConfig. final graphqlConfig = locator(); -///creating GetIt for SizeConfig. +///GetIt for SizeConfig. final sizeConfig = locator(); -///creating GetIt for Queries. +///GetIt for Queries. final queries = locator(); -///creating GetIt for Connectivity. +///GetIt for Connectivity. final connectivity = locator(); -///creating GetIt for OrganizationService. +///GetIt for OrganizationService. final organizationService = locator(); -///creating GetIt for ImageService. +///GetIt for ImageService. final imageService = locator(); +///GetIt for SessionManager. +final sessionManager = locator(); + /// This function registers the widgets/objects in "GetIt". /// /// **params**: @@ -91,6 +95,9 @@ void setupLocator() { //userConfig locator.registerSingleton(UserConfig()); + //sessionManager + locator.registerSingleton(SessionManager()); + //Services locator.registerLazySingleton(() => PostService()); locator.registerLazySingleton(() => EventService()); diff --git a/lib/plugins/fetch_plugin_list.dart b/lib/plugins/fetch_plugin_list.dart index 5fb08e8d0..5513a5e2b 100644 --- a/lib/plugins/fetch_plugin_list.dart +++ b/lib/plugins/fetch_plugin_list.dart @@ -27,6 +27,6 @@ class FetchPluginList { ), ); box = Hive.box('pluginBox'); - box.put('plugins', result.data!["getPlugins"]); + box.put('plugins', result.data?["getPlugins"]); } } diff --git a/lib/services/comment_service.dart b/lib/services/comment_service.dart index 7b25338eb..b118b6c00 100644 --- a/lib/services/comment_service.dart +++ b/lib/services/comment_service.dart @@ -4,7 +4,6 @@ import 'package:talawa/locator.dart'; import 'package:talawa/services/database_mutation_functions.dart'; import 'package:talawa/services/navigation_service.dart'; import 'package:talawa/utils/comment_queries.dart'; -import 'package:talawa/utils/post_queries.dart'; /// CommentService class have different member functions which provides service in the context of commenting. /// @@ -62,7 +61,7 @@ class CommentService { /// * `Future>`: promise that will be fulfilled with list of comments. /// Future> getCommentsForPost(String postId) async { - final String getCommmentQuery = PostQueries().getPostById(postId); + final String getCommmentQuery = CommentQueries().getPostsComments(postId); final dynamic result = await _dbFunctions.gqlAuthMutation(getCommmentQuery); diff --git a/lib/services/database_mutation_functions.dart b/lib/services/database_mutation_functions.dart index d9aeec90e..5760616c2 100644 --- a/lib/services/database_mutation_functions.dart +++ b/lib/services/database_mutation_functions.dart @@ -26,7 +26,7 @@ class DataBaseMutationFunctions { /// Query passed by fucntion calling this function. late Queries _query; - /// initialization function. + /// Initialization function. /// /// **params**: /// None @@ -39,6 +39,19 @@ class DataBaseMutationFunctions { _query = Queries(); } + /// Initializes [clientNonAuth] function. + /// + /// **params**: + /// None + /// + /// **returns**: + /// None + void initClientNonAuth() { + graphqlConfig.getOrgUrl(); + clientNonAuth = graphqlConfig.clientToQuery(); + _query = Queries(); + } + /// Graphql error for handling. GraphQLError userNotFound = const GraphQLError(message: 'User not found'); @@ -86,7 +99,7 @@ class DataBaseMutationFunctions { OperationException exception, { bool showSnackBar = true, }) { - // if server link is wrong. + // If server link is wrong. if (exception.linkException != null) { debugPrint(exception.linkException.toString()); if (showSnackBar) { @@ -100,7 +113,7 @@ class DataBaseMutationFunctions { return false; } - /// looping through graphQL errors. + /// Looping through graphQL errors. debugPrint(exception.graphqlErrors.toString()); for (int i = 0; i < exception.graphqlErrors.length; i++) { // if the error message is "Access Token has expired. Please refresh session.: Undefined location" @@ -116,7 +129,7 @@ class DataBaseMutationFunctions { return true; } - /// if the error message is "User is not authenticated" + /// If the error message is "User is not authenticated" if (exception.graphqlErrors[i].message == userNotAuthenticated.message) { print('client refreshed'); refreshAccessToken(userConfig.currentUser.refreshToken!).then( @@ -127,7 +140,7 @@ class DataBaseMutationFunctions { return true; } - /// if the error message is "User not found" + /// If the error message is "User not found" if (exception.graphqlErrors[i].message == userNotFound.message) { if (showSnackBar) { WidgetsBinding.instance.addPostFrameCallback( @@ -140,7 +153,7 @@ class DataBaseMutationFunctions { return false; } - /// if the error message is "Membership Request already exists" + /// If the error message is "Membership Request already exists" if (exception.graphqlErrors[i].message == memberRequestExist.message) { if (showSnackBar) { WidgetsBinding.instance.addPostFrameCallback( @@ -153,7 +166,7 @@ class DataBaseMutationFunctions { return false; } - /// if the error message is "Invalid credentials" + /// If the error message is "Invalid credentials" if (exception.graphqlErrors[i].message == wrongCredentials.message) { if (showSnackBar) { WidgetsBinding.instance.addPostFrameCallback( @@ -166,7 +179,7 @@ class DataBaseMutationFunctions { return false; } - /// if the error message is "Organization not found" + /// If the error message is "Organization not found" if (exception.graphqlErrors[i].message == organizationNotFound.message) { if (showSnackBar) { WidgetsBinding.instance.addPostFrameCallback( @@ -179,7 +192,7 @@ class DataBaseMutationFunctions { return false; } - /// if the error message is "Email address already exists" + /// If the error message is "Email address already exists" if (exception.graphqlErrors[i].message == emailAccountPresent.message) { if (showSnackBar) { WidgetsBinding.instance.addPostFrameCallback( @@ -192,7 +205,7 @@ class DataBaseMutationFunctions { return false; } } - // if the error is unknown + // If the error is unknown WidgetsBinding.instance.addPostFrameCallback( (_) => navigationService.showTalawaErrorDialog( @@ -250,7 +263,7 @@ class DataBaseMutationFunctions { variables: variables ?? {}, ), ); - // if there is an error or exception in [result] + // If there is an error or exception in [result] if (result.hasException) { final exception = encounteredExceptionOrError(result.exception!); if (exception!) { diff --git a/lib/services/event_service.dart b/lib/services/event_service.dart index ba2f05de9..11070dde7 100644 --- a/lib/services/event_service.dart +++ b/lib/services/event_service.dart @@ -71,10 +71,6 @@ class EventService { /// **returns**: /// None Future getEvents() async { - // refresh user's access token - await _dbFunctions.refreshAccessToken(userConfig.currentUser.refreshToken!); - _dbFunctions.init(); - // get current organization id final String currentOrgID = _currentOrg.id!; // mutation to fetch the events @@ -102,7 +98,6 @@ class EventService { /// **returns**: /// * `Future`: Information about event registrants. Future fetchRegistrantsByEvent(String eventId) async { - await _dbFunctions.refreshAccessToken(userConfig.currentUser.refreshToken!); final result = await _dbFunctions.gqlAuthQuery( EventQueries().registrantsByEvent(eventId), ); @@ -117,9 +112,6 @@ class EventService { /// **returns**: /// * `Future`: Information about the event registration. Future registerForAnEvent(String eventId) async { - final tokenResult = await _dbFunctions - .refreshAccessToken(userConfig.currentUser.refreshToken!); - debugPrint(tokenResult.toString()); final Map variables = {'eventId': eventId}; final result = await _dbFunctions.gqlAuthMutation( EventQueries().registerForEvent(), @@ -139,9 +131,6 @@ class EventService { navigationService.pushDialog( const CustomProgressDialog(key: Key('DeleteEventProgress')), ); - final tokenResult = await _dbFunctions - .refreshAccessToken(userConfig.currentUser.refreshToken!); - debugPrint(tokenResult.toString()); final result = await _dbFunctions.gqlAuthMutation( EventQueries().deleteEvent(eventId), ); @@ -166,9 +155,6 @@ class EventService { key: Key('EditEventProgress'), ), ); - final tokenResult = await _dbFunctions - .refreshAccessToken(userConfig.currentUser.refreshToken!); - debugPrint(tokenResult.toString()); final result = await _dbFunctions.gqlAuthMutation( EventQueries().updateEvent(eventId: eventId), variables: variables, diff --git a/lib/services/graphql_config.dart b/lib/services/graphql_config.dart index ed35a1cc9..374485d08 100644 --- a/lib/services/graphql_config.dart +++ b/lib/services/graphql_config.dart @@ -1,6 +1,3 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:hive/hive.dart'; import 'package:http/http.dart' as http; @@ -39,8 +36,6 @@ class GraphqlConfig { orgURI = url ?? ' '; displayImgRoute = imgUrl ?? ' '; httpLink = HttpLink(orgURI!); - clientToQuery(); - authClient(); } GraphQLClient clientToQuery() { diff --git a/lib/services/post_service.dart b/lib/services/post_service.dart index 6b6fcaa2f..9df9a00fe 100644 --- a/lib/services/post_service.dart +++ b/lib/services/post_service.dart @@ -73,8 +73,6 @@ class PostService { /// **returns**: /// * `Future`: returns future void Future getPosts() async { - await _dbFunctions.refreshAccessToken(userConfig.currentUser.refreshToken!); - _dbFunctions.init(); // variables final String currentOrgID = _currentOrg.id!; final String query = PostQueries().getPostsById(currentOrgID); diff --git a/lib/services/session_manager.dart b/lib/services/session_manager.dart new file mode 100644 index 000000000..76df5bfa0 --- /dev/null +++ b/lib/services/session_manager.dart @@ -0,0 +1,52 @@ +import 'dart:async'; + +import 'package:talawa/locator.dart'; + +/// Manages user sessions and periodically refreshes access tokens. +class SessionManager { + SessionManager() { + initializeSessionRefresher(); + } + + /// returns refresh interval of Session Manager. + int get refreshInterval => _refreshInterval; + + /// refresh interval in seconds. + static const int _refreshInterval = 600; + + /// Initializes as session refresher. + /// + /// Invokes [refreshSession] periodically at regular + /// refresh intervals. + /// + /// **params**: + /// None + /// + /// **returns**: + /// * `Timer`: refresh timer. + Timer initializeSessionRefresher() { + return Timer.periodic( + const Duration(seconds: _refreshInterval), + (Timer timer) async { + refreshSession(); + }, + ); + } + + /// Asynchronously refreshes the user session. + /// + /// **params**: + /// None + /// + /// **returns**: + /// * `Future`: indicates if session refresh was + /// successful. + Future refreshSession() async { + if (userConfig.loggedIn && userConfig.currentUser.refreshToken != null) { + final refreshed = await databaseFunctions + .refreshAccessToken(userConfig.currentUser.refreshToken!); + return refreshed; + } + return false; + } +} diff --git a/lib/services/task_service.dart b/lib/services/task_service.dart new file mode 100644 index 000000000..a6d3f83b5 --- /dev/null +++ b/lib/services/task_service.dart @@ -0,0 +1,167 @@ +import 'package:flutter/painting.dart'; +import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:talawa/locator.dart'; +import 'package:talawa/models/task/task_model.dart'; +import 'package:talawa/services/database_mutation_functions.dart'; +import 'package:talawa/services/user_config.dart'; +import 'package:talawa/utils/task_queries.dart'; + +/// Provides functions in the context of a Task. +/// +/// Services include: +/// * `getTasksForEvent` : to get the task for the event. +/// * `getTasksByUser` : to get the task added by the user. +/// * `editTask` : to edit the task added by the user. +/// * `createTask` : to create the task for the event. +/// * `deleteTask` : to delete the task added by the user. +class TaskService { + final _databaseMutationFunctions = locator(); + final _userConfig = locator(); + + /// callBack to NotifyListeners. + late VoidCallback callbackNotifyListeners; + + final _tasks = []; + + /// List of Tasks. + List get tasks => _tasks; + + /// Retrieves tasks for a specific event. + /// + /// **params**: + /// * `eventId`: The ID of the event for which tasks + /// are to be retrieved. + /// + /// **returns**: + /// None + Future getTasksForEvent(String eventId) async { + final res = await _databaseMutationFunctions + .gqlNonAuthQuery(TaskQueries.eventTasks(eventId)); + + if (res != null) { + _tasks.clear(); + final tasksList = res.data!['tasksByEvent'] as List; + tasksList.forEach((task) { + _tasks.add(Task.fromJson(task as Map)); + }); + } + } + + /// Retrieves tasks associated with the current user. + /// + /// **params**: + /// None + /// + /// **returns**: + /// None + Future getTasksByUser() async { + final res = await _databaseMutationFunctions + .gqlNonAuthQuery(TaskQueries.userTasks(_userConfig.currentUser.id!)); + + if (res != null) { + _tasks.clear(); + final tasksList = res.data!['tasksByUser'] as List; + tasksList.forEach((task) { + _tasks.add(Task.fromJson(task as Map)); + }); + } + } + + /// Edits a task with the provided details. + /// + /// **params**: + /// * `title`: The new title for the task. + /// * `description`: The new description for the task. + /// * `deadline`: The new deadline for the task. + /// * `taskId`: The ID of the task to be edited. + /// + /// **returns**: + /// * `Future`: A promise that will be fulfilled + /// with a boolean value indicating whether the task + /// was successfully edited. + Future editTask({ + required String title, + required String description, + required String deadline, + required String taskId, + }) async { + final res = await _databaseMutationFunctions.gqlAuthMutation( + TaskQueries.editTask( + title: title, + description: description, + deadline: deadline, + taskId: taskId, + ), + ); + + // if res is not null. + if (res != null) { + final updatedtaskJson = + (res as QueryResult).data!['updateTask'] as Map; + final index = _tasks.indexWhere((task) => task.id == taskId); + if (index == -1) return false; + final updatedtask = Task.fromJson(updatedtaskJson); + updatedtask.event.title = _tasks[index].event.title; + _tasks[index] = updatedtask; + callbackNotifyListeners(); + // if successfully updated then return true. + return true; + } + return false; + } + + /// Creates a new task with the provided details. + /// + /// **params**: + /// * `title`: The title for the new task. + /// * `description`: The description for the new task. + /// * `deadline`: The deadline for the new task. + /// * `eventId`: The ID of the event associated with + /// the new task. + /// + /// **returns**: + /// * `Future`: A promise that will be fulfilled + /// with a boolean value indicating whether the task + /// was successfully created. + Future createTask({ + required String title, + required String description, + required String deadline, + required String eventId, + }) async { + final res = await _databaseMutationFunctions.gqlAuthMutation( + TaskQueries.addTask( + title: title, + description: description, + deadline: deadline, + eventId: eventId, + ), + ); + + if (res != null) { + final task = + (res as QueryResult).data!['createTask'] as Map; + _tasks.add(Task.fromJson(task)); + callbackNotifyListeners(); + return true; + } + return false; + } + + /// Deletes a task given its ID and the creator's ID. + /// + /// **params**: + /// * `taskId`: The ID of the task to be deleted. + /// * `creatorId`: The ID of the task's creator. + /// + /// **returns**: + /// None + Future deleteTask(String taskId, String creatorId) async { + if (creatorId == _userConfig.currentUser.id) { + final res = await _databaseMutationFunctions + .gqlAuthMutation(TaskQueries.deleteTask(taskId)); + if (res != null) _tasks.removeWhere((task) => task.id == taskId); + } + } +} + diff --git a/lib/services/user_config.dart b/lib/services/user_config.dart index ce6b53b2f..e7543c6b2 100644 --- a/lib/services/user_config.dart +++ b/lib/services/user_config.dart @@ -89,9 +89,11 @@ class UserConfig { _currentUser = User(id: 'null', authToken: 'null'); return false; } + + databaseFunctions.initClientNonAuth(); + await sessionManager.refreshSession(); // generate access token graphqlConfig.getToken().then((value) async { - databaseFunctions.init(); try { final QueryResult result = await databaseFunctions.gqlAuthQuery( queries.fetchUserInfo, diff --git a/lib/splash_screen.dart b/lib/splash_screen.dart index 7ea6fafbd..89290d1ee 100644 --- a/lib/splash_screen.dart +++ b/lib/splash_screen.dart @@ -28,10 +28,10 @@ class _SplashScreenState extends State { Uri? _latestUri; late StreamSubscription _sub; - // / Flutter supports deep linking on iOS, Android, and web browsers. - // / Opening a URL displays that screen in your app. - // / `_handleInitialUri` is an async function that is used to hanlde - // / the initial uri of the application. + // Flutter supports deep linking on iOS, Android, and web browsers. + // Opening a URL displays that screen in your app. + // `_handleInitialUri` is an async function that is used to hanlde + // the initial uri of the application. /// Opening a URL displays that screen in your app. /// @@ -72,8 +72,7 @@ class _SplashScreenState extends State { if (!mounted) return; setState(() => _initialUri = null); } - - final bool userLoggedIn = await userConfig.userLoggedIn(); + final bool userLoggedIn = userConfig.loggedIn; _initialUri = null; _latestUri = null; if (_latestUri == null && _initialUri == null) { diff --git a/lib/utils/comment_queries.dart b/lib/utils/comment_queries.dart index 6c6b36bc3..fa11f6c18 100644 --- a/lib/utils/comment_queries.dart +++ b/lib/utils/comment_queries.dart @@ -1,9 +1,12 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - ///This class creates the queries dealing with comments. class CommentQueries { - //Returns a query for creating a comment + /// Creating a comment. + /// + /// **params**: + /// None + /// + /// **returns**: + /// * `String`: The query for creating a comment String createComment() { return """ mutation createComment(\$postId: ID!, \$text: String!) { @@ -18,20 +21,29 @@ class CommentQueries { """; } - //Returns a query to get the comments of a post + /// Get all comments for a post. + /// + /// **params**: + /// * `postId`: The id of the post to get comments for. + /// + /// **returns**: + /// * `String`: The query for getting all comments for a post. String getPostsComments(String postId) { return """ - query{ - commentsByPost(id: "$postId"){ - _id - text - createdAt + query { + post(id: "$postId") + { _id, + comments{ + _id, + text, + createdAt creator{ firstName lastName } + } + } } - } - """; +"""; } } diff --git a/lib/utils/post_queries.dart b/lib/utils/post_queries.dart index 365c940d0..4d763032d 100644 --- a/lib/utils/post_queries.dart +++ b/lib/utils/post_queries.dart @@ -73,7 +73,7 @@ class PostQueries { _id } comments{ - _id, + _id, text, createdAt creator{ diff --git a/lib/view_model/after_auth_view_models/event_view_models/create_event_view_model.dart b/lib/view_model/after_auth_view_models/event_view_models/create_event_view_model.dart index d670a375e..bcd6d257e 100644 --- a/lib/view_model/after_auth_view_models/event_view_models/create_event_view_model.dart +++ b/lib/view_model/after_auth_view_models/event_view_models/create_event_view_model.dart @@ -188,9 +188,6 @@ class CreateEventViewModel extends BaseModel { navigationService.pushDialog( const CustomProgressDialog(key: Key('EventCreationProgress')), ); - final tokenResult = await databaseFunctions - .refreshAccessToken(userConfig.currentUser.refreshToken!); - print(tokenResult); // invoke the `gqlAuthMutation` function of `databaseFunctions` // service along with the mutation query and variable map. final result = await databaseFunctions.gqlAuthMutation( diff --git a/pubspec.lock b/pubspec.lock index 24b963d69..e62483e20 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -338,7 +338,7 @@ packages: source: hosted version: "7.0.0" fake_async: - dependency: transitive + dependency: "direct dev" description: name: fake_async sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" @@ -1446,26 +1446,26 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_calendar - sha256: "12c9750dc5b728cb2eee251533a7bcc0b66171f9c7d2c5a3ed665494534148f0" + sha256: c89f106726cb7f8f35625281129234571dde1a79d7ac54ebbbbd2f89e5c15440 url: "https://pub.dev" source: hosted - version: "24.1.45" + version: "24.2.3" syncfusion_flutter_core: dependency: transitive description: name: syncfusion_flutter_core - sha256: ed8527189f874b9d07f78f2f4306739ce003e8baccfdd7453c0098beef16428f + sha256: c0693d88cbdef2af5da286c605e5e8f33216c8f6cb3bc92a88a51decfb62bace url: "https://pub.dev" source: hosted - version: "24.1.47" + version: "24.2.3" syncfusion_flutter_datepicker: dependency: "direct main" description: name: syncfusion_flutter_datepicker - sha256: "374ab719b7591af6bf81dabe2db60fa85968bbf4d29522fe61979344454dcc7a" + sha256: "8ed5aa0217fafe1788d815766d98ece641d1cf067b47ca3d71da81e7605b0d5c" url: "https://pub.dev" source: hosted - version: "24.1.47" + version: "24.2.3" synchronized: dependency: transitive description: @@ -1546,7 +1546,7 @@ packages: source: hosted version: "0.5.1" uni_links_platform_interface: - dependency: transitive + dependency: "direct main" description: name: uni_links_platform_interface sha256: "929cf1a71b59e3b7c2d8a2605a9cf7e0b125b13bc858e55083d88c62722d4507" diff --git a/pubspec.yaml b/pubspec.yaml index 0ed18c71e..5f788d264 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -67,11 +67,12 @@ dependencies: shared_preferences: ^2.2.2 shimmer: ^3.0.0 social_share: ^2.2.1 - syncfusion_flutter_calendar: ^24.1.43 - syncfusion_flutter_datepicker: 24.1.47 + syncfusion_flutter_calendar: ^24.2.3 + syncfusion_flutter_datepicker: 24.2.3 timelines: ^0.1.0 tutorial_coach_mark: ^1.2.11 uni_links: ^0.5.1 + uni_links_platform_interface: ^1.0.0 url_launcher: ^6.2.4 vibration: ^1.8.4 video_player: ^2.8.2 @@ -80,6 +81,7 @@ dependencies: dev_dependencies: build_runner: ^2.4.7 custom_lint: 0.5.8 + fake_async: ^1.3.1 flutter_test: sdk: flutter hive_generator: ^2.0.1 diff --git a/test/helpers/test_helpers.dart b/test/helpers/test_helpers.dart index 83ae0359d..250a4a914 100644 --- a/test/helpers/test_helpers.dart +++ b/test/helpers/test_helpers.dart @@ -29,6 +29,7 @@ import 'package:talawa/services/image_service.dart'; import 'package:talawa/services/navigation_service.dart'; import 'package:talawa/services/org_service.dart'; import 'package:talawa/services/post_service.dart'; +import 'package:talawa/services/session_manager.dart'; import 'package:talawa/services/size_config.dart'; import 'package:talawa/services/third_party_service/multi_media_pick_service.dart'; import 'package:talawa/services/user_config.dart'; @@ -53,6 +54,7 @@ import 'package:talawa/view_model/widgets_view_models/like_button_view_model.dar import 'package:talawa/view_model/widgets_view_models/progress_dialog_view_model.dart'; import '../service_tests/image_service_test.dart'; +import '../service_tests/user_config_test.dart'; import '../views/main_screen_test.dart'; import 'test_helpers.mocks.dart'; @@ -172,6 +174,13 @@ CommentService getAndRegisterCommentService() { return service; } +SessionManager getAndRegisterSessionManager() { + _removeRegistrationIfExists(); + final service = MockSessionManger(); + locator.registerSingleton(service); + return service; +} + ChatService getAndRegisterChatService() { _removeRegistrationIfExists(); final service = MockChatService(); diff --git a/test/model_tests/user/user_info_test.dart b/test/model_tests/user/user_info_test.dart index f4611e34b..5a2ef1761 100644 --- a/test/model_tests/user/user_info_test.dart +++ b/test/model_tests/user/user_info_test.dart @@ -61,6 +61,7 @@ final testDataFromOrg = { /// Test Data Not From Organization. final testDataNotFromOrg = { "user": { + "id": "1234567890", "firstName": "ravidi", "lastName": "sheikh", "email": "ravidisheikh@test.com", diff --git a/test/service_tests/comment_service_test.dart b/test/service_tests/comment_service_test.dart index 71233621d..4a8af5695 100644 --- a/test/service_tests/comment_service_test.dart +++ b/test/service_tests/comment_service_test.dart @@ -6,7 +6,6 @@ import 'package:talawa/locator.dart'; import 'package:talawa/services/comment_service.dart'; import 'package:talawa/services/database_mutation_functions.dart'; import 'package:talawa/utils/comment_queries.dart'; -import 'package:talawa/utils/post_queries.dart'; import '../helpers/test_helpers.dart'; void main() { @@ -75,7 +74,7 @@ void main() { test('test for getCommentsForPost', () async { final dataBaseMutationFunctions = locator(); final String getCommmentQuery = - PostQueries().getPostById('Ayush s postid'); + CommentQueries().getPostsComments('Ayush s postid'); when( dataBaseMutationFunctions.gqlAuthMutation(getCommmentQuery), @@ -167,7 +166,7 @@ void main() { final dataBaseMutationFunctions = locator(); final String getCommmentQuery = - PostQueries().getPostById('Ayush s postid'); + CommentQueries().getPostsComments('Ayush s postid'); when( dataBaseMutationFunctions.gqlAuthMutation(getCommmentQuery), ).thenAnswer( @@ -221,7 +220,7 @@ void main() { final dataBaseMutationFunctions = locator(); final String getCommmentQuery = - PostQueries().getPostById('Ayush s postid'); + CommentQueries().getPostsComments('Ayush s postid'); when( dataBaseMutationFunctions.gqlAuthMutation(getCommmentQuery), ).thenAnswer( @@ -273,7 +272,7 @@ void main() { final dataBaseMutationFunctions = locator(); final String getCommmentQuery = - PostQueries().getPostById('Ayush s postid'); + CommentQueries().getPostsComments('Ayush s postid'); when( dataBaseMutationFunctions.gqlAuthMutation(getCommmentQuery), ).thenAnswer( @@ -325,7 +324,7 @@ void main() { final dataBaseMutationFunctions = locator(); final String getCommmentQuery = - PostQueries().getPostById('Ayush s postid'); + CommentQueries().getPostsComments('Ayush s postid'); when( dataBaseMutationFunctions.gqlAuthMutation(getCommmentQuery), ).thenAnswer( diff --git a/test/service_tests/database_mutations_function_test.dart b/test/service_tests/database_mutations_function_test.dart index dff3fc097..061924ee3 100644 --- a/test/service_tests/database_mutations_function_test.dart +++ b/test/service_tests/database_mutations_function_test.dart @@ -66,6 +66,7 @@ void main() async { registerServices(); functionsClass = DataBaseMutationFunctions(); functionsClass.init(); + functionsClass.initClientNonAuth(); }); group('Database Mutation Functions Tests', () { diff --git a/test/service_tests/event_service_test.dart b/test/service_tests/event_service_test.dart index 21a590b82..0d8502de4 100644 --- a/test/service_tests/event_service_test.dart +++ b/test/service_tests/event_service_test.dart @@ -11,6 +11,7 @@ import 'package:talawa/utils/event_queries.dart'; import '../helpers/test_helpers.dart'; import '../helpers/test_locator.dart'; +import '../model_tests/user/user_info_test.dart'; void main() { testSetupLocator(); @@ -161,6 +162,9 @@ void main() { "name": "Organization Name", "description": "Sample organization description.", }, + "registrants": [ + testDataNotFromOrg, + ], } ], }, diff --git a/test/service_tests/post_service_test.dart b/test/service_tests/post_service_test.dart index ab1f60f7e..e6599d54a 100644 --- a/test/service_tests/post_service_test.dart +++ b/test/service_tests/post_service_test.dart @@ -76,12 +76,10 @@ void main() { group('Test PostService', () { test('Test refreshFeed method', () async { - final dataBaseMutationFunctions = locator(); final service = PostService(); // Populating refreshing feed await service.refreshFeed(); - verify(dataBaseMutationFunctions.refreshAccessToken('testtoken')) - .called(2); + verify(service.getPosts()).called(2); }); test('Test addNewPost method', () async { @@ -306,8 +304,7 @@ void main() { ); // Adjust the delay as needed // Verify that refresh token was called to check getPost method was called correctly. - verify(dataBaseMutationFunctions.refreshAccessToken('testtoken')) - .called(3); + verify(service.getPosts()).called(1); // Close the stream controller to avoid memory leaks await orgInfoStreamController.close(); diff --git a/test/service_tests/session_manager_test.dart b/test/service_tests/session_manager_test.dart new file mode 100644 index 000000000..1834c561c --- /dev/null +++ b/test/service_tests/session_manager_test.dart @@ -0,0 +1,41 @@ +import 'package:fake_async/fake_async.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +import 'package:talawa/locator.dart'; +import 'package:talawa/models/user/user_info.dart'; +import 'package:talawa/services/session_manager.dart'; + +import '../helpers/test_helpers.dart'; + +void main() { + setupLocator(); + group('Test Session Manger', () { + setUpAll(() { + getAndRegisterDatabaseMutationFunctions(); + }); + test('Test Session Manager Constructor', () { + SessionManager(); + }); + + test('initialize refresh interval', () { + userConfig.currentUser = User( + id: "99", + firstName: 'Azad', + refreshToken: 'refreshToken', + ); + fakeAsync((async) { + sessionManager.initializeSessionRefresher(); + async.elapse(const Duration(seconds: 600)); + }); + }); + + test('Refresh Interval is set.', () { + expect(sessionManager.refreshInterval, 600); + }); + + test('Refresh Token Method', () { + sessionManager.refreshSession(); + verify(databaseFunctions.refreshAccessToken("refreshToken")); + }); + }); +} diff --git a/test/service_tests/user_config_test.dart b/test/service_tests/user_config_test.dart index ef0bd9d78..4d0e6154f 100644 --- a/test/service_tests/user_config_test.dart +++ b/test/service_tests/user_config_test.dart @@ -11,6 +11,7 @@ import 'package:hive/hive.dart'; import 'package:mockito/mockito.dart'; import 'package:talawa/models/organization/org_info.dart'; import 'package:talawa/models/user/user_info.dart'; +import 'package:talawa/services/session_manager.dart'; import 'package:talawa/services/user_config.dart'; import 'package:talawa/widgets/custom_progress_dialog.dart'; @@ -31,6 +32,14 @@ class MockBox extends Mock implements Box {} // } // } +class MockSessionManger extends Mock implements SessionManager { + @override + Future refreshSession() { + // TODO: implement refreshSession + return Future.value(true); + } +} + void main() async { testSetupLocator(); @@ -45,6 +54,8 @@ void main() async { final urlBox = await Hive.openBox('url'); final orgBox = await Hive.openBox('currentOrg'); + getAndRegisterSessionManager(); + final mockUser = User( adminFor: [ OrgInfo(id: 'org1', name: 'orga'), @@ -138,6 +149,12 @@ void main() async { loggedIn = await model.userLoggedIn(); expect(loggedIn, false); + // print(model.currentUser); + }); + + test('test user loggedin when result throws an exception', () async { + final model = UserConfig(); + when( databaseFunctions.gqlAuthQuery( queries.fetchUserInfo, @@ -148,9 +165,8 @@ void main() async { }); // show couldn't update errorsnackbar. - loggedIn = await model.userLoggedIn(); + final loggedIn = await model.userLoggedIn(); expect(loggedIn, true); - // print(model.currentUser); }); test('Test for User log out method.', () async { diff --git a/test/utils/comment_queries_test.dart b/test/utils/comment_queries_test.dart index f73df7de7..d9b34b9b7 100644 --- a/test/utils/comment_queries_test.dart +++ b/test/utils/comment_queries_test.dart @@ -1,6 +1,3 @@ -// ignore_for_file: talawa_api_doc -// ignore_for_file: talawa_good_doc_comments - import 'package:flutter_test/flutter_test.dart'; import 'package:talawa/utils/comment_queries.dart'; @@ -8,18 +5,21 @@ void main() { group("Tests for comment_queries.dart", () { test("Check if getPostsComments works correctly", () { const data = """ - query{ - commentsByPost(id: "abc"){ - _id - text - createdAt + query { + post(id: "abc") + { _id, + comments{ + _id, + text, + createdAt creator{ firstName lastName } + } + } } - } - """; +"""; final fnData = CommentQueries().getPostsComments("abc"); expect(fnData, data); }); diff --git a/test/utils/post_queries_test.dart b/test/utils/post_queries_test.dart index 5f5029d24..203d193ab 100644 --- a/test/utils/post_queries_test.dart +++ b/test/utils/post_queries_test.dart @@ -54,6 +54,47 @@ void main() { expect(fnData, data); }); + test("Check if getPostById works correctly", () { + const data = """ + query { + post(id: "abc") + { + _id + text + createdAt + imageUrl + videoUrl + title + commentCount + likeCount + creator{ + _id + firstName + lastName + image + } + organization{ + _id + } + likedBy{ + _id + } + comments{ + _id, + text, + createdAt + creator{ + firstName + lastName + } + } + } + } +"""; + final fnData = PostQueries().getPostById("abc"); + expect(fnData, data); + }); + test("Check if removeLike works correctly", () { const data = """ mutation unlikePost(\$postID: ID!) { diff --git a/test/widget_tests/pre_auth_screens/splash_screen_test.dart b/test/widget_tests/pre_auth_screens/splash_screen_test.dart index 84c3c4856..b2d2f9924 100644 --- a/test/widget_tests/pre_auth_screens/splash_screen_test.dart +++ b/test/widget_tests/pre_auth_screens/splash_screen_test.dart @@ -3,9 +3,13 @@ // ignore_for_file: unused_import +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; import 'package:talawa/constants/custom_theme.dart'; import 'package:talawa/locator.dart'; import 'package:talawa/router.dart' as router; @@ -14,6 +18,25 @@ import 'package:talawa/splash_screen.dart'; import 'package:talawa/utils/app_localization.dart'; import 'package:talawa/view_model/lang_view_model.dart'; import 'package:talawa/views/base_view.dart'; +import 'package:uni_links/uni_links.dart'; +import 'package:uni_links_platform_interface/uni_links_platform_interface.dart'; + +// Define a mock class for the Uri class +class MockUri extends Mock implements Uri {} + +class MockUniLinksPlatform extends Mock + with MockPlatformInterfaceMixin + implements UniLinksPlatform { + @override + Future getInitialLink() async { + // TODO: implement getInitialLink + return Future(() => 'http://azad.com'); + } + + @override + // TODO: implement linkStream + Stream get linkStream => const Stream.empty(); +} Widget createSplashScreenLight({ThemeMode themeMode = ThemeMode.light}) => BaseView( @@ -65,10 +88,12 @@ Future main() async { setupLocator(); graphqlConfig.test(); + UniLinksPlatform.instance = MockUniLinksPlatform(); + group('Splash Screen Widget Test in light mode', () { testWidgets("Testing if Splash Screen shows up", (tester) async { await tester.pumpWidget(createSplashScreenLight()); - await tester.pumpAndSettle(); + await tester.pump(); final screenScaffoldWidget = find.byKey(const Key('SplashScreenScaffold')); expect(screenScaffoldWidget, findsOneWidget); @@ -78,10 +103,11 @@ Future main() async { .scaffoldBackgroundColor, TalawaTheme.lightTheme.scaffoldBackgroundColor, ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if app logo shows up", (tester) async { await tester.pumpWidget(createSplashScreenLight()); - await tester.pumpAndSettle(); + await tester.pump(); final logoWidget = find.byKey(const Key('LogoPainter')); expect(logoWidget, findsOneWidget); expect( @@ -91,10 +117,11 @@ Future main() async { SizeConfig.screenWidth! * 0.6, ), ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if app name shows up", (tester) async { await tester.pumpWidget(createSplashScreenLight()); - await tester.pumpAndSettle(); + await tester.pump(); final findAppNameWidget = find.text('TALAWA'); expect(findAppNameWidget, findsOneWidget); expect( @@ -109,10 +136,11 @@ Future main() async { (tester.firstWidget(findAppNameWidget) as Text).style!.fontSize, TalawaTheme.lightTheme.textTheme.headlineMedium!.fontSize, ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if provider text shows up", (tester) async { await tester.pumpWidget(createSplashScreenLight()); - await tester.pumpAndSettle(); + await tester.pump(); final findProviderTextWidget = find.text('from'); expect(findProviderTextWidget, findsOneWidget); expect( @@ -127,10 +155,11 @@ Future main() async { (tester.firstWidget(findProviderTextWidget) as Text).style!.fontSize, TalawaTheme.lightTheme.textTheme.bodySmall!.fontSize, ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if provider name shows up", (tester) async { await tester.pumpWidget(createSplashScreenLight()); - await tester.pumpAndSettle(); + await tester.pump(); final findProviderNameWidget = find.text('PALISADOES'); expect(findProviderNameWidget, findsOneWidget); expect( @@ -141,12 +170,13 @@ Future main() async { (tester.firstWidget(findProviderNameWidget) as Text).style!.fontFamily, TalawaTheme.lightTheme.textTheme.titleSmall!.fontFamily, ); + await tester.pump(const Duration(seconds: 1)); }); }); group('Splash Screen Widget Test in dark mode', () { testWidgets("Testing if Splash Screen shows up", (tester) async { await tester.pumpWidget(createSplashScreenDark()); - await tester.pumpAndSettle(); + await tester.pump(); final screenScaffoldWidget = find.byKey(const Key('SplashScreenScaffold')); expect(screenScaffoldWidget, findsOneWidget); @@ -156,10 +186,11 @@ Future main() async { .scaffoldBackgroundColor, TalawaTheme.darkTheme.scaffoldBackgroundColor, ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if app logo shows up", (tester) async { await tester.pumpWidget(createSplashScreenDark()); - await tester.pumpAndSettle(); + await tester.pump(); final logoWidget = find.byKey(const Key('LogoPainter')); expect(logoWidget, findsOneWidget); expect( @@ -169,10 +200,11 @@ Future main() async { SizeConfig.screenWidth! * 0.6, ), ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if app name shows up", (tester) async { await tester.pumpWidget(createSplashScreenDark()); - await tester.pumpAndSettle(); + await tester.pump(); final findAppNameWidget = find.text('TALAWA'); expect(findAppNameWidget, findsOneWidget); expect( @@ -187,10 +219,11 @@ Future main() async { (tester.firstWidget(findAppNameWidget) as Text).style!.fontSize, TalawaTheme.darkTheme.textTheme.headlineMedium!.fontSize, ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if provider text shows up", (tester) async { await tester.pumpWidget(createSplashScreenDark()); - await tester.pumpAndSettle(); + await tester.pump(); final findProviderTextWidget = find.text('from'); expect(findProviderTextWidget, findsOneWidget); expect( @@ -205,10 +238,11 @@ Future main() async { (tester.firstWidget(findProviderTextWidget) as Text).style!.fontSize, TalawaTheme.darkTheme.textTheme.bodySmall!.fontSize, ); + await tester.pump(const Duration(seconds: 1)); }); testWidgets("Testing if provider name shows up", (tester) async { await tester.pumpWidget(createSplashScreenDark()); - await tester.pumpAndSettle(); + await tester.pump(); final findProviderNameWidget = find.text('PALISADOES'); expect(findProviderNameWidget, findsOneWidget); expect( @@ -219,6 +253,7 @@ Future main() async { (tester.firstWidget(findProviderNameWidget) as Text).style!.fontFamily, TalawaTheme.darkTheme.textTheme.titleSmall!.fontFamily, ); + await tester.pump(const Duration(seconds: 1)); }); }); } From 3e47c2547eccd09763e296474bd7b9e477e1a826 Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 11 Feb 2024 22:25:45 +0530 Subject: [PATCH 6/8] fix conflict --- lib/services/task_service.dart | 167 --------------------------------- 1 file changed, 167 deletions(-) delete mode 100644 lib/services/task_service.dart diff --git a/lib/services/task_service.dart b/lib/services/task_service.dart deleted file mode 100644 index a6d3f83b5..000000000 --- a/lib/services/task_service.dart +++ /dev/null @@ -1,167 +0,0 @@ -import 'package:flutter/painting.dart'; -import 'package:graphql_flutter/graphql_flutter.dart'; -import 'package:talawa/locator.dart'; -import 'package:talawa/models/task/task_model.dart'; -import 'package:talawa/services/database_mutation_functions.dart'; -import 'package:talawa/services/user_config.dart'; -import 'package:talawa/utils/task_queries.dart'; - -/// Provides functions in the context of a Task. -/// -/// Services include: -/// * `getTasksForEvent` : to get the task for the event. -/// * `getTasksByUser` : to get the task added by the user. -/// * `editTask` : to edit the task added by the user. -/// * `createTask` : to create the task for the event. -/// * `deleteTask` : to delete the task added by the user. -class TaskService { - final _databaseMutationFunctions = locator(); - final _userConfig = locator(); - - /// callBack to NotifyListeners. - late VoidCallback callbackNotifyListeners; - - final _tasks = []; - - /// List of Tasks. - List get tasks => _tasks; - - /// Retrieves tasks for a specific event. - /// - /// **params**: - /// * `eventId`: The ID of the event for which tasks - /// are to be retrieved. - /// - /// **returns**: - /// None - Future getTasksForEvent(String eventId) async { - final res = await _databaseMutationFunctions - .gqlNonAuthQuery(TaskQueries.eventTasks(eventId)); - - if (res != null) { - _tasks.clear(); - final tasksList = res.data!['tasksByEvent'] as List; - tasksList.forEach((task) { - _tasks.add(Task.fromJson(task as Map)); - }); - } - } - - /// Retrieves tasks associated with the current user. - /// - /// **params**: - /// None - /// - /// **returns**: - /// None - Future getTasksByUser() async { - final res = await _databaseMutationFunctions - .gqlNonAuthQuery(TaskQueries.userTasks(_userConfig.currentUser.id!)); - - if (res != null) { - _tasks.clear(); - final tasksList = res.data!['tasksByUser'] as List; - tasksList.forEach((task) { - _tasks.add(Task.fromJson(task as Map)); - }); - } - } - - /// Edits a task with the provided details. - /// - /// **params**: - /// * `title`: The new title for the task. - /// * `description`: The new description for the task. - /// * `deadline`: The new deadline for the task. - /// * `taskId`: The ID of the task to be edited. - /// - /// **returns**: - /// * `Future`: A promise that will be fulfilled - /// with a boolean value indicating whether the task - /// was successfully edited. - Future editTask({ - required String title, - required String description, - required String deadline, - required String taskId, - }) async { - final res = await _databaseMutationFunctions.gqlAuthMutation( - TaskQueries.editTask( - title: title, - description: description, - deadline: deadline, - taskId: taskId, - ), - ); - - // if res is not null. - if (res != null) { - final updatedtaskJson = - (res as QueryResult).data!['updateTask'] as Map; - final index = _tasks.indexWhere((task) => task.id == taskId); - if (index == -1) return false; - final updatedtask = Task.fromJson(updatedtaskJson); - updatedtask.event.title = _tasks[index].event.title; - _tasks[index] = updatedtask; - callbackNotifyListeners(); - // if successfully updated then return true. - return true; - } - return false; - } - - /// Creates a new task with the provided details. - /// - /// **params**: - /// * `title`: The title for the new task. - /// * `description`: The description for the new task. - /// * `deadline`: The deadline for the new task. - /// * `eventId`: The ID of the event associated with - /// the new task. - /// - /// **returns**: - /// * `Future`: A promise that will be fulfilled - /// with a boolean value indicating whether the task - /// was successfully created. - Future createTask({ - required String title, - required String description, - required String deadline, - required String eventId, - }) async { - final res = await _databaseMutationFunctions.gqlAuthMutation( - TaskQueries.addTask( - title: title, - description: description, - deadline: deadline, - eventId: eventId, - ), - ); - - if (res != null) { - final task = - (res as QueryResult).data!['createTask'] as Map; - _tasks.add(Task.fromJson(task)); - callbackNotifyListeners(); - return true; - } - return false; - } - - /// Deletes a task given its ID and the creator's ID. - /// - /// **params**: - /// * `taskId`: The ID of the task to be deleted. - /// * `creatorId`: The ID of the task's creator. - /// - /// **returns**: - /// None - Future deleteTask(String taskId, String creatorId) async { - if (creatorId == _userConfig.currentUser.id) { - final res = await _databaseMutationFunctions - .gqlAuthMutation(TaskQueries.deleteTask(taskId)); - if (res != null) _tasks.removeWhere((task) => task.id == taskId); - } - } -} - From c192ea69b42aad0b91539ca824c554c9af7a53f4 Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 11 Feb 2024 22:27:52 +0530 Subject: [PATCH 7/8] Squashed commit of the following: commit 69e6513a90284a61a4713eb21244b45fa717aba2 Author: Shaik Azad <120930148+Azad99-9@users.noreply.github.com> Date: Sun Feb 11 20:17:19 2024 +0530 Created Session Management. (#2362) * feat: efficient session management * chore: run check ignore * Revert "chore: run check ignore" This reverts commit be7e49f1d03a6a047417af98f327ea49ade5f807. * chore fix: run check ignore * feat: added new package fake_async * chore: fixed codecov drop * Update README.md * Deprecate Google Maps Integration (#2363) * Post comments were invisible in Individual Post Page with Image (#2350) * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment * Bump syncfusion_flutter_datepicker from 24.1.47 to 24.2.3 (#2365) Bumps [syncfusion_flutter_datepicker](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.47 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_datepicker dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump syncfusion_flutter_calendar from 24.1.45 to 24.2.3 (#2367) Bumps [syncfusion_flutter_calendar](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.45 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_calendar dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fixed requested changes * pulled latest upstream --------- Signed-off-by: dependabot[bot] Co-authored-by: Peter Harrison <16875803+palisadoes@users.noreply.github.com> Co-authored-by: Parag Gupta <103507835+Dante291@users.noreply.github.com> Co-authored-by: Shivam Gupta Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit 1110aef0987e1b37ff6c6351fcb30be2d372548c Author: Crystian I <60124535+Cioppolo14@users.noreply.github.com> Date: Tue Feb 6 21:38:27 2024 -0500 Update pull-request-target.yml commit 10d58db4f79739fa59f5a83f37034fa4a62d3c65 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Feb 5 02:40:39 2024 -0800 Bump syncfusion_flutter_calendar from 24.1.45 to 24.2.3 (#2367) Bumps [syncfusion_flutter_calendar](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.45 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_calendar dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit 7bfbaef41d77fd8a34a64d6b78059e3d71f09df8 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Feb 5 02:04:46 2024 -0800 Bump syncfusion_flutter_datepicker from 24.1.47 to 24.2.3 (#2365) Bumps [syncfusion_flutter_datepicker](https://github.com/syncfusion/flutter-widgets/tree/master/packages) from 24.1.47 to 24.2.3. - [Release notes](https://github.com/syncfusion/flutter-widgets/releases) - [Commits](https://github.com/syncfusion/flutter-widgets/commits/HEAD/packages) --- updated-dependencies: - dependency-name: syncfusion_flutter_datepicker dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit 38682c8319b7b3a82e62f87e0b37e139a65d95bd Author: Shivam Gupta Date: Sun Feb 4 01:16:07 2024 +0530 Post comments were invisible in Individual Post Page with Image (#2350) * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment * Fixed Comment --- lib/services/task_service.dart | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/services/task_service.dart diff --git a/lib/services/task_service.dart b/lib/services/task_service.dart new file mode 100644 index 000000000..e69de29bb From bc84396aac39bd7c14b74d6e87a1907981a59333 Mon Sep 17 00:00:00 2001 From: Ankit varshney Date: Sun, 11 Feb 2024 23:19:57 +0530 Subject: [PATCH 8/8] fix failing test --- lib/services/task_service.dart | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/services/task_service.dart diff --git a/lib/services/task_service.dart b/lib/services/task_service.dart deleted file mode 100644 index e69de29bb..000000000