# edited by glg
import pytest

from pypos.core.utils.sql_identifier_utils import (
    is_sql_identifier_valid,
    normalize_sql_identifier,
    quote_sql_identifier,
)


pytestmark = [pytest.mark.unit]


def test_quote_sql_identifier_valid():
    assert quote_sql_identifier("transaksi_data") == '"transaksi_data"'


def test_quote_sql_identifier_qualified_valid():
    assert quote_sql_identifier("t.id") == '"t"."id"'


def test_quote_sql_identifier_invalid_strict():
    with pytest.raises(ValueError):
        quote_sql_identifier("transaksi-data", strict=True)


def test_quote_sql_identifier_qualified_invalid_strict():
    with pytest.raises(ValueError):
        quote_sql_identifier("td.transaksi-id", strict=True)


def test_quote_sql_identifier_invalid_compat_mode():
    assert quote_sql_identifier("transaksi-data", strict=False) == '"transaksidata"'


def test_quote_sql_identifier_qualified_invalid_compat_mode():
    assert quote_sql_identifier("td.transaksi-id", strict=False) == '"td"."transaksiid"'


def test_normalize_sql_identifier_prefix_when_digit_in_compat_mode():
    assert normalize_sql_identifier("9table", strict=False) == "_9table"


def test_is_sql_identifier_valid():
    assert is_sql_identifier_valid("per_employee", strict=True) is True
    assert is_sql_identifier_valid("t.id", strict=True) is True
    assert is_sql_identifier_valid("per-employee", strict=True) is False
    assert is_sql_identifier_valid("t..id", strict=True) is False
