refactor(tests): update model instantiation to use const for improved performance

This commit is contained in:
mso7nueh
2025-12-03 06:16:34 +03:00
parent d0becb9e11
commit f3d4478c65
15 changed files with 1840 additions and 27 deletions

View File

@@ -0,0 +1,154 @@
import 'package:eatvio_app/core/enums/base_state.dart';
import 'package:eatvio_app/features/my_finance/models/card_model.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/repositories/cards_repository.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'user_cards_cubit_test.mocks.dart';
@GenerateMocks([CardsRepository])
void main() {
group('UserCardsCubit', () {
late UserCardsCubit cubit;
late MockCardsRepository mockCardsRepository;
setUp(() {
mockCardsRepository = MockCardsRepository();
cubit = UserCardsCubit(cardsRepository: mockCardsRepository);
});
tearDown(() {
cubit.close();
});
test('начальное состояние', () {
expect(cubit.state.cards, isEmpty);
expect(cubit.state.error, isNull);
expect(cubit.state.state, BaseState.initial);
});
test('getCards - успешная загрузка карт', () async {
final cards = [
CardModel(id: 1, cardNumber: '1234', isDefault: true),
CardModel(id: 2, cardNumber: '5678', isDefault: false),
];
when(mockCardsRepository.getCards()).thenAnswer((_) async => cards);
await cubit.getCards();
expect(cubit.state.cards, equals(cards));
expect(cubit.state.state, BaseState.success);
expect(cubit.state.error, isNull);
verify(mockCardsRepository.getCards()).called(1);
});
test('getCards - ошибка при загрузке', () async {
final error = Exception('Ошибка загрузки');
when(mockCardsRepository.getCards()).thenThrow(error);
await cubit.getCards();
expect(cubit.state.cards, isEmpty);
expect(cubit.state.state, BaseState.error);
expect(cubit.state.error, equals(error.toString()));
verify(mockCardsRepository.getCards()).called(1);
});
test('addCard - успешное добавление карты', () async {
final paymentUrl = PaymentUrlModel(paymentUrl: 'https://payment.url');
when(mockCardsRepository.addCard()).thenAnswer((_) async => paymentUrl);
final result = await cubit.addCard();
expect(result, equals(paymentUrl));
verify(mockCardsRepository.addCard()).called(1);
});
test('addCard - ошибка при добавлении', () async {
when(mockCardsRepository.addCard()).thenThrow(Exception('Ошибка'));
final result = await cubit.addCard();
expect(result, isNull);
verify(mockCardsRepository.addCard()).called(1);
});
test('markAsDefault - успешное изменение карты по умолчанию', () async {
final cards = [
CardModel(id: 1, cardNumber: '1234', isDefault: true),
CardModel(id: 2, cardNumber: '5678', isDefault: false),
];
when(mockCardsRepository.getCards()).thenAnswer((_) async => cards);
when(mockCardsRepository.markAsDefault(id: 2)).thenAnswer((_) async {});
await cubit.getCards();
await cubit.markAsDefault(id: 2);
expect(cubit.state.cards[0].isDefault, isFalse);
expect(cubit.state.cards[1].isDefault, isTrue);
// Ждем завершения debounce
await Future.delayed(const Duration(milliseconds: 100));
verify(mockCardsRepository.markAsDefault(id: 2)).called(1);
});
test('deleteCard - успешное удаление карты', () async {
final cards = [
CardModel(id: 1, cardNumber: '1234', isDefault: true),
CardModel(id: 2, cardNumber: '5678', isDefault: false),
];
when(mockCardsRepository.getCards()).thenAnswer((_) async => cards);
when(mockCardsRepository.deleteCard(id: 2)).thenAnswer((_) async {});
await cubit.getCards();
await cubit.deleteCard(id: 2);
expect(cubit.state.cards.length, equals(1));
expect(cubit.state.cards[0].id, equals(1));
verify(mockCardsRepository.deleteCard(id: 2)).called(1);
});
test('deleteCard - ошибка при удалении', () async {
final cards = [
CardModel(id: 1, cardNumber: '1234', isDefault: true),
];
when(mockCardsRepository.getCards()).thenAnswer((_) async => cards);
when(mockCardsRepository.deleteCard(id: 1)).thenThrow(Exception('Ошибка'));
await cubit.getCards();
await cubit.deleteCard(id: 1);
// Карта должна вернуться обратно
expect(cubit.state.cards.length, equals(1));
expect(cubit.state.state, BaseState.error);
verify(mockCardsRepository.deleteCard(id: 1)).called(1);
});
test('collectCharge - успешный сбор платежа', () async {
when(mockCardsRepository.collectCharge(chosenPlaId: 1)).thenAnswer((_) async {});
final result = await cubit.collectCharge(chosenPlaId: 1);
expect(result, isTrue);
verify(mockCardsRepository.collectCharge(chosenPlaId: 1)).called(1);
});
test('collectCharge - ошибка при сборе платежа', () async {
when(mockCardsRepository.collectCharge(chosenPlaId: 1)).thenThrow(Exception('Ошибка'));
final result = await cubit.collectCharge(chosenPlaId: 1);
expect(result, isFalse);
verify(mockCardsRepository.collectCharge(chosenPlaId: 1)).called(1);
});
});
}