using SheetMe.Core.Catalog; namespace SheetMe.Core.Tests; /// /// '수정' 권한 규칙 고정 — 레거시 TK_MODIFY 가시성 분기를 옮긴 것. /// /// 이 표가 느슨해지면 전산실이 아닌 사람이 지금 쓰이는 버전을 제자리에서 고치게 된다. /// 수정은 새 버전을 만들지 않으므로 되돌릴 표식이 이력 한 행뿐이고, /// E_SctMst 를 건드리지 않아 새 컨트롤은 조용히 배선에서 빠진다. /// 반대로 너무 조이면 지금 이 일을 하고 있는 전산실이 못 쓴다. /// [TestClass] public sealed class ModifyPolicyTests { #region Methods [TestMethod] public void 기본_규칙은_전산실만() { Assert.IsTrue(ModifyPolicy.CanModify("ABC", "EDPS", "011825", string.Empty)); Assert.IsFalse(ModifyPolicy.CanModify("ABC", "NURS", "011825", string.Empty)); Assert.IsFalse(ModifyPolicy.CanModify("ABC", string.Empty, "011825", string.Empty)); } [TestMethod] public void 두_병원은_총무_구매도_쓴다() { // 레거시 frmSheetDesigner.vb:1033-1038 foreach (var dep in new[] { "EDPS", "SALO", "SAVE" }) { Assert.IsTrue(ModifyPolicy.CanModify("HANKOOK", dep, "011825", string.Empty), dep); Assert.IsTrue(ModifyPolicy.CanModify("GNRH", dep, "011825", string.Empty), dep); } Assert.IsFalse(ModifyPolicy.CanModify("HANKOOK", "NURS", "011825", string.Empty)); } [TestMethod] public void 넓은_병원_규칙이_전산실_규칙보다_먼저다() { // HANKOOK 에서 SALO 는 전산실이 아니지만 허용된다 — 순서가 뒤집히면 이 사람이 막힌다. Assert.IsTrue(ModifyPolicy.CanModify("HANKOOK", "SALO", "누구든", string.Empty)); } [TestMethod] public void 신규_개원_병원은_사내_계정만() { // 레거시 :1042-1048 — HspStrDte >= 20250501 Assert.IsTrue(ModifyPolicy.CanModify("XYZ", "NURS", "MSYS", "20250501")); Assert.IsTrue(ModifyPolicy.CanModify("XYZ", "NURS", "MSYS", "20260101")); // 그 병원에서는 전산실이어도 안 된다 Assert.IsFalse(ModifyPolicy.CanModify("XYZ", "EDPS", "011825", "20250501")); // 경계 하루 전은 부서 규칙으로 떨어진다 Assert.IsTrue(ModifyPolicy.CanModify("XYZ", "EDPS", "011825", "20250430")); Assert.IsFalse(ModifyPolicy.CanModify("XYZ", "NURS", "MSYS", "20250430")); } [TestMethod] public void 개원일을_모르면_부서_규칙으로_떨어진다() { // 세션에 HspStrDte 가 없다. 빈 문자열은 20250501 보다 작으므로 그 갈래가 안 걸린다 — // 레거시의 다수 경로와 같은 판정이다. 이 동작이 바뀌면 전산실이 통째로 막힌다. Assert.IsTrue(ModifyPolicy.CanModify("XYZ", "EDPS", "011825", string.Empty)); Assert.IsFalse(ModifyPolicy.CanModify("XYZ", "NURS", "011825", string.Empty)); } [TestMethod] public void 막힌_이유가_갈래마다_다르다() { // "권한이 없습니다"만 말하면 누구에게 물어야 할지 모른다. StringAssert.Contains(ModifyPolicy.DenyReason("HANKOOK", "011825", string.Empty), "총무"); StringAssert.Contains(ModifyPolicy.DenyReason("XYZ", "011825", "20250501"), "MSYS"); StringAssert.Contains(ModifyPolicy.DenyReason("XYZ", "011825", string.Empty), "전산실"); } [TestMethod] public void 대소문자를_가리지_않는다() { Assert.IsTrue(ModifyPolicy.CanModify("hankook", "edps", "x", string.Empty)); Assert.IsTrue(ModifyPolicy.CanModify("XYZ", "NURS", "msys", "20250501")); } #endregion }