forked from eatvio/eatvio_app
feat(tests): test coverage is 69.2
This commit is contained in:
@@ -606,11 +606,7 @@ void main() {
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
// Мокаем карту с isDefault = true
|
||||
final cardWithDefault = CardModel(
|
||||
id: 1,
|
||||
cardNumber: '1234',
|
||||
isDefault: true,
|
||||
);
|
||||
final cardWithDefault = CardModel(id: 1, cardNumber: '1234', isDefault: true);
|
||||
when(mockCardsRepository.getCards()).thenAnswer((_) async => [cardWithDefault]);
|
||||
|
||||
await chatRoomCubit.checkCards();
|
||||
@@ -635,11 +631,7 @@ void main() {
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
// Мокаем карту с isDefault = false
|
||||
final cardWithoutDefault = CardModel(
|
||||
id: 1,
|
||||
cardNumber: '1234',
|
||||
isDefault: false,
|
||||
);
|
||||
final cardWithoutDefault = CardModel(id: 1, cardNumber: '1234', isDefault: false);
|
||||
when(mockCardsRepository.getCards()).thenAnswer((_) async => [cardWithoutDefault]);
|
||||
|
||||
await chatRoomCubit.checkCards();
|
||||
@@ -1072,5 +1064,300 @@ void main() {
|
||||
// Не должно вызывать getChatMessages для страницы 2
|
||||
verifyNever(mockChatRepository.getChatMessages(uuid, 2));
|
||||
});
|
||||
|
||||
test('resendMessage - не делает ничего если сообщение не найдено', () async {
|
||||
const uuid = 'room-uuid';
|
||||
const messageUuid = 'non-existent-uuid';
|
||||
final initialMessages = ChatMessagesModel(
|
||||
messagesList: [
|
||||
ChatMessageModel(
|
||||
id: 1,
|
||||
data: 'Test message',
|
||||
mediaData: null,
|
||||
authorId: 1,
|
||||
updatedAt: DateTime.now(),
|
||||
isRead: false,
|
||||
isCurrentUserAuthor: true,
|
||||
roomId: 'chat-id',
|
||||
),
|
||||
],
|
||||
meta: const ChatMetaModel(lastPage: 1),
|
||||
);
|
||||
|
||||
when(mockChatRepository.getChatRoom(uuid)).thenAnswer((_) async => testChatRoom);
|
||||
when(mockChatRepository.getChatMessages(uuid, 1)).thenAnswer((_) async => initialMessages);
|
||||
when(mockWsManager.client).thenReturn(null);
|
||||
when(mockWsManager.initPrivateDirectChatChannel(any)).thenAnswer((_) async => Future.value());
|
||||
when(mockWsManager.subscribeDirectChatChannel()).thenReturn(null);
|
||||
when(mockWsManager.directChatStream).thenReturn(null);
|
||||
when(mockWsManager.clientTypingStream).thenReturn(null);
|
||||
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenAnswer((_) async => throw Exception('No plan'));
|
||||
|
||||
await chatRoomCubit.initChat(uuid);
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
await chatRoomCubit.resendMessage(uuid: messageUuid, userSlug: 'user-1');
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
|
||||
verifyNever(mockChatRepository.sendMessage(data: anyNamed('data'), files: anyNamed('files'), slug: anyNamed('slug')));
|
||||
});
|
||||
|
||||
test('initChat - вызывает checkCards если consultantId == sender.id', () async {
|
||||
const uuid = 'room-uuid';
|
||||
const planId = 123;
|
||||
final chatRoomWithPlan = testChatRoom.copyWith(chosenPlanId: planId);
|
||||
const testPlan = PlanModel(
|
||||
id: 1,
|
||||
slug: 'test-plan',
|
||||
name: 'Test Plan',
|
||||
image: 'https://example.com/image.jpg',
|
||||
duration: 7,
|
||||
state: 'active',
|
||||
type: PlanType(fit: true, slim: false, behavior: false, wellness: false),
|
||||
details: 'Test details',
|
||||
packetsCount: 3,
|
||||
author: Author(authorSlug: 'author', authorName: 'Author Name', authorProfileIcon: 'https://example.com/icon.jpg', authorIsMe: false),
|
||||
totalLikes: 10,
|
||||
totalViews: 100,
|
||||
totalComments: 5,
|
||||
isFavorite: false,
|
||||
minPriceOfOptions: 1000,
|
||||
maxPriceOfOptions: 2000,
|
||||
wasLikedByMe: false,
|
||||
);
|
||||
final chosenPlan = ChosenPlanModel(
|
||||
id: planId,
|
||||
optionType: 'options1',
|
||||
startDate: DateTime.now(),
|
||||
chosenPlanState: ChosenPlanStateEnum.stateStarted,
|
||||
chatId: 'chat-1',
|
||||
consultantId: 1, // совпадает с sender.id
|
||||
plan: testPlan,
|
||||
);
|
||||
|
||||
when(mockChatRepository.getChatRoom(uuid)).thenAnswer((_) async => chatRoomWithPlan);
|
||||
when(mockChatRepository.getChatMessages(uuid, 1)).thenAnswer((_) async => testChatMessages);
|
||||
when(mockChatRepository.getChosenPlan(id: planId)).thenAnswer((_) async => chosenPlan);
|
||||
when(mockWsManager.client).thenReturn(null);
|
||||
when(mockWsManager.initPrivateDirectChatChannel(any)).thenAnswer((_) async => Future.value());
|
||||
when(mockWsManager.subscribeDirectChatChannel()).thenReturn(null);
|
||||
when(mockWsManager.directChatStream).thenReturn(null);
|
||||
when(mockWsManager.clientTypingStream).thenReturn(null);
|
||||
when(mockCardsRepository.getCards()).thenAnswer((_) async => []);
|
||||
|
||||
await chatRoomCubit.initChat(uuid);
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
verify(mockCardsRepository.getCards()).called(1);
|
||||
});
|
||||
|
||||
test('initChat - не вызывает checkCards если consultantId != sender.id', () async {
|
||||
const uuid = 'room-uuid';
|
||||
const planId = 123;
|
||||
final chatRoomWithPlan = testChatRoom.copyWith(chosenPlanId: planId);
|
||||
const testPlan = PlanModel(
|
||||
id: 1,
|
||||
slug: 'test-plan',
|
||||
name: 'Test Plan',
|
||||
image: 'https://example.com/image.jpg',
|
||||
duration: 7,
|
||||
state: 'active',
|
||||
type: PlanType(fit: true, slim: false, behavior: false, wellness: false),
|
||||
details: 'Test details',
|
||||
packetsCount: 3,
|
||||
author: Author(authorSlug: 'author', authorName: 'Author Name', authorProfileIcon: 'https://example.com/icon.jpg', authorIsMe: false),
|
||||
totalLikes: 10,
|
||||
totalViews: 100,
|
||||
totalComments: 5,
|
||||
isFavorite: false,
|
||||
minPriceOfOptions: 1000,
|
||||
maxPriceOfOptions: 2000,
|
||||
wasLikedByMe: false,
|
||||
);
|
||||
final chosenPlan = ChosenPlanModel(
|
||||
id: planId,
|
||||
optionType: 'options1',
|
||||
startDate: DateTime.now(),
|
||||
chosenPlanState: ChosenPlanStateEnum.stateStarted,
|
||||
chatId: 'chat-1',
|
||||
consultantId: 2, // не совпадает с sender.id (1)
|
||||
plan: testPlan,
|
||||
);
|
||||
|
||||
when(mockChatRepository.getChatRoom(uuid)).thenAnswer((_) async => chatRoomWithPlan);
|
||||
when(mockChatRepository.getChatMessages(uuid, 1)).thenAnswer((_) async => testChatMessages);
|
||||
when(mockChatRepository.getChosenPlan(id: planId)).thenAnswer((_) async => chosenPlan);
|
||||
when(mockWsManager.client).thenReturn(null);
|
||||
when(mockWsManager.initPrivateDirectChatChannel(any)).thenAnswer((_) async => Future.value());
|
||||
when(mockWsManager.subscribeDirectChatChannel()).thenReturn(null);
|
||||
when(mockWsManager.directChatStream).thenReturn(null);
|
||||
when(mockWsManager.clientTypingStream).thenReturn(null);
|
||||
|
||||
await chatRoomCubit.initChat(uuid);
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
verifyNever(mockCardsRepository.getCards());
|
||||
});
|
||||
|
||||
test('choseStartPlanDate - обрабатывает ошибку', () async {
|
||||
const uuid = 'room-uuid';
|
||||
const planId = 123;
|
||||
final chatRoomWithPlan = testChatRoom.copyWith(chosenPlanId: planId);
|
||||
const testPlan = PlanModel(
|
||||
id: 1,
|
||||
slug: 'test-plan',
|
||||
name: 'Test Plan',
|
||||
image: 'https://example.com/image.jpg',
|
||||
duration: 7,
|
||||
state: 'active',
|
||||
type: PlanType(fit: true, slim: false, behavior: false, wellness: false),
|
||||
details: 'Test details',
|
||||
packetsCount: 3,
|
||||
author: Author(authorSlug: 'author', authorName: 'Author Name', authorProfileIcon: 'https://example.com/icon.jpg', authorIsMe: false),
|
||||
totalLikes: 10,
|
||||
totalViews: 100,
|
||||
totalComments: 5,
|
||||
isFavorite: false,
|
||||
minPriceOfOptions: 1000,
|
||||
maxPriceOfOptions: 2000,
|
||||
wasLikedByMe: false,
|
||||
);
|
||||
final chosenPlan = ChosenPlanModel(
|
||||
id: planId,
|
||||
optionType: 'options1',
|
||||
startDate: DateTime(2024, 1, 1),
|
||||
chosenPlanState: ChosenPlanStateEnum.statePendingPayment,
|
||||
chatId: 'chat-1',
|
||||
consultantId: 1,
|
||||
plan: testPlan,
|
||||
);
|
||||
|
||||
when(mockChatRepository.getChatRoom(uuid)).thenAnswer((_) async => chatRoomWithPlan);
|
||||
when(mockChatRepository.getChatMessages(uuid, 1)).thenAnswer((_) async => testChatMessages);
|
||||
when(mockChatRepository.getChosenPlan(id: planId)).thenAnswer((_) async => chosenPlan);
|
||||
when(mockChatRepository.choseStartPlanDate(id: planId, date: anyNamed('date'))).thenThrow(Exception('Error'));
|
||||
when(mockWsManager.client).thenReturn(null);
|
||||
when(mockWsManager.initPrivateDirectChatChannel(any)).thenAnswer((_) async => Future.value());
|
||||
when(mockWsManager.subscribeDirectChatChannel()).thenReturn(null);
|
||||
when(mockWsManager.directChatStream).thenReturn(null);
|
||||
when(mockWsManager.clientTypingStream).thenReturn(null);
|
||||
|
||||
await chatRoomCubit.initChat(uuid);
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
final result = await chatRoomCubit.choseStartPlanDate(DateTime(2024, 1, 15));
|
||||
|
||||
expect(result, false);
|
||||
});
|
||||
|
||||
test('checkCards - обрабатывает ошибку', () async {
|
||||
const uuid = 'room-uuid';
|
||||
when(mockChatRepository.getChatRoom(uuid)).thenAnswer((_) async => testChatRoom);
|
||||
when(mockChatRepository.getChatMessages(uuid, 1)).thenAnswer((_) async => testChatMessages);
|
||||
when(mockWsManager.client).thenReturn(null);
|
||||
when(mockWsManager.initPrivateDirectChatChannel(any)).thenAnswer((_) async => Future.value());
|
||||
when(mockWsManager.subscribeDirectChatChannel()).thenReturn(null);
|
||||
when(mockWsManager.directChatStream).thenReturn(null);
|
||||
when(mockWsManager.clientTypingStream).thenReturn(null);
|
||||
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenAnswer((_) async => throw Exception('No plan'));
|
||||
|
||||
await chatRoomCubit.initChat(uuid);
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
when(mockCardsRepository.getCards()).thenThrow(Exception('Error'));
|
||||
|
||||
await chatRoomCubit.checkCards();
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
|
||||
// Не должно быть исключений, ошибка должна быть обработана
|
||||
expect(chatRoomCubit.state, isA<ChatRoomStateLoaded>());
|
||||
});
|
||||
|
||||
test('deleteMessage - не делает ничего если state не loaded', () {
|
||||
const uuid = 'message-uuid';
|
||||
|
||||
chatRoomCubit.deleteMessage(uuid);
|
||||
|
||||
// Не должно быть исключений
|
||||
expect(chatRoomCubit.state, isA<ChatRoomStateLoading>());
|
||||
});
|
||||
|
||||
test('resendMessage - не делает ничего если state не loaded', () async {
|
||||
const uuid = 'message-uuid';
|
||||
|
||||
await chatRoomCubit.resendMessage(uuid: uuid, userSlug: 'user-1');
|
||||
|
||||
verifyNever(mockChatRepository.sendMessage(data: anyNamed('data'), files: anyNamed('files'), slug: anyNamed('slug')));
|
||||
});
|
||||
|
||||
test('loadNextPage - обновляет currentPage после успешной загрузки', () async {
|
||||
const uuid = 'room-uuid';
|
||||
final initialMessages = ChatMessagesModel(
|
||||
messagesList: [
|
||||
ChatMessageModel(
|
||||
id: 1,
|
||||
data: 'Initial message',
|
||||
mediaData: null,
|
||||
authorId: 1,
|
||||
updatedAt: DateTime.now(),
|
||||
isRead: false,
|
||||
isCurrentUserAuthor: true,
|
||||
roomId: 'chat-id',
|
||||
),
|
||||
],
|
||||
meta: const ChatMetaModel(lastPage: 2),
|
||||
);
|
||||
final nextPageMessages = ChatMessagesModel(
|
||||
messagesList: [
|
||||
ChatMessageModel(
|
||||
id: 2,
|
||||
data: 'Next page message',
|
||||
mediaData: null,
|
||||
authorId: 1,
|
||||
updatedAt: DateTime.now(),
|
||||
isRead: false,
|
||||
isCurrentUserAuthor: true,
|
||||
roomId: 'chat-id',
|
||||
),
|
||||
],
|
||||
meta: const ChatMetaModel(lastPage: 2),
|
||||
);
|
||||
|
||||
when(mockChatRepository.getChatRoom(uuid)).thenAnswer((_) async => testChatRoom);
|
||||
when(mockChatRepository.getChatMessages(uuid, 1)).thenAnswer((_) async => initialMessages);
|
||||
when(mockWsManager.client).thenReturn(null);
|
||||
when(mockWsManager.initPrivateDirectChatChannel(any)).thenAnswer((_) async => Future.value());
|
||||
when(mockWsManager.subscribeDirectChatChannel()).thenReturn(null);
|
||||
when(mockWsManager.directChatStream).thenReturn(null);
|
||||
when(mockWsManager.clientTypingStream).thenReturn(null);
|
||||
when(mockChatRepository.getChosenPlan(id: anyNamed('id'))).thenAnswer((_) async => throw Exception('No plan'));
|
||||
|
||||
await chatRoomCubit.initChat(uuid);
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
expect(chatRoomCubit.currentPage, 1);
|
||||
|
||||
when(mockChatRepository.getChatMessages(uuid, 2)).thenAnswer((_) async => nextPageMessages);
|
||||
|
||||
await chatRoomCubit.loadNextPage(uuid);
|
||||
await Future.delayed(const Duration(milliseconds: 200));
|
||||
|
||||
expect(chatRoomCubit.currentPage, 2);
|
||||
});
|
||||
|
||||
test('loadNextPage - не загружает если state не loaded', () async {
|
||||
const uuid = 'room-uuid';
|
||||
|
||||
// loadNextPage проверяет lastPage, который не инициализирован до initChat
|
||||
// Метод выбросит исключение, но мы просто проверяем, что getChatMessages не вызывается
|
||||
try {
|
||||
await chatRoomCubit.loadNextPage(uuid);
|
||||
} catch (e) {
|
||||
// Ожидаем исключение, так как lastPage не инициализирован
|
||||
expect(e, isNotNull);
|
||||
}
|
||||
|
||||
verifyNever(mockChatRepository.getChatMessages(any, any));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user