package com.sckw.transport.service;

import org.junit.Assert;
import org.junit.Test;

import java.math.BigDecimal;

/**
 * 贸易订单运输信息查询服务单元测试。
 *
 * @author system
 * @date 2026-05-08
 */
public class TradeOrderTransportInfoServiceTest {

    /**
     * 身份证号脱敏应保留前五位和后四位。
     */
    @Test
    public void maskIdCardShouldKeepPrefixAndSuffix() {
        String actual = TradeOrderTransportInfoService.maskIdCard("519001199001011718");

        Assert.assertEquals("51900****1718", actual);
    }

    /**
     * 身份证号为空或长度不足时直接返回原值。
     */
    @Test
    public void maskIdCardShouldReturnOriginalWhenInvalid() {
        Assert.assertNull(TradeOrderTransportInfoService.maskIdCard(null));
        Assert.assertEquals("1234567", TradeOrderTransportInfoService.maskIdCard("1234567"));
    }

    /**
     * firstNotNull 应返回第一个非空值。
     */
    @Test
    public void firstNotNullShouldReturnFirstAvailableValue() {
        String actual = TradeOrderTransportInfoService.firstNotNull(null, "A", "B");

        Assert.assertEquals("A", actual);
    }

    /**
     * 净重计算应使用毛重减皮重。
     */
    @Test
    public void subtractShouldCalculateNetWeight() {
        BigDecimal actual = TradeOrderTransportInfoService.subtract(new BigDecimal("36.83"), new BigDecimal("12.54"));

        Assert.assertEquals(new BigDecimal("24.29"), actual);
    }
}
