forked from eatvio/eatvio_app
204 lines
6.4 KiB
Dart
204 lines
6.4 KiB
Dart
import 'package:eatvio_app/features/diets/models/diet_likes_model.dart';
|
|
import 'package:eatvio_app/features/diets/services/diet_service.dart';
|
|
import 'package:eatvio_app/features/feed/models/diets_pagination_model.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:mockito/annotations.dart';
|
|
import 'package:mockito/mockito.dart';
|
|
|
|
import 'diet_service_test.mocks.dart';
|
|
|
|
@GenerateNiceMocks([MockSpec<DietService>()])
|
|
void main() {
|
|
group('DietService', () {
|
|
late MockDietService mockDietService;
|
|
|
|
setUp(() {
|
|
mockDietService = MockDietService();
|
|
});
|
|
|
|
test('likeDiet returns DietLikesModel', () async {
|
|
const id = 1;
|
|
const expected = DietLikesModel(totalLikes: 10, isLiked: true);
|
|
|
|
when(mockDietService.likeDiet(id: id)).thenAnswer((_) async => expected);
|
|
|
|
final result = await mockDietService.likeDiet(id: id);
|
|
|
|
expect(result, isA<DietLikesModel>());
|
|
expect(result.totalLikes, 10);
|
|
expect(result.isLiked, true);
|
|
verify(mockDietService.likeDiet(id: id)).called(1);
|
|
});
|
|
|
|
test('likeDiet returns DietLikesModel with different values', () async {
|
|
const id = 2;
|
|
const expected = DietLikesModel(totalLikes: 5, isLiked: false);
|
|
|
|
when(mockDietService.likeDiet(id: id)).thenAnswer((_) async => expected);
|
|
|
|
final result = await mockDietService.likeDiet(id: id);
|
|
|
|
expect(result, isA<DietLikesModel>());
|
|
expect(result.totalLikes, 5);
|
|
expect(result.isLiked, false);
|
|
verify(mockDietService.likeDiet(id: id)).called(1);
|
|
});
|
|
|
|
test('addToFavorite returns Diet', () async {
|
|
const id = 1;
|
|
const expected = Diet(
|
|
id: id,
|
|
slug: 'test-diet',
|
|
name: 'Test Diet',
|
|
image: 'https://someurl.com/img.jpg',
|
|
duration: 30,
|
|
state: DietState.active,
|
|
type: DietType(light: true, veg: false, carb: false, meat: false),
|
|
details: 'Test diet description',
|
|
dailySchedule: {},
|
|
author: Author(authorSlug: '', authorName: '', authorProfileIcon: '', authorIsMe: false),
|
|
totalLikes: 1,
|
|
totalViews: 1,
|
|
totalComments: 1,
|
|
wasLikedByMe: false,
|
|
isFavorite: true,
|
|
dailyNutrition: [],
|
|
);
|
|
|
|
when(mockDietService.addToFavorite(id: id)).thenAnswer((_) async => expected);
|
|
|
|
final result = await mockDietService.addToFavorite(id: id);
|
|
|
|
expect(result, isA<Diet>());
|
|
expect(result.id, id);
|
|
expect(result.isFavorite, true);
|
|
verify(mockDietService.addToFavorite(id: id)).called(1);
|
|
});
|
|
|
|
test('removeFromFavorite returns Diet', () async {
|
|
const id = 1;
|
|
const expected = Diet(
|
|
id: id,
|
|
slug: 'test-diet',
|
|
name: 'Test Diet',
|
|
image: 'https://someurl.com/img.jpg',
|
|
duration: 30,
|
|
state: DietState.active,
|
|
type: DietType(light: true, veg: false, carb: false, meat: false),
|
|
details: 'Test diet description',
|
|
dailySchedule: {},
|
|
author: Author(authorSlug: '', authorName: '', authorProfileIcon: '', authorIsMe: false),
|
|
totalLikes: 1,
|
|
totalViews: 1,
|
|
totalComments: 1,
|
|
wasLikedByMe: false,
|
|
isFavorite: false,
|
|
dailyNutrition: [],
|
|
);
|
|
|
|
when(mockDietService.removeFromFavorite(id: id)).thenAnswer((_) async => expected);
|
|
|
|
final result = await mockDietService.removeFromFavorite(id: id);
|
|
|
|
expect(result, isA<Diet>());
|
|
expect(result.id, id);
|
|
expect(result.isFavorite, false);
|
|
verify(mockDietService.removeFromFavorite(id: id)).called(1);
|
|
});
|
|
|
|
test('getDiet returns Diet by id', () async {
|
|
const id = 1;
|
|
const expected = Diet(
|
|
id: id,
|
|
slug: 'test-diet',
|
|
name: 'Test Diet',
|
|
image: 'https://someurl.com/img.jpg',
|
|
duration: 30,
|
|
state: DietState.active,
|
|
type: DietType(light: true, veg: false, carb: false, meat: false),
|
|
details: 'Test diet description',
|
|
dailySchedule: {},
|
|
author: Author(authorSlug: '', authorName: '', authorProfileIcon: '', authorIsMe: false),
|
|
totalLikes: 1,
|
|
totalViews: 1,
|
|
totalComments: 1,
|
|
wasLikedByMe: false,
|
|
isFavorite: false,
|
|
dailyNutrition: [],
|
|
);
|
|
|
|
when(mockDietService.getDiet(id: id)).thenAnswer((_) async => expected);
|
|
|
|
final result = await mockDietService.getDiet(id: id);
|
|
|
|
expect(result, isA<Diet>());
|
|
expect(result.id, id);
|
|
expect(result.name, 'Test Diet');
|
|
verify(mockDietService.getDiet(id: id)).called(1);
|
|
});
|
|
|
|
test('getDietBySlug returns Diet by slug', () async {
|
|
const slug = 'test-diet-slug';
|
|
const expected = Diet(
|
|
id: 1,
|
|
slug: slug,
|
|
name: 'Test Diet',
|
|
image: 'https://someurl.com/img.jpg',
|
|
duration: 30,
|
|
state: DietState.active,
|
|
type: DietType(light: true, veg: false, carb: false, meat: false),
|
|
details: 'Test diet description',
|
|
dailySchedule: {},
|
|
author: Author(authorSlug: '', authorName: '', authorProfileIcon: '', authorIsMe: false),
|
|
totalLikes: 1,
|
|
totalViews: 1,
|
|
totalComments: 1,
|
|
wasLikedByMe: false,
|
|
isFavorite: false,
|
|
dailyNutrition: [],
|
|
);
|
|
|
|
when(mockDietService.getDietBySlug(slug: slug)).thenAnswer((_) async => expected);
|
|
|
|
final result = await mockDietService.getDietBySlug(slug: slug);
|
|
|
|
expect(result, isA<Diet>());
|
|
expect(result.slug, slug);
|
|
verify(mockDietService.getDietBySlug(slug: slug)).called(1);
|
|
});
|
|
|
|
test('startDiet starts diet with date', () async {
|
|
const id = 1;
|
|
const date = '2024-01-01';
|
|
final body = {'date': date};
|
|
|
|
when(mockDietService.startDiet(id: id, body: body)).thenAnswer((_) async => Future.value());
|
|
|
|
await mockDietService.startDiet(id: id, body: body);
|
|
|
|
verify(mockDietService.startDiet(id: id, body: body)).called(1);
|
|
});
|
|
|
|
test('cancelDiet cancels diet by id', () async {
|
|
const id = 1;
|
|
|
|
when(mockDietService.cancelDiet(id: id)).thenAnswer((_) async => Future.value());
|
|
|
|
await mockDietService.cancelDiet(id: id);
|
|
|
|
verify(mockDietService.cancelDiet(id: id)).called(1);
|
|
});
|
|
|
|
test('deleteDiet deletes diet by id', () async {
|
|
const id = 1;
|
|
|
|
when(mockDietService.deleteDiet(id: id)).thenAnswer((_) async => Future.value());
|
|
|
|
await mockDietService.deleteDiet(id: id);
|
|
|
|
verify(mockDietService.deleteDiet(id: id)).called(1);
|
|
});
|
|
});
|
|
}
|
|
|