From 43aab58c9ecb1203770ba382efbdbae299ca87ec Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期一, 26 十月 2026 15:12:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_business' into dev_business
---
yudao-module-srm/src/test/java/cn/iocoder/yudao/module/srm/service/supplier/SrmSupplierImportAdapterTest.java | 121 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 121 insertions(+), 0 deletions(-)
diff --git a/yudao-module-srm/src/test/java/cn/iocoder/yudao/module/srm/service/supplier/SrmSupplierImportAdapterTest.java b/yudao-module-srm/src/test/java/cn/iocoder/yudao/module/srm/service/supplier/SrmSupplierImportAdapterTest.java
new file mode 100644
index 0000000..c477d89
--- /dev/null
+++ b/yudao-module-srm/src/test/java/cn/iocoder/yudao/module/srm/service/supplier/SrmSupplierImportAdapterTest.java
@@ -0,0 +1,121 @@
+package cn.iocoder.yudao.module.srm.service.supplier;
+
+import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierSaveReqVO;
+import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierDO;
+import cn.iocoder.yudao.module.srm.dal.mysql.SrmSupplierMapper;
+import cn.iocoder.yudao.module.system.api.agent.imports.AgentImportCommitReqVO;
+import cn.iocoder.yudao.module.system.api.agent.imports.AgentImportPreflightReqVO;
+import cn.iocoder.yudao.module.system.api.agent.imports.AgentImportPreflightRespVO;
+import cn.iocoder.yudao.module.system.api.agent.imports.AgentImportRowReceipt;
+import cn.iocoder.yudao.module.system.framework.agent.AgentPrincipal;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.*;
+
+class SrmSupplierImportAdapterTest {
+
+ private static final AgentPrincipal PRINCIPAL = new AgentPrincipal(1L, "live");
+
+ private SrmSupplierImportAdapter adapter;
+ private SrmSupplierService supplierService;
+ private SrmSupplierMapper supplierMapper;
+
+ @BeforeEach
+ void setUp() {
+ adapter = new SrmSupplierImportAdapter();
+ supplierService = mock(SrmSupplierService.class);
+ supplierMapper = mock(SrmSupplierMapper.class);
+ ReflectionTestUtils.setField(adapter, "supplierService", supplierService);
+ ReflectionTestUtils.setField(adapter, "supplierMapper", supplierMapper);
+ }
+
+ @Test
+ void preflightMarksCreateSkipAndBlockedRows() {
+ SrmSupplierDO existing = new SrmSupplierDO();
+ existing.setId(7L);
+ when(supplierMapper.selectByCode("SUP-OLD")).thenReturn(existing);
+ when(supplierMapper.selectByCode("SUP-NEW")).thenReturn(null);
+
+ AgentImportPreflightRespVO plan = adapter.preflight(PRINCIPAL, request(
+ row("r1", "SUP-NEW", "鏂颁緵搴斿晢"),
+ row("r2", "SUP-OLD", "鏃т緵搴斿晢"),
+ row("r3", "", "缂虹紪鐮�")));
+
+ assertEquals("CREATE", plan.getRows().get(0).getAction());
+ assertEquals("SKIP", plan.getRows().get(1).getAction());
+ assertEquals(7L, plan.getRows().get(1).getTargetId());
+ assertEquals("BLOCKED", plan.getRows().get(2).getAction());
+ assertEquals(1, plan.getSummary().getCreate());
+ assertEquals(1, plan.getSummary().getSkip());
+ assertEquals(1, plan.getSummary().getBlocked());
+ assertFalse(plan.getCanCommit());
+ assertNotNull(plan.getPreflightHash());
+ assertTrue(plan.getRows().get(1).getWarnings().stream()
+ .anyMatch(item -> "SUPPLIER_EXISTS".equals(item.getCode())));
+ }
+
+ @Test
+ void duplicateCodeInFileBlocksAllOccurrences() {
+ when(supplierMapper.selectByCode(any())).thenReturn(null);
+
+ AgentImportPreflightRespVO plan = adapter.preflight(PRINCIPAL, request(
+ row("r1", "SUP-DUP", "渚涘簲鍟咥"),
+ row("r2", "SUP-DUP", "渚涘簲鍟咮")));
+
+ assertEquals("BLOCKED", plan.getRows().get(0).getAction());
+ assertEquals("BLOCKED", plan.getRows().get(1).getAction());
+ assertEquals(2, plan.getSummary().getBlocked());
+ assertFalse(plan.getCanCommit());
+ }
+
+ @Test
+ void preflightHashIsStableForSameInput() {
+ when(supplierMapper.selectByCode(any())).thenReturn(null);
+ AgentImportPreflightReqVO request = request(row("r1", "SUP-NEW", "鏂颁緵搴斿晢"));
+
+ assertEquals(adapter.preflight(PRINCIPAL, request).getPreflightHash(),
+ adapter.preflight(PRINCIPAL, request).getPreflightHash());
+ }
+
+ @Test
+ void commitCreatesSupplierAndReturnsReceipt() {
+ when(supplierService.createSupplier(any())).thenReturn(99L);
+ AgentImportPreflightReqVO.Row row = row("r1", "SUP-NEW", "鏂颁緵搴斿晢");
+
+ AgentImportRowReceipt receipt = adapter.commitRow(PRINCIPAL, new AgentImportCommitReqVO(),
+ AgentImportPreflightRespVO.Row.builder().candidateId("r1").action("CREATE").build(), row);
+
+ assertEquals("CREATE", receipt.action());
+ assertEquals(99L, receipt.targetId());
+ assertEquals("SUP-NEW", receipt.code());
+ verify(supplierService).createSupplier(any(SrmSupplierSaveReqVO.class));
+ }
+
+ private static AgentImportPreflightReqVO request(AgentImportPreflightReqVO.Row... rows) {
+ AgentImportPreflightReqVO request = new AgentImportPreflightReqVO();
+ request.setAttachmentId(1L);
+ request.setSourceSha256("a".repeat(64));
+ request.setProposalRevision("0");
+ request.setRows(List.of(rows));
+ return request;
+ }
+
+ private static AgentImportPreflightReqVO.Row row(String candidateId, String code, String name) {
+ Map<String, String> values = new LinkedHashMap<>();
+ values.put("code", code);
+ values.put("name", name);
+ AgentImportPreflightReqVO.Row row = new AgentImportPreflightReqVO.Row();
+ row.setCandidateId(candidateId);
+ row.setRowNo(1);
+ row.setValues(values);
+ return row;
+ }
+}
--
Gitblit v1.9.3