package com.cf.imes.module.system.dal.dataobject.funds.statistics;

import org.junit.jupiter.api.Test;

import java.math.BigDecimal;
import java.math.BigInteger;

import static org.junit.jupiter.api.Assertions.assertTrue;

/**
 * {@link FundsTradeTypeGroupStatisticsDO} 的单元测试
 *
 * @author Gqr
 * @since 2025/12/15 11:08
 */
class FundsTradeTypeGroupStatisticsDOTest {
    private static final BigDecimal TWO = new BigDecimal(BigInteger.TWO);

    private FundsTradeTypeGroupStatisticsDO dto(String date, BigDecimal amount) {
        return FundsTradeTypeGroupStatisticsDO.builder()
                .date(date)
                .amount(amount)
                .build();
    }

    @Test
    void testCompareDifferentYear() {
        // 年份大 > 小
        assertTrue(dto("2023-01-02", BigDecimal.ONE).compareTo(dto("2022-01-02", BigDecimal.ONE)) > 0);
    }

    @Test
    void testCompareDifferentMonth() {
        // 月份大 > 小
        assertTrue(dto("2023-05-01", BigDecimal.ONE).compareTo(dto("2023-03-01", BigDecimal.ONE)) > 0);
    }

    @Test
    void testCompareDifferentWeek() {
        // 周 大 > 小
        assertTrue(dto("2023-05-02", BigDecimal.ONE).compareTo(dto("2023-05-01", BigDecimal.ONE)) > 0);
        // 相同周 状态小 < 大
        assertTrue(dto("2023-05-02", BigDecimal.ONE).compareTo(dto("2023-05-02", TWO)) < 0);
    }

    @Test
    void testBothWithoutWeek() {
        // 都不带周 状态大 > 小
        assertTrue(dto("2023-05", new BigDecimal(2)).compareTo(dto("2023-05", BigDecimal.ONE)) > 0);
    }

    @Test
    void testOneWithoutMonth() {
        // 前不带月， 状态小 < 大
        assertTrue(dto("2023", BigDecimal.ONE).compareTo(dto("2023-05", TWO)) < 0);
        // 后不带月， 状态大 > 小
        assertTrue(dto("2023-05", TWO).compareTo(dto("2023", BigDecimal.ONE)) > 0);
    }

    @Test
    void testOneWithoutWeek() {
        // 前不带周， 状态小 < 大
        assertTrue(dto("2023-05", BigDecimal.ONE).compareTo(dto("2023-05-02", TWO)) < 0);
        // 后不带周， 状态大 > 小
        assertTrue(dto("2023-05-02", TWO).compareTo(dto("2023-05", BigDecimal.ONE)) > 0);
    }
}
