chore(version): update app version to 1.3.5+85 and improve test coverage reporting in CI

This commit is contained in:
mso7nueh
2025-12-08 11:19:08 +03:00
parent abe4985f0e
commit c2a506cdbf
148 changed files with 12395 additions and 1889 deletions

View File

@@ -0,0 +1,135 @@
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/features/my_finance/models/payment_url_model.dart';
import 'package:eatvio_app/features/my_finance/presentation/cubit/user_cards_cubit/user_cards_cubit.dart';
import 'package:eatvio_app/features/my_finance/presentation/cubit/user_cards_cubit/user_cards_state.dart';
import 'package:eatvio_app/features/my_finance/presentation/widgets/card_widget.dart';
import 'package:eatvio_app/generated/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'card_widget_test.mocks.dart';
@GenerateNiceMocks([MockSpec<UserCardsCubit>()])
void main() {
group('CardWidget', () {
late MockUserCardsCubit mockCubit;
setUp(() {
mockCubit = MockUserCardsCubit();
});
Widget createTestWidget({
bool isSelected = false,
bool enabledAddCard = false,
int cardId = 0,
String cardNumber = '',
}) {
return MaterialApp(
theme: ThemeHelper().themeData(),
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [Locale('ru'), Locale('en')],
locale: const Locale('ru'),
home: BlocProvider<UserCardsCubit>.value(
value: mockCubit,
child: Scaffold(
body: CardWidget(
isSelected: isSelected,
enabledAddCard: enabledAddCard,
cardId: cardId,
cardNumber: cardNumber,
),
),
),
);
}
testWidgets('displays card widget with card number', (tester) async {
when(mockCubit.stream).thenAnswer((_) => Stream.value(UserCardsState()));
await tester.pumpWidget(createTestWidget(
cardId: 1,
cardNumber: '1234 5678 9012 3456',
));
await tester.pumpAndSettle();
expect(find.byType(CardWidget), findsOneWidget);
expect(find.text('1234 5678 9012 3456'), findsOneWidget);
});
testWidgets('displays add card widget when enabledAddCard is true', (tester) async {
when(mockCubit.stream).thenAnswer((_) => Stream.value(UserCardsState()));
await tester.pumpWidget(createTestWidget(
enabledAddCard: true,
));
await tester.pumpAndSettle();
expect(find.byType(CardWidget), findsOneWidget);
});
testWidgets('calls markAsDefault when card is tapped', (tester) async {
when(mockCubit.state).thenReturn(UserCardsState());
when(mockCubit.stream).thenAnswer((_) => Stream.value(UserCardsState()));
when(mockCubit.markAsDefault(id: anyNamed('id'))).thenAnswer((_) async {});
await tester.pumpWidget(createTestWidget(
cardId: 1,
cardNumber: '1234 5678 9012 3456',
));
await tester.pumpAndSettle();
await tester.tap(find.byType(CardWidget));
await tester.pump();
verify(mockCubit.markAsDefault(id: 1)).called(1);
});
testWidgets('calls addCard when add card widget is tapped', (tester) async {
when(mockCubit.state).thenReturn(UserCardsState());
when(mockCubit.stream).thenAnswer((_) => Stream.value(UserCardsState()));
when(mockCubit.addCard()).thenAnswer((_) async => PaymentUrlModel(paymentUrl: 'https://example.com'));
await tester.pumpWidget(createTestWidget(
enabledAddCard: true,
));
await tester.pumpAndSettle();
await tester.tap(find.byType(CardWidget));
await tester.pump();
verify(mockCubit.addCard()).called(1);
});
testWidgets('calls deleteCard when delete button is tapped', (tester) async {
when(mockCubit.state).thenReturn(UserCardsState());
when(mockCubit.stream).thenAnswer((_) => Stream.value(UserCardsState()));
when(mockCubit.markAsDefault(id: anyNamed('id'))).thenAnswer((_) async {});
when(mockCubit.deleteCard(id: anyNamed('id'))).thenAnswer((_) async {});
await tester.pumpWidget(createTestWidget(
cardId: 1,
cardNumber: '1234 5678 9012 3456',
));
await tester.pumpAndSettle();
// Find delete button (close icon)
final deleteButton = find.byType(GestureDetector);
if (deleteButton.evaluate().length > 1) {
await tester.tap(deleteButton.last);
await tester.pump();
verify(mockCubit.deleteCard(id: 1)).called(1);
}
});
});
}