No *.freezed.dart — State/Event are hand-written sealed class extends Equatable.
No *_router.dart — routing uses go_router@TypedGoRoute, which generates
*.g.dart.
test('should return user when repository succeeds',()async{// Arrangewhen(()=> mockRepository.getUser(any())).thenAnswer((_)async=>Right(testUser));// Actfinal result =awaituseCase(GetUserParams(id:1));// Assertexpect(result,Right(testUser));verify(()=> mockRepository.getUser(1)).called(1);});
BLoC Tests (Direct Mock UseCase Injection)
blocSignalTest<HomeBloC, HomeState>('emits [loading, loaded] when LoadUser succeeds',
setUp:(){when(()=>mockGetUserUseCase(any())).thenAnswer((_)async=>Right(testUser));},
build:()=>HomeBloC(getUserUseCase: mockGetUserUseCase),// ✅ Direct mock injection
act:(bloc)=> bloc.add(LoadUser(id:1)),
expect:()=>[HomeLoading(),HomeLoaded(testUser)],);
Test Commands
# Single feature test
flutter test feature/{type}/{feature_name}/test/
# Coverage report
melos run test:with-html-coverage