140 lines
4.2 KiB
Dart
140 lines
4.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:go_router/go_router.dart';
|
|
import 'package:shadcn_ui/shadcn_ui.dart';
|
|
|
|
import 'package:superport_v2/core/config/environment.dart';
|
|
import 'package:superport_v2/core/permissions/permission_manager.dart';
|
|
import 'package:superport_v2/core/theme/superport_shad_theme.dart';
|
|
import 'package:superport_v2/features/inventory/inbound/presentation/pages/inbound_page.dart';
|
|
import 'package:superport_v2/features/inventory/shared/widgets/product_autocomplete_field.dart';
|
|
|
|
import '../../helpers/test_app.dart';
|
|
|
|
void main() {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
setUpAll(() async {
|
|
await Environment.initialize();
|
|
});
|
|
|
|
testWidgets('입고 필터 적용 및 초기화가 목록을 갱신한다', (tester) async {
|
|
final view = tester.view;
|
|
view.physicalSize = const Size(1280, 800);
|
|
view.devicePixelRatio = 1.0;
|
|
addTearDown(() {
|
|
view.resetPhysicalSize();
|
|
view.resetDevicePixelRatio();
|
|
});
|
|
|
|
final router = GoRouter(
|
|
initialLocation: '/inventory/inbound',
|
|
routes: [
|
|
GoRoute(
|
|
path: '/inventory/inbound',
|
|
builder: (context, state) =>
|
|
Scaffold(body: InboundPage(routeUri: state.uri)),
|
|
),
|
|
],
|
|
);
|
|
|
|
await tester.pumpWidget(
|
|
PermissionScope(
|
|
manager: PermissionManager(),
|
|
child: ShadApp.router(
|
|
routerConfig: router,
|
|
debugShowCheckedModeBanner: false,
|
|
theme: SuperportShadTheme.light(),
|
|
darkTheme: SuperportShadTheme.dark(),
|
|
),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.text('TX-20240301-001'), findsWidgets);
|
|
|
|
await tester.enterText(find.byType(EditableText).first, 'TX-20240305-010');
|
|
await tester.pump();
|
|
|
|
await tester.tap(find.widgetWithText(ShadButton, '검색 적용'));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.text('TX-20240305-010'), findsWidgets);
|
|
expect(find.text('TX-20240301-001'), findsNothing);
|
|
|
|
await tester.tap(find.widgetWithText(ShadButton, '초기화'));
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.text('TX-20240301-001'), findsWidgets);
|
|
});
|
|
|
|
testWidgets('입고 등록 모달은 동일 제품 중복을 막는다', (tester) async {
|
|
final view = tester.view;
|
|
view.physicalSize = const Size(1280, 900);
|
|
view.devicePixelRatio = 1.0;
|
|
addTearDown(() {
|
|
view.resetPhysicalSize();
|
|
view.resetDevicePixelRatio();
|
|
});
|
|
|
|
final router = GoRouter(
|
|
initialLocation: '/inventory/inbound',
|
|
routes: [
|
|
GoRoute(
|
|
path: '/inventory/inbound',
|
|
builder: (context, state) =>
|
|
Scaffold(body: InboundPage(routeUri: state.uri)),
|
|
),
|
|
],
|
|
);
|
|
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: ScaffoldMessenger(
|
|
child: PermissionScope(
|
|
manager: PermissionManager(),
|
|
child: ShadTheme(
|
|
data: SuperportShadTheme.light(),
|
|
child: Scaffold(
|
|
body: InboundPage(routeUri: Uri.parse('/inventory/inbound')),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.tap(find.widgetWithText(ShadButton, '입고 등록'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final productFields = find.byType(InventoryProductAutocompleteField);
|
|
expect(productFields, findsWidgets);
|
|
|
|
final firstProductInput = find.descendant(
|
|
of: productFields.at(0),
|
|
matching: find.byType(EditableText),
|
|
);
|
|
await tester.enterText(firstProductInput, 'XR-5000');
|
|
await tester.pump();
|
|
|
|
await tester.tap(find.widgetWithText(ShadButton, '품목 추가'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final updatedProductFields = find.byType(InventoryProductAutocompleteField);
|
|
expect(updatedProductFields, findsNWidgets(2));
|
|
|
|
final secondProductInput = find.descendant(
|
|
of: updatedProductFields.at(1),
|
|
matching: find.byType(EditableText),
|
|
);
|
|
await tester.enterText(secondProductInput, 'XR-5000');
|
|
await tester.pump();
|
|
|
|
await tester.tap(find.widgetWithText(ShadButton, '저장'));
|
|
await tester.pump();
|
|
|
|
expect(find.text('동일 제품이 중복되었습니다.'), findsOneWidget);
|
|
});
|
|
}
|