결재 권한 테스트 및 인벤토리 위젯 안정화

This commit is contained in:
JiWoong Sul
2025-09-29 01:49:51 +09:00
parent 900990c46b
commit c00c0c9ab2
12 changed files with 5337 additions and 1765 deletions

View File

@@ -0,0 +1,100 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
import 'package:superport_v2/core/common/models/paginated_result.dart';
import 'package:superport_v2/core/config/environment.dart';
import 'package:superport_v2/features/masters/warehouse/domain/entities/warehouse.dart';
import 'package:superport_v2/features/masters/warehouse/domain/repositories/warehouse_repository.dart';
import 'package:superport_v2/features/reporting/presentation/pages/reporting_page.dart';
import '../../helpers/test_app.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
setUpAll(() async {
await Environment.initialize();
});
tearDown(() async {
await GetIt.I.reset();
});
testWidgets('보고서 화면은 창고 목록 재시도 흐름을 제공한다', (tester) async {
final repo = _FlakyWarehouseRepository();
GetIt.I.registerSingleton<WarehouseRepository>(repo);
final view = tester.view;
view.physicalSize = const Size(1280, 800);
view.devicePixelRatio = 1.0;
addTearDown(() {
view.resetPhysicalSize();
view.resetDevicePixelRatio();
});
await tester.pumpWidget(buildTestApp(const ReportingPage()));
await tester.pumpAndSettle();
expect(repo.attempts, 1);
expect(find.text('창고 목록을 불러오지 못했습니다. 잠시 후 다시 시도하세요.'), findsOneWidget);
await tester.tap(find.widgetWithText(ShadButton, '재시도'));
await tester.pumpAndSettle();
expect(repo.attempts, 2);
expect(find.text('창고 목록을 불러오지 못했습니다. 잠시 후 다시 시도하세요.'), findsNothing);
});
}
class _FlakyWarehouseRepository implements WarehouseRepository {
int attempts = 0;
@override
Future<PaginatedResult<Warehouse>> list({
int page = 1,
int pageSize = 20,
String? query,
bool? isActive,
}) async {
attempts += 1;
if (attempts == 1) {
throw Exception('network down');
}
return PaginatedResult<Warehouse>(
items: [
Warehouse(
id: 1,
warehouseCode: 'WH-A',
warehouseName: '창고 A',
isActive: true,
isDeleted: false,
),
],
page: 1,
pageSize: 20,
total: 1,
);
}
@override
Future<Warehouse> create(WarehouseInput input) {
throw UnimplementedError();
}
@override
Future<void> delete(int id) {
throw UnimplementedError();
}
@override
Future<Warehouse> restore(int id) {
throw UnimplementedError();
}
@override
Future<Warehouse> update(int id, WarehouseInput input) {
throw UnimplementedError();
}
}