云
2 天以前 657698fd2fb32794932474648dbaee9e284e38c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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);
    }
}