forked from eatvio/eatvio_app
67 lines
2.5 KiB
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);
|
|
});
|
|
});
|
|
}
|