package com.cf.imes.module.system.enums.pay;

import org.junit.jupiter.api.Test;

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

/**
 * {@link ProductDurationUnitEnum} 的单元测试
 */
public class ProductDurationUnitEnumTest {

    @Test
    public void testFromStatus() {
        // 测试正常情况 - 年
        assertEquals(ProductDurationUnitEnum.YEAR, ProductDurationUnitEnum.fromStatus(0));
        
        // 测试正常情况 - 月
        assertEquals(ProductDurationUnitEnum.MONTH, ProductDurationUnitEnum.fromStatus(1));
        
        // 测试不存在的类型
        assertNull(ProductDurationUnitEnum.fromStatus(999));
        
        // 测试null值
        assertNull(ProductDurationUnitEnum.fromStatus(null));
    }

    @Test
    public void testGetDesc() {
        // 测试年描述
        assertEquals("duration.unit.year", ProductDurationUnitEnum.getDesc(0));
        
        // 测试月描述
        assertEquals("duration.unit.month", ProductDurationUnitEnum.getDesc(1));
        
        // 测试不存在的类型
        assertNull(ProductDurationUnitEnum.getDesc(999));
        
        // 测试null值
        assertNull(ProductDurationUnitEnum.getDesc(null));
    }

    @Test
    public void testValidArr() {
        // 测试validArr方法
        ProductDurationUnitEnum[] validArr = ProductDurationUnitEnum.validArr();
        assertEquals(1, validArr.length);
        assertEquals(ProductDurationUnitEnum.YEAR, validArr[0]);
    }

    @Test
    public void testEnumValues() {
        // 测试枚举值的基本属性
        assertEquals(0, ProductDurationUnitEnum.YEAR.getCode());
        assertEquals("duration.unit.year", ProductDurationUnitEnum.YEAR.getDesc());
        
        assertEquals(1, ProductDurationUnitEnum.MONTH.getCode());
        assertEquals("duration.unit.month", ProductDurationUnitEnum.MONTH.getDesc());
    }

    @Test
    public void testArrayMethod() {
        // 测试array()方法
        int[] arrays = ProductDurationUnitEnum.YEAR.array();
        assertEquals(2, arrays.length);
        assertTrue(contains(arrays, 0)); // YEAR
        assertTrue(contains(arrays, 1)); // MONTH
    }

    @Test
    public void testArraysField() {
        // 测试ARRAYS静态字段包含所有枚举值的code
        int[] arrays = ProductDurationUnitEnum.ARRAYS;
        assertEquals(2, arrays.length);
        assertTrue(contains(arrays, 0)); // YEAR
        assertTrue(contains(arrays, 1)); // MONTH
    }

    private boolean contains(int[] array, int value) {
        for (int i : array) {
            if (i == value) {
                return true;
            }
        }
        return false;
    }
}