package com.ruoyi.order.service.impl; import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; import com.ruoyi.order.api.vo.TransactionRecordMessageVO; import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Arrays; import static org.junit.jupiter.api.Assertions.assertEquals; class ChargingSimulationSupportTest { @Test void buildsOneKwhRecordForSelectedTariffPeriod() { AccountingStrategyDetailOrder first = detail(1, 1, "00:00", "12:00"); AccountingStrategyDetailOrder second = detail(2, 3, "12:00", "23:59"); LocalDateTime endTime = LocalDateTime.of(2026, 7, 11, 15, 30, 0); ChargingSimulationSupport.PreparedSimulation prepared = ChargingSimulationSupport.prepare( "CD202607110001", Arrays.asList(first, second), new BigDecimal("0.03"), new BigDecimal("0.02"), endTime); assertEquals(second, prepared.getTariff()); assertEquals(new BigDecimal("0.03"), second.getElectrovalence()); assertEquals(new BigDecimal("0.02"), second.getServiceCharge()); assertEquals(new BigDecimal("0.02"), second.getCostServiceCharge()); TransactionRecordMessageVO record = prepared.getRecord(); assertEquals("CD202607110001", record.getTransaction_serial_number()); assertEquals(BigDecimal.ONE, record.getTotal_electricity()); assertEquals(BigDecimal.ONE, record.getLoss_total_electricity()); assertEquals(BigDecimal.ONE, record.getFlat_charge2()); assertEquals(new BigDecimal("0.05"), record.getPayment_amount()); } private AccountingStrategyDetailOrder detail(int id, int type, String start, String end) { AccountingStrategyDetailOrder detail = new AccountingStrategyDetailOrder(); detail.setId(id); detail.setType(type); detail.setStartTime(start); detail.setEndTime(end); return detail; } }