from pingcap_datapipelines.naming import safe_table_id, sql_string, table_prefix def test_safe_table_id_normalizes_source_names() -> None: assert safe_table_id("Account") == "account" assert safe_table_id("_System Action!") == "system_action" assert safe_table_id("123-table") == "t_123_table" def test_table_prefix_includes_source() -> None: assert table_prefix("nexuscrm", "Account") == "nexuscrm_account" def test_sql_string_uses_bigquery_compatible_escapes() -> None: assert sql_string("O'Brien") == '"O\'Brien"' assert sql_string("line\nfeed") == '"line\\nfeed"'