Files
eatvio_app/test/features/diets/services/diet_service_test.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);
});
});
}