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()]) 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()); 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); }); }); }