Files
eatvio_app/test/features/feed/presentation/bloc/feed_cubit_test.dart

67 lines
2.5 KiB
Dart

import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
import 'package:eatvio_app/features/feed/models/feed_blog_post_model.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/feed_cubit/feed_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/feed_cubit/feed_state.dart';
import 'package:eatvio_app/features/feed/repositories/feed_repository.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'feed_cubit_test.mocks.dart';
@GenerateNiceMocks([MockSpec<FeedRepository>()])
void main() {
group('FeedCubit', () {
late MockFeedRepository repository;
late FeedCubit cubit;
final post = FeedBlogPostModel(
id: 1,
state: 'active',
image: 'https://example.com/image.png',
description: 'text',
author: const Author(authorSlug: 'a', authorName: 'Author', authorProfileIcon: 'https://example.com/avatar.png', authorIsMe: false),
videoUrl: '',
createdAt: DateTime(2024, 1, 1),
updatedAt: DateTime(2024, 1, 1),
title: 'Title',
totalLikes: 1,
totalViews: 2,
totalComments: 3,
wasLikedByMe: false,
);
setUp(() {
repository = MockFeedRepository();
cubit = FeedCubit(feedRepository: repository);
});
tearDown(() async {
await cubit.close();
});
test('loadFeedBlogPostList emits loaded from getFeed', () async {
when(repository.getFeed(search: null, cursor: null, currentUserId: null)).thenAnswer((_) async => (posts: [post], nextCursor: 'next'));
await cubit.loadFeedBlogPostList();
expect(cubit.state, isA<FeedStateLoaded>());
final loaded = cubit.state as FeedStateLoaded;
expect(loaded.feedBlogPostList, hasLength(1));
verify(repository.getFeed(search: null, cursor: null, currentUserId: null)).called(1);
});
test('loadNextPage appends posts', () async {
when(repository.getFeed(search: null, cursor: null, currentUserId: null)).thenAnswer((_) async => (posts: [post], nextCursor: 'next'));
when(repository.getFeed(search: null, cursor: 'next', currentUserId: null)).thenAnswer((_) async => (posts: [post.copyWith(id: 2)], nextCursor: null));
await cubit.loadFeedBlogPostList();
await cubit.loadNextPage();
final loaded = cubit.state as FeedStateLoaded;
expect(loaded.feedBlogPostList, hasLength(2));
verify(repository.getFeed(search: null, cursor: 'next', currentUserId: null)).called(1);
});
});
}