forked from eatvio/eatvio_app
refactor(tests): update model instantiation to use const for improved performance
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user