package tech.easyflow.datacenter.utils;

import org.junit.Assert;
import org.junit.Test;
import tech.easyflow.common.web.exceptions.BusinessException;

/**
 * {@link SqlInjectionUtils} 的单元测试。
 */
public class SqlInjectionUtilsTest {

    /**
     * 验证常见 Excel 表头标点能够作为数据库备注使用。
     */
    @Test
    public void shouldEscapeCommonExcelHeaderCharacters() {
        String comment = "金额（万元）/预算\n50% \\ '含税'";

        Assert.assertEquals("金额（万元）/预算 50% \\\\ ''含税''", SqlInjectionUtils.checkComment(comment));
    }

    /**
     * 验证控制字符仍会被拒绝，避免动态 DDL 出现不可见内容。
     */
    @Test(expected = BusinessException.class)
    public void shouldRejectControlCharacterInComment() {
        SqlInjectionUtils.checkComment("金额\u0000");
    }

    /**
     * 验证常见查询保留字能够被大小写无关地识别。
     */
    @Test
    public void shouldRecognizeCommonQueryKeywords() {
        Assert.assertTrue(SqlInjectionUtils.isSqlKeyword("Order"));
        Assert.assertTrue(SqlInjectionUtils.isSqlKeyword("GROUP"));
        Assert.assertTrue(SqlInjectionUtils.isSqlKeyword("limit"));
        Assert.assertFalse(SqlInjectionUtils.isSqlKeyword("model_name"));
        Assert.assertFalse(SqlInjectionUtils.isSqlKeyword(null));
    }
}
