"""불러오기 [단가산출 만들기] 같은 내용 SK 씀(PLAN 733-1b · 요구서_572 3장 2). 북부청 임도(실물)를 임시 층에 → 같은 파일 안 같은 내용 SK 한 벌 · 바이트만 다른 사본 다시 = 새 SK 0 · 뒤 출처 = `본뜬.또` · 다시 = 그대로 · 위 층(회사) 같은 것 = `위층같음` 알림 · 출처마다 못옮김 · 다른 출처가 쓰는 SK 내용은 안 바꿈(떼어 냄 · 넘겨줌). """ import io import json import zipfile from M02_MasterTemplete import M02_Hopyo_Sangeun as sangeun from M02_MasterTemplete import M02_Library_Same as same from M02_MasterTemplete import M02_MasterTemplete_Store as store from M02_MasterTemplete import M02_Template_Layers as layers from resources.tester.test_m02_hopyo_excel import NORTH, URL, _post, client # noqa: F401 def _sks(folder) -> dict[str, dict]: paths = sorted((folder / "sangeun").glob("SK-*.json")) return {p.stem: json.loads(p.read_bytes()) for p in paths} def _maker(hp: str) -> sangeun.Maker: """블록 하나짜리 만들기(파일 · 맞춤셈 없이) — 쓰기 규칙만 봄.""" m = object.__new__(sangeun.Maker) m.first, m.blocks = {1: {"이름": "줄", "단위": "㎥"}}, {1: {"이름": "블록"}} m.hp, m.sure = {"키": hp, "파일": f"{hp}.xls"}, {"원본": ["personal", "7/42"]} m.same, m.reused, m.above = same.Same(), [], [] return m def _plan(code: str, lost: list) -> dict: keep = {"갈래": "기초", "엑셀품": {}, "못옮김": lost, "바탕": {"로직": code}, "입력값": {}} return {**keep, "자재표시": {}, "덮개": {}, "더한줄": [], "뺀줄": []} def test_같은내용_SK_출처마다_못옮김_떼어냄_넘겨줌(client): folder, at = layers.personal_dir(7, 42), ("personal", "7/42") one, two = _maker("HP-000001"), _maker("HP-000002") with store.at(folder): key = one.write(1, _plan("GF000113", []), None) assert two.write(1, _plan("GF000113", [{"id": "x"}]), None) == key # 같은 것 씀 assert two.reused == [{"번": 1, "키": key}] doc = _sks(folder)[key] assert sangeun.origin_of(doc, "HP-000002 단산1", at)["못옮김"] == [{"id": "x"}] assert sangeun.origin_of(doc, "HP-000001 단산1", at)["못옮김"] == [] assert sangeun.made(folder, "HP-000002", at) == {"HP-000002 단산1": key} # 뒤 출처가 바탕을 바꿈 = 떼어 냄 · 남의 SK 내용 그대로 moved = _maker("HP-000002").write(1, _plan("GF000114", []), key) assert moved != key and "또" not in _sks(folder)[key]["본뜬"] assert _sks(folder)[key]["바탕"]["로직"] == "GF000113" # 앞 출처가 바탕을 바꿈 = 뒤 출처에게 넘겨줌 assert _maker("HP-000003").write(1, _plan("GF000113", []), None) == key back = _maker("HP-000001").write(1, _plan("GF000114", []), key) assert back == moved # 바꾼 내용 = 이미 있는 같은 것 left = _sks(folder)[key] assert left["바탕"]["로직"] == "GF000113" and left["본뜬"]["키"] == "HP-000003 단산1" assert "또" not in left["본뜬"] and len(_sks(folder)) == 2