package cn.iocoder.yudao.module.mes.service.energy; import cn.iocoder.yudao.module.mes.controller.admin.energy.vo.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.*; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.mock.web.MockHttpServletResponse; import java.io.ByteArrayInputStream; import java.time.LocalDate; import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class EnergyExportServiceTest { @Mock EnergyRecordService recordService; @InjectMocks EnergyExportService exportService; @Test void analysisProducesReadableWorkbookWithScopeAndSeparateUnits() throws Exception { when(recordService.analysis(any())).thenReturn(EnergyRecordService.aggregate(List.of())); var req = new EnergyAnalysisReqVO(); req.setStartDate(LocalDate.of(2026,10,1)); req.setEndDate(LocalDate.of(2026,10,12)); var response = new MockHttpServletResponse(); exportService.analysis(req, response); try (var workbook = WorkbookFactory.create(new ByteArrayInputStream(response.getContentAsByteArray()))) { assertEquals(4, workbook.getNumberOfSheets()); assertEquals("统计口径", workbook.getSheetAt(0).getSheetName()); assertEquals("2026-10-01", workbook.getSheetAt(0).getRow(1).getCell(1).getStringCellValue()); assertEquals("m³", workbook.getSheetAt(1).getRow(1).getCell(2).getStringCellValue()); assertEquals("kWh", workbook.getSheetAt(1).getRow(2).getCell(2).getStringCellValue()); assertEquals("t", workbook.getSheetAt(1).getRow(3).getCell(2).getStringCellValue()); assertEquals(0, workbook.getSheetAt(1).getRow(1).getCell(4).getNumericCellValue()); } assertTrue(response.getContentType().contains("spreadsheetml")); } @Test void oversizedLedgerExportFailsBeforeWritingResponse() { when(recordService.page(any())).thenReturn(new PageResult<>(List.of(), 50_001L)); var response = new MockHttpServletResponse(); assertThrows(RuntimeException.class, () -> exportService.records(new EnergyRecordPageReqVO(), response)); assertEquals(0, response.getContentAsByteArray().length); } }