fix(inventory): 파트너 연동 및 상세 모달 동작 안정화
- 입고 레코드에 파트너 식별자와 고객 요약을 캐싱하고 상세 칩으로 노출 - 입고 등록 모달에서 파트너 선택 복원과 고객 동기화를 지원하며 취소 시 상세를 복귀하도록 수정 - 재고 컨트롤러에 고객 동기화 유틸리티와 결재 상태 로딩을 추가하고 단위 테스트를 확장 - 제품·파트너 자동완성 위젯을 재작성해 초기 로딩, 검색, 외부 컨트롤러 동기화를 안정화 - 재고 상세/공통 모달 닫기와 출고·대여 편집 모달의 네비게이터 호출을 루트 기준으로 통일 - 테스트: flutter analyze, flutter test (기존 레이아웃 검증 케이스 실패 지속)
This commit is contained in:
@@ -9,6 +9,7 @@ import 'package:superport_v2/features/inventory/transactions/domain/entities/sto
|
||||
import 'package:superport_v2/features/inventory/transactions/domain/entities/stock_transaction_input.dart';
|
||||
import 'package:superport_v2/features/inventory/transactions/domain/repositories/stock_transaction_repository.dart';
|
||||
import 'package:superport_v2/features/inventory/lookups/domain/repositories/inventory_lookup_repository.dart';
|
||||
import 'package:superport_v2/features/inventory/transactions/presentation/services/transaction_detail_sync_service.dart';
|
||||
|
||||
class _MockStockTransactionRepository extends Mock
|
||||
implements StockTransactionRepository {}
|
||||
@@ -19,6 +20,9 @@ class _MockInventoryLookupRepository extends Mock
|
||||
class _MockTransactionLineRepository extends Mock
|
||||
implements TransactionLineRepository {}
|
||||
|
||||
class _MockTransactionCustomerRepository extends Mock
|
||||
implements TransactionCustomerRepository {}
|
||||
|
||||
class _FakeStockTransactionCreateInput extends Fake
|
||||
implements StockTransactionCreateInput {}
|
||||
|
||||
@@ -28,26 +32,39 @@ class _FakeStockTransactionUpdateInput extends Fake
|
||||
class _FakeStockTransactionListFilter extends Fake
|
||||
implements StockTransactionListFilter {}
|
||||
|
||||
class _FakeTransactionCustomerCreateInput extends Fake
|
||||
implements TransactionCustomerCreateInput {}
|
||||
|
||||
class _FakeTransactionCustomerUpdateInput extends Fake
|
||||
implements TransactionCustomerUpdateInput {}
|
||||
|
||||
void main() {
|
||||
group('InboundController', () {
|
||||
late StockTransactionRepository transactionRepository;
|
||||
late InventoryLookupRepository lookupRepository;
|
||||
late TransactionLineRepository lineRepository;
|
||||
late TransactionCustomerRepository customerRepository;
|
||||
late InboundController controller;
|
||||
|
||||
setUpAll(() {
|
||||
registerFallbackValue(_FakeStockTransactionCreateInput());
|
||||
registerFallbackValue(_FakeStockTransactionUpdateInput());
|
||||
registerFallbackValue(_FakeStockTransactionListFilter());
|
||||
registerFallbackValue(_FakeTransactionCustomerCreateInput());
|
||||
registerFallbackValue(_FakeTransactionCustomerUpdateInput());
|
||||
registerFallbackValue(<TransactionCustomerCreateInput>[]);
|
||||
registerFallbackValue(<TransactionCustomerUpdateInput>[]);
|
||||
});
|
||||
|
||||
setUp(() {
|
||||
transactionRepository = _MockStockTransactionRepository();
|
||||
lookupRepository = _MockInventoryLookupRepository();
|
||||
lineRepository = _MockTransactionLineRepository();
|
||||
customerRepository = _MockTransactionCustomerRepository();
|
||||
controller = InboundController(
|
||||
transactionRepository: transactionRepository,
|
||||
lineRepository: lineRepository,
|
||||
customerRepository: customerRepository,
|
||||
lookupRepository: lookupRepository,
|
||||
);
|
||||
});
|
||||
@@ -156,6 +173,30 @@ void main() {
|
||||
verify(() => transactionRepository.delete(transaction.id!)).called(1);
|
||||
});
|
||||
|
||||
test('syncTransactionCustomers는 계획에 따라 저장소를 호출한다', () async {
|
||||
when(
|
||||
() => customerRepository.updateCustomers(any(), any()),
|
||||
).thenAnswer((_) async {});
|
||||
when(
|
||||
() => customerRepository.deleteCustomer(any()),
|
||||
).thenAnswer((_) async {});
|
||||
when(
|
||||
() => customerRepository.addCustomers(any(), any()),
|
||||
).thenAnswer((_) async {});
|
||||
|
||||
final plan = TransactionCustomerSyncPlan(
|
||||
createdCustomers: [TransactionCustomerCreateInput(customerId: 7)],
|
||||
updatedCustomers: [TransactionCustomerUpdateInput(id: 2, note: '메모')],
|
||||
deletedCustomerIds: const [5],
|
||||
);
|
||||
|
||||
await controller.syncTransactionCustomers(42, plan);
|
||||
|
||||
verify(() => customerRepository.updateCustomers(42, any())).called(1);
|
||||
verify(() => customerRepository.deleteCustomer(5)).called(1);
|
||||
verify(() => customerRepository.addCustomers(42, any())).called(1);
|
||||
});
|
||||
|
||||
test('submitTransaction은 refreshAfter가 true일 때 목록을 다시 불러온다', () async {
|
||||
final filter = StockTransactionListFilter(transactionTypeId: 1);
|
||||
final initial = _buildTransaction();
|
||||
|
||||
Reference in New Issue
Block a user