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