package com.ruoyi.chargingPile.service.impl; import com.ruoyi.chargingPile.dto.SiteExcelDTO; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.poi.ExcelUtil; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.junit.jupiter.api.Test; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockMultipartFile; import java.io.ByteArrayInputStream; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; class SiteImportExcelTest { @Test void generatedTemplateCanBeOpenedAsXlsx() throws Exception { MockHttpServletResponse response = new MockHttpServletResponse(); ExcelUtil util = new ExcelUtil<>(SiteExcelDTO.class); util.importTemplateExcel(response, "站点导入模板", "填写说明"); byte[] content = response.getContentAsByteArray(); assertTrue(content.length > 4); assertEquals('P', content[0]); assertEquals('K', content[1]); assertDoesNotThrow(() -> { try (Workbook ignored = WorkbookFactory.create(new ByteArrayInputStream(content))) { // Opening and closing the generated workbook verifies the complete XLSX ZIP structure. } }); } @Test void corruptWorkbookReturnsReadableBusinessError() { SiteServiceImpl service = new SiteServiceImpl(); MockMultipartFile file = new MockMultipartFile( "file", "站点导入模板.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", new byte[]{'P', 'K', 3, 4, 1, 2, 3}); ServiceException error = assertThrows(ServiceException.class, () -> service.importSites(file, false)); assertEquals("Excel文件已损坏或格式不正确,请重新下载站点导入模板后填写", error.getMessage()); } }