68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
"""宿主导入模板表头 / lookup 展示值契约(replaces:import)。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import csv
|
||
import tempfile
|
||
import unittest
|
||
from pathlib import Path
|
||
|
||
|
||
class TableFileImportTests(unittest.TestCase):
|
||
def test_normalize_header_host_leading_and_legacy_trailing_star(self) -> None:
|
||
from service.table_file_import import map_headers, normalize_header
|
||
|
||
self.assertEqual(normalize_header("*长尾词"), "长尾词")
|
||
self.assertEqual(normalize_header("* 长尾词"), "长尾词")
|
||
self.assertEqual(normalize_header("长尾词*"), "长尾词")
|
||
self.assertEqual(normalize_header("*关键词*"), "关键词")
|
||
self.assertEqual(normalize_header("*关键词(必填)"), "关键词")
|
||
self.assertEqual(normalize_header("名称"), "名称")
|
||
|
||
aliases = {
|
||
"phrase": ("长尾词", "phrase", "问题"),
|
||
"keyword_id": ("所属关键词", "keyword_id", "关键词编号"),
|
||
}
|
||
mapping = map_headers(["*长尾词", "所属关键词"], aliases)
|
||
self.assertEqual(mapping.get("phrase"), 0)
|
||
self.assertEqual(mapping.get("keyword_id"), 1)
|
||
|
||
mapping_legacy = map_headers(["长尾词*", "所属关键词"], aliases)
|
||
self.assertEqual(mapping_legacy.get("phrase"), 0)
|
||
|
||
def test_optional_int_accepts_lookup_display_label(self) -> None:
|
||
from service.table_file_import import optional_int
|
||
|
||
self.assertEqual(optional_int("157"), 157)
|
||
self.assertEqual(optional_int("157 · 波兰小包专线"), 157)
|
||
self.assertEqual(optional_int("157·波兰小包专线"), 157)
|
||
self.assertEqual(optional_int("2 · 通用私信-留资"), 2)
|
||
self.assertIsNone(optional_int(""))
|
||
with self.assertRaises(ValueError):
|
||
optional_int("波兰小包专线")
|
||
|
||
def test_load_table_rows_skips_example_and_maps_leading_star(self) -> None:
|
||
from service.table_file_import import load_table_rows
|
||
|
||
aliases = {
|
||
"phrase": ("长尾词",),
|
||
"keyword_id": ("所属关键词",),
|
||
}
|
||
with tempfile.TemporaryDirectory() as tmp:
|
||
path = Path(tmp) / "rows.csv"
|
||
with path.open("w", encoding="utf-8-sig", newline="") as fh:
|
||
writer = csv.writer(fh)
|
||
writer.writerow(["*长尾词", "所属关键词"])
|
||
writer.writerow(["【示例】示例长尾词", "152 · 示例"])
|
||
writer.writerow(["波兰小包专线怎么选", "157 · 波兰小包专线"])
|
||
|
||
rows = load_table_rows(str(path), aliases=aliases)
|
||
self.assertEqual(len(rows), 1)
|
||
self.assertEqual(rows[0]["phrase"], "波兰小包专线怎么选")
|
||
self.assertEqual(rows[0]["keyword_id"], "157 · 波兰小包专线")
|
||
self.assertEqual(rows[0]["_row"], "3")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|