76 lines
2.9 KiB
Dart
76 lines
2.9 KiB
Dart
import 'package:drift/drift.dart';
|
|
import 'package:drift/native.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:uto_manager/application/blocs/personnel_cubit.dart';
|
|
import 'package:uto_manager/application/blocs/template_cubit.dart';
|
|
import 'package:uto_manager/application/blocs/unit_tree_cubit.dart';
|
|
import 'package:uto_manager/domain/services/assignment_service.dart';
|
|
import 'package:uto_manager/domain/services/unit_tree_service.dart';
|
|
import 'package:uto_manager/infrastructure/database/app_database.dart';
|
|
import 'package:uto_manager/infrastructure/repositories/drift_personnel_repository.dart';
|
|
import 'package:uto_manager/infrastructure/repositories/drift_position_slot_repository.dart';
|
|
import 'package:uto_manager/infrastructure/repositories/drift_unit_repository.dart';
|
|
import 'package:uto_manager/presentation/screens/home_screen.dart';
|
|
|
|
void main() {
|
|
late AppDatabase db;
|
|
late UnitTreeCubit unitTreeCubit;
|
|
late PersonnelCubit personnelCubit;
|
|
late TemplateCubit templateCubit;
|
|
|
|
setUp(() {
|
|
// Use an in-memory SQLite database so no file I/O or pending timers.
|
|
db = AppDatabase.forTesting(NativeDatabase.memory());
|
|
const treeService = UnitTreeService();
|
|
final unitRepo = DriftUnitRepository(dao: db.unitDao, db: db);
|
|
final personnelRepo = DriftPersonnelRepository(dao: db.personnelDao);
|
|
final slotRepo = DriftPositionSlotRepository(dao: db.positionSlotDao);
|
|
final assignmentService = AssignmentService(treeService: treeService);
|
|
|
|
// Create cubits but do NOT call startWatching() — avoids live streams.
|
|
unitTreeCubit = UnitTreeCubit(
|
|
unitRepository: unitRepo,
|
|
slotRepository: slotRepo,
|
|
treeService: treeService,
|
|
);
|
|
personnelCubit = PersonnelCubit(
|
|
personnelRepository: personnelRepo,
|
|
slotRepository: slotRepo,
|
|
assignmentService: assignmentService,
|
|
);
|
|
templateCubit = TemplateCubit(
|
|
dao: db.templateDao,
|
|
unitRepository: unitRepo,
|
|
slotRepository: slotRepo,
|
|
);
|
|
});
|
|
|
|
tearDown(() async {
|
|
await unitTreeCubit.close();
|
|
await personnelCubit.close();
|
|
await templateCubit.close();
|
|
await db.close();
|
|
});
|
|
|
|
testWidgets('UTO Manager app bar renders with title and icon', (tester) async {
|
|
await tester.pumpWidget(
|
|
MultiBlocProvider(
|
|
providers: [
|
|
BlocProvider<UnitTreeCubit>.value(value: unitTreeCubit),
|
|
BlocProvider<PersonnelCubit>.value(value: personnelCubit),
|
|
BlocProvider<TemplateCubit>.value(value: templateCubit),
|
|
],
|
|
child: const MaterialApp(home: HomeScreen()),
|
|
),
|
|
);
|
|
|
|
await tester.pump();
|
|
|
|
expect(find.text('UTO Manager'), findsOneWidget);
|
|
expect(find.text('U.S. Army 2026 Doctrine'), findsOneWidget);
|
|
expect(find.byIcon(Icons.military_tech), findsOneWidget);
|
|
});
|
|
}
|