From 5f30aaeb2ab243882013db0219b879123ff7b349 Mon Sep 17 00:00:00 2001 From: misha Date: Wed, 11 Feb 2026 16:23:48 +0300 Subject: [PATCH] feat(my_diets): merge conflict fixes --- .../presentation/create_diet_screen.dart | 87 ++++++++++++------- .../presentation/cubit/create_diet_cubit.dart | 8 +- .../presentation/cubit/create_diet_state.dart | 15 ++-- .../repositories/create_diet_repository.dart | 13 ++- .../services/create_diet_service.dart | 6 +- .../presentation/cubit/my_diets_cubit.dart | 8 +- .../presentation/my_diets_screen.dart | 3 +- .../presentation/widgets/my_diet_widget.dart | 74 ++++++---------- .../presentation/widgets/my_diets_tab.dart | 51 ++++++----- .../create_diet/integration_widget_test.dart | 2 +- .../cubit/create_diet_cubit_test.dart | 2 +- .../create_diet_repository_test.dart | 20 +++-- .../cubit/my_diets_cubit_test.dart | 8 +- .../widgets/basic_widget_test.dart | 6 +- .../fixtures/doubles/create_diet_doubles.dart | 9 +- 15 files changed, 173 insertions(+), 139 deletions(-) diff --git a/lib/features/create_diet/presentation/create_diet_screen.dart b/lib/features/create_diet/presentation/create_diet_screen.dart index 6596fd87..112e413d 100644 --- a/lib/features/create_diet/presentation/create_diet_screen.dart +++ b/lib/features/create_diet/presentation/create_diet_screen.dart @@ -180,41 +180,67 @@ class _CreateDietScreenContentState extends State { padding: const EdgeInsets.symmetric(horizontal: 16.0), child: Column( children: [ - CustomOutlinedButton( - onPressed: () async { - if (widget.diet != null && widget.isEditing == true) { - if (state.dietState == DietState.draft) { - context.read().setDietState(DietState.active); + if (state.isDietBeingEdited) + const Loader() + else + CustomOutlinedButton( + onPressed: () async { + if (state.isDietPublishing) return; + if (widget.diet != null && widget.isEditing == true) { + final dietState = state.dietState; + if (dietState == DietState.draft) { + context.read().setDietState(DietState.active); + } else { + context.read().setDietState(DietState.draft); + } + final result = await context.read().updateDiet(widget.diet!.id); + if (result == 'error') { + if (!context.mounted) return; + showErrorDialog(context, title: '${s.could_not_update_diet} ${state.dietData.name}'); + return; + } + if (dietState == DietState.draft) { + Future.delayed(const Duration(milliseconds: 500), () { + if (!context.mounted) return; + context.pop(); + showBottomSheetWithBlur( + userRootNavigator: true, + context: context, + child: SuccessPublishedDietOrPlanBottomSheet(title: state.dietData.name ?? 'Диета'), + ); + }); + } else { + Future.delayed(const Duration(milliseconds: 500), () { + if (!context.mounted) return; + context.pop(); + showBottomSheetWithBlur( + context: context, + child: SuccessPublishedDietOrPlanBottomSheet(title: state.dietData.name ?? 'Диета', isDrafted: true), + ); + }); + } } else { - context.read().setDietState(DietState.draft); + if (state.dietState != DietState.draft) { + context.read().setDietState(DietState.draft); + } + final result = await context.read().createDiet(); + if (result == 'error') { + if (!context.mounted) return; + showErrorDialog(context, title: '${s.could_not_publish_diet} ${state.dietData.name}'); + } } - final result = await context.read().updateDiet(widget.diet!.id); - if (result == 'error') { - if (!context.mounted) return; - showErrorDialog(context, title: '${s.could_not_update_diet} ${state.dietData.name}'); - } - } else { - if (state.dietState != DietState.draft) { - context.read().setDietState(DietState.draft); - } - final result = await context.read().createDiet(); - if (result == 'error') { - if (!context.mounted) return; - showErrorDialog(context, title: '${s.could_not_publish_diet} ${state.dietData.name}'); - } - } - }, - text: state.dietState == DietState.draft && widget.isEditing == true ? s.publish : "В черновик", - height: 52, - buttonTextStyle: TextStyles.textMSemibold.copyWith(color: appTheme.gray), - buttonStyle: ButtonStyle( - side: const WidgetStatePropertyAll(BorderSide.none), - backgroundColor: WidgetStatePropertyAll(appTheme.dottedBorder), + }, + text: state.dietState == DietState.draft && widget.isEditing == true ? s.publish : "В черновик", + height: 52, + buttonTextStyle: TextStyles.textMSemibold.copyWith(color: appTheme.gray), + buttonStyle: ButtonStyle( + side: const WidgetStatePropertyAll(BorderSide.none), + backgroundColor: WidgetStatePropertyAll(appTheme.dottedBorder), + ), ), - ), const SizedBox(height: 12), CustomOutlinedButton( - onPressed: state.isDietPublishing + onPressed: state.isDietPublishing || state.isDietBeingEdited ? () {} : () async { final diet = await context.read().getDietForPreview(); @@ -238,6 +264,7 @@ class _CreateDietScreenContentState extends State { else CustomOutlinedButton( onPressed: () async { + if (state.isDietBeingEdited) return; if (widget.diet != null && widget.isEditing == true) { final result = await context.read().updateDiet(widget.diet!.id); if (result == 'error') { diff --git a/lib/features/create_diet/presentation/cubit/create_diet_cubit.dart b/lib/features/create_diet/presentation/cubit/create_diet_cubit.dart index 989ea170..9c460720 100644 --- a/lib/features/create_diet/presentation/cubit/create_diet_cubit.dart +++ b/lib/features/create_diet/presentation/cubit/create_diet_cubit.dart @@ -66,8 +66,7 @@ class CreateDietCubit extends Cubit { imageUrl: appConfig.buildType == AppBuildType.tests ? null : imageUrl, ), ); - emit(state.copyWith(dietState: diet.state, durationIndex: durationValues.indexOf(diet.duration))); - emit(state.copyWith(isLoading: true)); + emit(state.copyWith(isLoading: false, isDietBeingEdited: false, dietState: diet.state, durationIndex: durationValues.indexOf(diet.duration))); } void setDetails(String text) { @@ -356,9 +355,12 @@ class CreateDietCubit extends Cubit { } Future updateDiet(int dietId) async { + emit(state.copyWith(isDietBeingEdited: true)); if ([DietState.active, DietState.personal].contains(state.dietState) && !_isFromValid()) { + emit(state.copyWith(isDietBeingEdited: false)); return 'error'; } else if (!_isFormValidForDraft()) { + emit(state.copyWith(isDietBeingEdited: false)); return 'error'; } @@ -380,10 +382,12 @@ class CreateDietCubit extends Cubit { details: state.dietData.details?.isEmpty ?? true ? null : state.dietData.details, dailySchedule: state.dietData.dailySchedule, ); + emit(state.copyWith(isDietBeingEdited: false)); return null; } catch (e, st) { await Sentry.captureException(e, stackTrace: st); log(e.toString(), stackTrace: st); + emit(state.copyWith(isDietBeingEdited: false)); return 'error'; } } diff --git a/lib/features/create_diet/presentation/cubit/create_diet_state.dart b/lib/features/create_diet/presentation/cubit/create_diet_state.dart index dc280baa..c55f6b91 100644 --- a/lib/features/create_diet/presentation/cubit/create_diet_state.dart +++ b/lib/features/create_diet/presentation/cubit/create_diet_state.dart @@ -27,12 +27,11 @@ abstract class CreateDietState with _$CreateDietState { }) = _CreateDietState; factory CreateDietState.initial() => CreateDietState( - dailyScheduleErrors: List.filled(21, ''), - isDietPublishing: false, - isLoading: false, - errorMessage: null, - dietData: CreateDietModel( - type: Map.fromIterable(dietTypeValues, value: (element) => false), - ), - ); + dailyScheduleErrors: List.filled(21, ''), + isDietPublishing: false, + isLoading: false, + errorMessage: null, + isDietBeingEdited: false, + dietData: CreateDietModel(type: Map.fromIterable(dietTypeValues, value: (element) => false)), + ); } diff --git a/lib/features/create_diet/repositories/create_diet_repository.dart b/lib/features/create_diet/repositories/create_diet_repository.dart index d63be30f..feb37496 100644 --- a/lib/features/create_diet/repositories/create_diet_repository.dart +++ b/lib/features/create_diet/repositories/create_diet_repository.dart @@ -106,7 +106,7 @@ class CreateDietRepository { } } - Future updateDiet({ + Future updateDiet({ required int dietId, required DietState state, String? name, @@ -164,12 +164,17 @@ class CreateDietRepository { try { switch (state) { case DietState.active: - return await createDietService.updatePublished(diet: dietId, formData: formData); + final response = await createDietService.updatePublished(diet: dietId, formData: formData); + return response.response.statusCode ?? 0; case DietState.draft: - return await createDietService.updateDrafted(diet: dietId, formData: formData); + final response = await createDietService.updateDrafted(diet: dietId, formData: formData); + return response.response.statusCode ?? 0; case DietState.personal: - return await createDietService.updatePersonal(diet: dietId, formData: formData); + final response = await createDietService.updatePersonal(diet: dietId, formData: formData); + return response.response.statusCode ?? 0; } + } on DioException catch (e) { + return e.response?.statusCode ?? 0; } catch (e, s) { await Sentry.captureException(e, stackTrace: s); rethrow; diff --git a/lib/features/create_diet/services/create_diet_service.dart b/lib/features/create_diet/services/create_diet_service.dart index 3c0d8923..cc010293 100644 --- a/lib/features/create_diet/services/create_diet_service.dart +++ b/lib/features/create_diet/services/create_diet_service.dart @@ -28,21 +28,21 @@ abstract class CreateDietService { @POST('/api/diets/update/published/{diet}') @MultiPart() - Future updatePublished({ + Future updatePublished({ @Path() required int diet, @Body() required FormData formData, }); @POST('/api/diets/update/drafted/{diet}') @MultiPart() - Future updateDrafted({ + Future updateDrafted({ @Path() required int diet, @Body() required FormData formData, }); @POST('/api/diets/update/personalized/{diet}') @MultiPart() - Future updatePersonal({ + Future updatePersonal({ @Path() required int diet, @Body() required FormData formData, }); diff --git a/lib/features/my_diets/presentation/cubit/my_diets_cubit.dart b/lib/features/my_diets/presentation/cubit/my_diets_cubit.dart index 8a93ec17..398fdb63 100644 --- a/lib/features/my_diets/presentation/cubit/my_diets_cubit.dart +++ b/lib/features/my_diets/presentation/cubit/my_diets_cubit.dart @@ -291,16 +291,16 @@ class MyDietsCubit extends Cubit { } } - Future publishDiet(int dietId) async { + Future publishDiet(int dietId) async { try { - await createDietRepository.updateDiet( + final statusCode = await createDietRepository.updateDiet( dietId: dietId, state: DietState.active, ); - return true; + return statusCode; } catch (e, st) { log(e.toString(), stackTrace: st); - return false; + return 0; } } diff --git a/lib/features/my_diets/presentation/my_diets_screen.dart b/lib/features/my_diets/presentation/my_diets_screen.dart index 51f7ee39..1c5bad54 100644 --- a/lib/features/my_diets/presentation/my_diets_screen.dart +++ b/lib/features/my_diets/presentation/my_diets_screen.dart @@ -142,7 +142,8 @@ class MyDietsScreenContent extends StatelessWidget { } final diets = switch (state.selectedStateIndex) { - 1 => state.personalDiets, + 2 => state.personalDiets, + 1 => state.draftDiets, _ => state.activeDiets, }; diff --git a/lib/features/my_diets/presentation/widgets/my_diet_widget.dart b/lib/features/my_diets/presentation/widgets/my_diet_widget.dart index e2dec663..019cc487 100644 --- a/lib/features/my_diets/presentation/widgets/my_diet_widget.dart +++ b/lib/features/my_diets/presentation/widgets/my_diet_widget.dart @@ -36,8 +36,11 @@ class MyDietWidget extends StatefulWidget { } class _MyDietWidgetState extends State { - void _editDiet(Diet diet) { - GoRouter.of(context).pushNamed(CreateDietScreen.name, extra: {'diet': diet, 'isEditing': true}); + + Future _editDiet(Diet diet, BuildContext context) async{ + await GoRouter.of(context).pushNamed(CreateDietScreen.name, extra: {'diet': diet, 'isEditing': true}); + if (!context.mounted) return; + await context.read().loadAllDiets(); } void _suggestDiet(Diet diet) { @@ -49,16 +52,19 @@ class _MyDietWidgetState extends State { } Future _publishDiet(Diet diet, BuildContext context) async { - final result = await context.read().publishDiet(widget.diet.id); - if (result) { - if (!context.mounted) return; - showBottomSheetWithBlur( - context: context, - child: SuccessPublishedDietOrPlanBottomSheet(title: widget.diet.name), - ); - await context.read().loadAllDiets(); - } else { - showErrorToast('Произошла ошибка. Попробуйте ещё раз через некоторое время'); + final statusCode = await context.read().publishDiet(widget.diet.id); + switch (statusCode) { + case 201: + if (!context.mounted) return; + showBottomSheetWithBlur( + context: context, + child: SuccessPublishedDietOrPlanBottomSheet(title: widget.diet.name), + ); + await context.read().loadAllDiets(); + case 422: + showErrorToast('Пожалуйста, заполните все обязательные поля для публикации'); + default: + showErrorToast('Произошла ошибка. Попробуйте ещё раз через некоторое время'); } } @@ -169,35 +175,8 @@ class _MyDietWidgetState extends State { padding: const EdgeInsets.symmetric(horizontal: 16.0), child: Column( children: [ - // Верхний ряд: Удалить + Редактировать (или + Поделиться для опубликованных) Row( children: [ - // Кнопка удаления (слева) - CustomOutlinedButton( - onPressed: () async { - final result = await context.read().deleteDiet(widget.diet.id); - if (result) { - if (!context.mounted) return; - showBottomSheetWithBlur( - context: context, - child: DietDeletedBottomSheet(title: widget.diet.name), - ); - await context.read().loadAllDiets(); - } - }, - height: 52, - width: 52, - leftIcon: SvgPicture.asset('assets/icons/trash_can.svg', width: 20, height: 20), - buttonTextStyle: TextStyles.textMSemibold.copyWith(color: appTheme.red), - buttonStyle: ButtonStyle( - shape: WidgetStatePropertyAll(RoundedRectangleBorder(borderRadius: BorderRadius.circular(20))), - backgroundColor: WidgetStatePropertyAll(appTheme.lightGray0), - side: const WidgetStatePropertyAll(BorderSide.none), - ), - text: '', - ), - const SizedBox(width: 6), - // Кнопка редактирования (центр) Expanded( child: CustomOutlinedButton( onPressed: () async { @@ -206,20 +185,23 @@ class _MyDietWidgetState extends State { } else if (state.selectedStateIndex == 2) { _suggestDiet(widget.diet); } else { - _editDiet(widget.diet); - } + _editDiet(widget.diet, context); + } + }, + text: switch (state.selectedStateIndex) { + 1 => s.publish, + 2 => s.toOffer, + _ => s.edit, }, - text: s.edit, height: 52, - buttonTextStyle: TextStyles.textMSemibold.copyWith(color: appTheme.black), + buttonTextStyle: TextStyles.textMSemibold.copyWith(color: appTheme.whiteA700), buttonStyle: ButtonStyle( shape: WidgetStatePropertyAll(RoundedRectangleBorder(borderRadius: BorderRadius.circular(20))), - backgroundColor: WidgetStatePropertyAll(appTheme.lightGray0), + backgroundColor: WidgetStatePropertyAll(appTheme.blueA400), side: const WidgetStatePropertyAll(BorderSide.none), ), ), ), - // Кнопка поделиться (справа) для опубликованных if (state.selectedStateIndex == 0) ...[ const SizedBox(width: 6), CustomOutlinedButton( @@ -315,7 +297,7 @@ class _MyDietWidgetState extends State { if (state.selectedStateIndex == 0) { _unpublishDiet(widget.diet, context); } else { - _editDiet(widget.diet); + _editDiet(widget.diet, context); } }, text: switch (state.selectedStateIndex) { diff --git a/lib/features/my_diets/presentation/widgets/my_diets_tab.dart b/lib/features/my_diets/presentation/widgets/my_diets_tab.dart index be6a0d95..a653441c 100644 --- a/lib/features/my_diets/presentation/widgets/my_diets_tab.dart +++ b/lib/features/my_diets/presentation/widgets/my_diets_tab.dart @@ -21,6 +21,7 @@ class _MyDietsTabState extends State { final s = S.of(context); if (tabTitles.isEmpty) { tabTitles.add(s.published); + tabTitles.add(s.drafted); tabTitles.add(s.personal); } super.didChangeDependencies(); @@ -30,29 +31,37 @@ class _MyDietsTabState extends State { Widget build(BuildContext context) { return BlocBuilder( builder: (context, state) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: Container( - height: 48, - decoration: BoxDecoration( - color: appTheme.whiteA700, - borderRadius: BorderRadius.circular(100), - ), - padding: const EdgeInsets.all(4), + return Align( + alignment: Alignment.centerLeft, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, child: Row( children: [ - ...List.generate( - 2, - (index) => Expanded( - child: AnimatedOptionButton( - textStyle: TextStyles.textSMedium, - isSelected: state.selectedStateIndex == index, - text: tabTitles[index], - onTap: () { - widget.additionalOnTap?.call(); - context.read().changeSelectedStateIndex(index); - }, - ), + Container( + width: 484, + height: 48, + decoration: BoxDecoration( + color: appTheme.whiteA700, + borderRadius: BorderRadius.circular(100), + ), + padding: const EdgeInsets.all(4), + child: Row( + children: [ + ...List.generate( + 3, + (index) => Expanded( + child: AnimatedOptionButton( + textStyle: TextStyles.textSMedium, + isSelected: state.selectedStateIndex == index, + text: tabTitles[index], + onTap: () { + widget.additionalOnTap?.call(); + context.read().changeSelectedStateIndex(index); + }, + ), + ), + ), + ], ), ), ], diff --git a/test/features/create_diet/integration_widget_test.dart b/test/features/create_diet/integration_widget_test.dart index 541056f6..0d8c7b31 100644 --- a/test/features/create_diet/integration_widget_test.dart +++ b/test/features/create_diet/integration_widget_test.dart @@ -326,7 +326,7 @@ void main() { expect(find.byType(DietTypeChoiceWidget), findsOneWidget); expect(find.byType(DietImagePickerWidget), findsOneWidget); // Action buttons - expect(find.byType(CustomOutlinedButton), findsNWidgets(2)); + expect(find.byType(CustomOutlinedButton), findsNWidgets(3)); }); }); } diff --git a/test/features/create_diet/presentation/cubit/create_diet_cubit_test.dart b/test/features/create_diet/presentation/cubit/create_diet_cubit_test.dart index 8cba4984..5feac64f 100644 --- a/test/features/create_diet/presentation/cubit/create_diet_cubit_test.dart +++ b/test/features/create_diet/presentation/cubit/create_diet_cubit_test.dart @@ -432,7 +432,7 @@ void main() { await cubit.setInitialData(testDiet); expect(cubit.dietId, 1); - expect(cubit.state.isDietBeingEdited, true); + expect(cubit.state.isDietBeingEdited, false); expect(cubit.state.dietData.name, 'Test Diet'); expect(cubit.state.dietData.details, 'Test details'); expect(cubit.state.dietData.duration, 7); diff --git a/test/features/create_diet/repositories/create_diet_repository_test.dart b/test/features/create_diet/repositories/create_diet_repository_test.dart index 602097ad..f80d4eb5 100644 --- a/test/features/create_diet/repositories/create_diet_repository_test.dart +++ b/test/features/create_diet/repositories/create_diet_repository_test.dart @@ -6,10 +6,16 @@ import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; +import 'package:retrofit/dio.dart'; import 'package:retrofit/retrofit.dart'; import 'create_diet_repository_test.mocks.dart'; +HttpResponse _okResponse() => HttpResponse( + null, + Response(requestOptions: RequestOptions(path: ''), statusCode: 200), + ); + @GenerateNiceMocks([MockSpec()]) void main() { group('CreateDietRepository', () { @@ -152,7 +158,7 @@ void main() { final testFile = File('${Directory.systemTemp.path}/test_file.jpg'); await testFile.writeAsString('test content'); - when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => Future.value()); + when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => _okResponse()); await repository.updateDiet(dietId: dietId, state: DietState.active, name: 'Updated Diet', duration: 14, details: 'Updated details', image: testFile); @@ -167,7 +173,7 @@ void main() { test('updateDiet - обновляет черновик диеты (draft)', () async { const dietId = 1; - when(mockService.updateDrafted(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => Future.value()); + when(mockService.updateDrafted(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => _okResponse()); await repository.updateDiet(dietId: dietId, state: DietState.draft, name: 'Updated Diet'); @@ -177,7 +183,7 @@ void main() { test('updateDiet - обновляет персональную диету (personal)', () async { const dietId = 1; - when(mockService.updatePersonal(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => Future.value()); + when(mockService.updatePersonal(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => _okResponse()); await repository.updateDiet(dietId: dietId, state: DietState.personal, name: 'Updated Diet'); @@ -242,7 +248,7 @@ void main() { ], ]; - when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => Future.value()); + when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => _okResponse()); await repository.updateDiet( dietId: dietId, @@ -257,7 +263,7 @@ void main() { test('updateDiet - обновляет диету без image', () async { const dietId = 1; - when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => Future.value()); + when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => _okResponse()); await repository.updateDiet( dietId: dietId, @@ -273,7 +279,7 @@ void main() { test('updateDiet - обновляет диету только с типами', () async { const dietId = 1; - when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => Future.value()); + when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => _okResponse()); await repository.updateDiet( dietId: dietId, @@ -305,7 +311,7 @@ void main() { ], ]; - when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => Future.value()); + when(mockService.updatePublished(diet: dietId, formData: anyNamed('formData'))).thenAnswer((_) async => _okResponse()); await repository.updateDiet( dietId: dietId, diff --git a/test/features/my_diets/presentation/cubit/my_diets_cubit_test.dart b/test/features/my_diets/presentation/cubit/my_diets_cubit_test.dart index 66526ea4..bb990eec 100644 --- a/test/features/my_diets/presentation/cubit/my_diets_cubit_test.dart +++ b/test/features/my_diets/presentation/cubit/my_diets_cubit_test.dart @@ -269,11 +269,11 @@ void main() { when(mockCreateDietRepository.updateDiet( dietId: 1, state: DietState.active, - )).thenAnswer((_) async => {}); + )).thenAnswer((_) async => 200); final result = await myDietsCubit!.publishDiet(1); - expect(result, true); + expect(result, 200); verify(mockCreateDietRepository.updateDiet(dietId: 1, state: DietState.active)).called(1); }); @@ -290,7 +290,7 @@ void main() { final result = await myDietsCubit!.publishDiet(1); - expect(result, false); + expect(result, 0); }); test('unpublishDiet - снимает диету с публикации', () async { @@ -302,7 +302,7 @@ void main() { when(mockCreateDietRepository.updateDiet( dietId: 1, state: DietState.draft, - )).thenAnswer((_) async => {}); + )).thenAnswer((_) async => 200); final result = await myDietsCubit!.unpublishDiet(1); diff --git a/test/features/my_diets/presentation/widgets/basic_widget_test.dart b/test/features/my_diets/presentation/widgets/basic_widget_test.dart index ef674d0f..9afb6818 100644 --- a/test/features/my_diets/presentation/widgets/basic_widget_test.dart +++ b/test/features/my_diets/presentation/widgets/basic_widget_test.dart @@ -106,7 +106,7 @@ void main() { // Assert expect(find.byType(MyDietsTab), findsOneWidget); - expect(find.byType(AnimatedOptionButton), findsNWidgets(2)); + expect(find.byType(AnimatedOptionButton), findsNWidgets(3)); }); testWidgets('should handle tab selection in MyDietsTab', (WidgetTester tester) async { @@ -119,7 +119,7 @@ void main() { // Act - Find and tap the second tab final tabButtons = find.byType(AnimatedOptionButton); - expect(tabButtons, findsNWidgets(2)); + expect(tabButtons, findsNWidgets(3)); // Tap the second tab (index 1) await tester.tap(tabButtons.at(1)); @@ -221,7 +221,7 @@ void main() { // Assert expect(find.byType(MyDietsTab), findsOneWidget); - expect(find.byType(AnimatedOptionButton), findsNWidgets(2)); + expect(find.byType(AnimatedOptionButton), findsNWidgets(3)); }); testWidgets('should handle MyDietsTab additionalOnTap callback', (WidgetTester tester) async { diff --git a/test/fixtures/doubles/create_diet_doubles.dart b/test/fixtures/doubles/create_diet_doubles.dart index 08b16861..52645ae5 100644 --- a/test/fixtures/doubles/create_diet_doubles.dart +++ b/test/fixtures/doubles/create_diet_doubles.dart @@ -104,7 +104,7 @@ class FixtureCreateDietRepository extends CreateDietRepository { } @override - Future updateDiet({ + Future updateDiet({ required int dietId, required DietState state, String? name, @@ -131,6 +131,7 @@ class FixtureCreateDietRepository extends CreateDietRepository { if (lightType != null) 'light': lightType == '1', }, }); + return 201; } } @@ -166,17 +167,17 @@ class _NoopCreateDietService implements CreateDietService { } @override - Future updateDrafted({required int diet, required FormData formData}) { + Future updateDrafted({required int diet, required FormData formData}) { throw UnimplementedError(); } @override - Future updatePersonal({required int diet, required FormData formData}) { + Future updatePersonal({required int diet, required FormData formData}) { throw UnimplementedError(); } @override - Future updatePublished({required int diet, required FormData formData}) { + Future updatePublished({required int diet, required FormData formData}) { throw UnimplementedError(); } }