forked from eatvio/eatvio_app
chore(version): update app version to 1.3.5+85 and improve test coverage reporting in CI
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user