LCOV - code coverage report
Current view: top level - src/favorites/presentation/bloc - favorites_bloc.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 31 33 93.9 %
Date: 2026-03-02 18:37:46 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:async';
       2             : 
       3             : import 'package:tech_proof/data/repositories/favorites_repository_impl.dart';
       4             : import 'package:tech_proof/domain/entities/movie_entity.dart';
       5             : 
       6             : import 'package:flutter_bloc/flutter_bloc.dart';
       7             : import 'package:equatable/equatable.dart';
       8             : 
       9             : part 'favorites_event.dart';
      10             : part 'favorites_state.dart';
      11             : 
      12             : class FavoritesBloc extends Bloc<FavoritesEvent, FavoritesState> {
      13             :   final FavoriteRepositoryImpl favoriteRepositoryImpl;
      14           1 :   FavoritesBloc({required this.favoriteRepositoryImpl})
      15           2 :     : super(FavoritesInitial()) {
      16           2 :     on<FavoritesEvent>((event, emit) {});
      17           2 :     on<LoadFavorites>(_loadFavorites);
      18           2 :     on<AddFavoriteMovie>(_addFavoriteMovie);
      19           2 :     on<RemoveFavoriteMovie>(_removeFavoriteMovie);
      20             :   }
      21             : 
      22           1 :   FutureOr<void> _loadFavorites(
      23             :     LoadFavorites event,
      24             :     Emitter<FavoritesState> emit,
      25             :   ) async {
      26           2 :     emit(FavoritesLoading());
      27             : 
      28           2 :     final result = await favoriteRepositoryImpl.getFavoriteMovies();
      29           1 :     result.fold(
      30           4 :       (l) => emit(FavoritesError(message: l.message)),
      31           3 :       (r) => emit(FavoritesLoaded(favoriteMovies: r)),
      32             :     );
      33             :   }
      34             : 
      35           1 :   Future<void> _addFavoriteMovie(
      36             :     AddFavoriteMovie event,
      37             :     Emitter<FavoritesState> emit,
      38             :   ) async {
      39           2 :     if (state is! FavoritesLoaded) return;
      40             : 
      41           2 :     final addResult = await favoriteRepositoryImpl.addMovieToFavorites(
      42           1 :       event.movie,
      43             :     );
      44             : 
      45           1 :     if (addResult.isLeft()) {
      46           2 :       emit(FavoritesError(message: 'Failed to add favorite movie'));
      47             :     } else {
      48           2 :       final getResult = await favoriteRepositoryImpl.getFavoriteMovies();
      49           1 :       getResult.fold(
      50           0 :         (l) => emit(FavoritesError(message: l.message)),
      51           3 :         (r) => emit(FavoritesLoaded(favoriteMovies: r)),
      52             :       );
      53             :     }
      54             :   }
      55             : 
      56           1 :   FutureOr<void> _removeFavoriteMovie(
      57             :     RemoveFavoriteMovie event,
      58             :     Emitter<FavoritesState> emit,
      59             :   ) async {
      60           2 :     if (state is! FavoritesLoaded) return;
      61             : 
      62           2 :     if (state is! FavoritesLoaded) return;
      63             : 
      64           2 :     final addResult = await favoriteRepositoryImpl.removeMovieFromFavorites(
      65           2 :       event.movie.id,
      66             :     );
      67             : 
      68           1 :     if (addResult.isLeft()) {
      69           2 :       emit(FavoritesError(message: 'Failed to remove favorite movie'));
      70             :     } else {
      71           2 :       final getResult = await favoriteRepositoryImpl.getFavoriteMovies();
      72           1 :       getResult.fold(
      73           0 :         (l) => emit(FavoritesError(message: l.message)),
      74           3 :         (r) => emit(FavoritesLoaded(favoriteMovies: r)),
      75             :       );
      76             :     }
      77             :   }
      78             : }

Generated by: LCOV version 1.14