전역 구조 리팩터링 및 테스트 확장
This commit is contained in:
@@ -9,11 +9,16 @@ import 'package:superport_v2/core/common/models/paginated_result.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/masters/warehouse/presentation/pages/warehouse_page.dart';
|
||||
import 'package:superport_v2/features/util/postal_search/domain/entities/postal_code.dart';
|
||||
import 'package:superport_v2/features/util/postal_search/domain/repositories/postal_search_repository.dart';
|
||||
|
||||
class _MockWarehouseRepository extends Mock implements WarehouseRepository {}
|
||||
|
||||
class _FakeWarehouseInput extends Fake implements WarehouseInput {}
|
||||
|
||||
class _MockPostalSearchRepository extends Mock
|
||||
implements PostalSearchRepository {}
|
||||
|
||||
Widget _buildApp(Widget child) {
|
||||
return MaterialApp(
|
||||
home: ShadTheme(
|
||||
@@ -41,7 +46,9 @@ void main() {
|
||||
testWidgets('플래그 Off 시 스펙 화면', (tester) async {
|
||||
dotenv.testLoad(fileInput: 'FEATURE_WAREHOUSES_ENABLED=false\n');
|
||||
|
||||
await tester.pumpWidget(_buildApp(const WarehousePage()));
|
||||
await tester.pumpWidget(
|
||||
_buildApp(WarehousePage(routeUri: Uri(path: '/masters/warehouses'))),
|
||||
);
|
||||
await tester.pump();
|
||||
|
||||
expect(find.text('입고지(창고) 관리'), findsOneWidget);
|
||||
@@ -50,11 +57,32 @@ void main() {
|
||||
|
||||
group('플래그 On', () {
|
||||
late _MockWarehouseRepository repository;
|
||||
late _MockPostalSearchRepository postalRepository;
|
||||
|
||||
setUp(() {
|
||||
dotenv.testLoad(fileInput: 'FEATURE_WAREHOUSES_ENABLED=true\n');
|
||||
repository = _MockWarehouseRepository();
|
||||
postalRepository = _MockPostalSearchRepository();
|
||||
GetIt.I.registerLazySingleton<WarehouseRepository>(() => repository);
|
||||
GetIt.I.registerLazySingleton<PostalSearchRepository>(
|
||||
() => postalRepository,
|
||||
);
|
||||
when(
|
||||
() => postalRepository.search(
|
||||
keyword: any(named: 'keyword'),
|
||||
limit: any(named: 'limit'),
|
||||
),
|
||||
).thenAnswer(
|
||||
(_) async => [
|
||||
PostalCode(
|
||||
zipcode: '06000',
|
||||
sido: '서울특별시',
|
||||
sigungu: '강남구',
|
||||
roadName: '테헤란로',
|
||||
buildingMainNo: 100,
|
||||
),
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('목록 조회 후 테이블 표시', (tester) async {
|
||||
@@ -81,7 +109,9 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(_buildApp(const WarehousePage()));
|
||||
await tester.pumpWidget(
|
||||
_buildApp(WarehousePage(routeUri: Uri(path: '/masters/warehouses'))),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.text('WH-001'), findsOneWidget);
|
||||
@@ -108,7 +138,9 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pumpWidget(_buildApp(const WarehousePage()));
|
||||
await tester.pumpWidget(
|
||||
_buildApp(WarehousePage(routeUri: Uri(path: '/masters/warehouses'))),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
await tester.tap(find.text('신규 등록'));
|
||||
@@ -164,7 +196,9 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
await tester.pumpWidget(_buildApp(const WarehousePage()));
|
||||
await tester.pumpWidget(
|
||||
_buildApp(WarehousePage(routeUri: Uri(path: '/masters/warehouses'))),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
await tester.tap(find.text('신규 등록'));
|
||||
@@ -177,14 +211,31 @@ void main() {
|
||||
|
||||
await tester.enterText(fields.at(0), 'WH-100');
|
||||
await tester.enterText(fields.at(1), '신규 창고');
|
||||
await tester.enterText(fields.at(2), '12345');
|
||||
await tester.enterText(fields.at(3), '주소');
|
||||
await tester.enterText(fields.at(2), '06000');
|
||||
await tester.tap(
|
||||
find.descendant(
|
||||
of: find.byType(Dialog),
|
||||
matching: find.widgetWithText(ShadButton, '검색'),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
await tester.tap(find.text('06000').last);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final updatedFields = find.descendant(
|
||||
of: find.byType(Dialog),
|
||||
matching: find.byType(EditableText),
|
||||
);
|
||||
|
||||
await tester.enterText(updatedFields.at(3), '주소');
|
||||
|
||||
await tester.tap(find.text('등록'));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(capturedInput, isNotNull);
|
||||
expect(capturedInput?.warehouseCode, 'WH-100');
|
||||
expect(capturedInput?.zipcode, '06000');
|
||||
expect(find.byType(Dialog), findsNothing);
|
||||
expect(find.text('WH-100'), findsOneWidget);
|
||||
verify(() => repository.create(any())).called(1);
|
||||
|
||||
Reference in New Issue
Block a user