import 'dart:async'; import 'dart:developer'; import 'package:dio/dio.dart'; import 'package:eatvio_app/core/locator_service.dart'; import 'package:eatvio_app/core/utils/date_time_utils.dart'; import 'package:eatvio_app/features/diets/services/diet_service.dart'; import 'package:eatvio_app/features/feed/services/feed_service.dart'; import 'package:eatvio_app/features/profile/services/profile_service.dart'; sealed class TestCases { String get name => throw UnimplementedError(); Future run({required String baseUrl}) async => throw UnimplementedError(); } class Test850task implements TestCases { @override String get name => 'task #850'; @override Future run({required String baseUrl}) async { try { // get all of needed services final dio = sl(); final feedService = FeedService(dio, baseUrl: baseUrl); final profileService = ProfileService(dio, baseUrl: baseUrl); final dietsService = DietService(dio, baseUrl: baseUrl); // get all of needed data final dietsPaginationModel = await feedService.getDiets(page: 1); final chosenDietsPaginationModel = await profileService.getChosenDiets(); final lastChosenDiet = chosenDietsPaginationModel.diets.firstOrNull; final today = DateTime.now(); final yesterday = today.subtract(const Duration(days: 1)); final tomorrow = today.add(const Duration(days: 1)); // run test case for (final diet in dietsPaginationModel.data) { if (!diet.author.authorIsMe) { if (lastChosenDiet?.state == 'started' || lastChosenDiet?.state == 'inited') { try { await dietsService.cancelDiet(id: lastChosenDiet?.dietId ?? 0); } catch (e) { log('unexpected error7: $e'); return false; } await Future.delayed(Duration(seconds: 3)); } try { await dietsService.startDiet( id: diet.id, body: { 'date': yesterday.format('yyyy-MM-dd'), }, ); return false; } catch (e) { log('expect ot have error: $e'); } // test start diet with correct date try { await dietsService.startDiet( id: diet.id, body: { 'date': today.format('yyyy-MM-dd'), }, ); } catch (e) { log('unexpected error2: $e'); return false; } // test cancelation of diet try { await dietsService.cancelDiet(id: diet.id); } catch (e) { log('unexpected error3: $e'); return false; } await Future.delayed(Duration(seconds: 3)); // test start diet with correct date try { await dietsService.startDiet( id: diet.id, body: { 'date': tomorrow.format('yyyy-MM-dd'), }, ); } catch (e) { log('unexpected error4: $e'); return false; } // test cancelation of diet try { await dietsService.cancelDiet(id: diet.id); } catch (e) { log('unexpected error5: $e'); } break; } } return true; } catch (e) { log('unexpected error6: $e'); return false; } } }