| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- """储物格下拉关键词:须支持完整 fullSlotCode 模糊匹配。"""
- from types import SimpleNamespace
- from app.crud.storage_facility import (
- _build_node_path_cache,
- _collect_slot_host_node_ids,
- _exact_node_ids_for_path,
- _leaf_node_ids_for_path_prefix,
- _resolve_path_keyword,
- _slot_matches_select_keyword,
- _slot_to_dict,
- )
- from app.services.storage_facility_code import build_full_slot_code
- def _facility(node_id: str, node_code: str, parent_id: str = "0") -> SimpleNamespace:
- return SimpleNamespace(
- id=node_id,
- node_code=node_code,
- parent_id=parent_id,
- node_name=node_code,
- )
- def _slot(slot_id: str, facility_node_id: str, slot_code: str, remark: str = "") -> SimpleNamespace:
- return SimpleNamespace(
- id=slot_id,
- facility_node_id=facility_node_id,
- slot_code=slot_code,
- slot_status="空",
- occupied_count=0,
- tenant_no="zkxw",
- order_num=1,
- remark=remark,
- create_time=None,
- update_time=None,
- )
- def test_full_slot_code_substring_match():
- facilities = {
- "box": _facility("box", "BOX01", "shelf"),
- "shelf": _facility("shelf", "A1", "root"),
- "root": _facility("root", "FRZ", "0"),
- }
- slot = _slot("s1", "box", "03")
- full = build_full_slot_code("box", "03", facilities)
- assert full == "FRZ-A1-BOX01-03"
- row = _slot_to_dict(slot, facilities)
- assert row["fullSlotCode"] == full
- assert _slot_matches_select_keyword(slot, "FRZ-A1-BOX01-03", facilities, set())
- assert _slot_matches_select_keyword(slot, "BOX01-03", facilities, set())
- assert _slot_matches_select_keyword(slot, "FRZ-A1", facilities, set())
- def test_local_slot_code_and_remark_still_match():
- facilities = {"box": _facility("box", "BOX01", "0")}
- slot = _slot("s1", "box", "07", remark="备用格")
- assert _slot_matches_select_keyword(slot, "07", facilities, set())
- assert _slot_matches_select_keyword(slot, "备用", facilities, set())
- def test_facility_node_name_match():
- facilities = {
- "box": _facility("box", "BOX01", "0"),
- }
- facilities["box"].node_name = "液氮盒A"
- slot = _slot("s1", "box", "01")
- assert _slot_matches_select_keyword(slot, "液氮", facilities, {"box"})
- def test_leaf_node_ids_for_path_prefix():
- facilities = {
- "box": _facility("box", "BOX01", "shelf"),
- "shelf": _facility("shelf", "A1", "root"),
- "root": _facility("root", "FRZ", "0"),
- }
- ids = _leaf_node_ids_for_path_prefix(facilities, "FRZ-A1")
- assert ids == {"box", "shelf", "root"}
- assert "box" in _leaf_node_ids_for_path_prefix(facilities, "BOX01")
- def test_no_match_returns_false():
- facilities = {"box": _facility("box", "BOX01", "0")}
- slot = _slot("s1", "box", "01")
- assert not _slot_matches_select_keyword(slot, "NOT-EXIST", facilities, set())
- def test_resolve_path_keyword_for_box_prefix():
- facilities = {
- "box": _facility("box", "2", "shelf"),
- "shelf": _facility("shelf", "1", "root"),
- "root": _facility("root", "1", "0"),
- }
- path_cache = _build_node_path_cache(facilities)
- assert _resolve_path_keyword(path_cache, "1-1-2-") == ("1-1-2", None)
- assert _resolve_path_keyword(path_cache, "1-1-2") == ("1-1-2", None)
- assert _resolve_path_keyword(path_cache, "1-1-2-1") == ("1-1-2", "1")
- assert _exact_node_ids_for_path(path_cache, "1-1-2") == ["box"]
- def test_trailing_dash_matches_all_slots_in_box():
- facilities = {
- "box": _facility("box", "2", "shelf"),
- "shelf": _facility("shelf", "1", "root"),
- "root": _facility("root", "1", "0"),
- }
- slots = [_slot("s1", "box", "1"), _slot("s2", "box", "2")]
- kw = "1-1-2-"
- for slot in slots:
- assert _slot_matches_select_keyword(slot, kw, facilities, set())
- def test_non_leaf_path_expands_to_descendant_leaves():
- facilities = {
- "layer2": _facility("layer2", "2", "shelf"),
- "layer10": _facility("layer10", "10", "shelf"),
- "shelf": _facility("shelf", "1", "root"),
- "root": _facility("root", "1", "0"),
- }
- facilities["layer2"].is_leaf = 1
- facilities["layer10"].is_leaf = 1
- path_cache = _build_node_path_cache(facilities)
- host_ids = _collect_slot_host_node_ids(path_cache, facilities, "1-1")
- assert set(host_ids) == {"layer2", "layer10"}
- assert _collect_slot_host_node_ids(path_cache, facilities, "1-1-2") == ["layer2"]
|