using CareFix.Api.Security; using Xunit; namespace CareFix.Tests; public class PiiMaskerTests { private readonly PiiMasker _m = new(); [Theory] [InlineData("PAT_NAME")] [InlineData("PATIENT_NAME")] [InlineData("FIRSTNAME")] [InlineData("PAT_MOBILE")] [InlineData("CONTACT_NO")] [InlineData("AADHAR_NO")] [InlineData("ABHA_ADDRESS")] [InlineData("EMAIL_ID")] [InlineData("ADDRESS")] public void Masks_patient_identifying_columns(string column) => Assert.Equal(PiiMasker.Mask, _m.MaskValue(column, "anything", null)); [Theory] [InlineData("ITEM_NAME")] // must stay: the AI needs to see which item [InlineData("GRPNAME")] [InlineData("DEPT_NAME")] [InlineData("DOCTOR")] [InlineData("BILL_ID")] [InlineData("CANCEL_FLAG")] public void Keeps_columns_the_diagnosis_needs(string column) => Assert.Equal("PAN 40 TAB", _m.MaskValue(column, "PAN 40 TAB", null)); [Fact] public void Masks_columns_the_dictionary_flags() { var flagged = new HashSet(StringComparer.OrdinalIgnoreCase) { "GUARDIAN" }; Assert.Equal(PiiMasker.Mask, _m.MaskValue("GUARDIAN", "someone", flagged)); Assert.Equal("someone", _m.MaskValue("GUARDIAN", "someone", null)); } [Fact] public void Masks_contact_details_inside_free_text() { var masked = _m.MaskText("Call patient on 9820123456 or mail demo.patient@example.com, Aadhaar 1234 5678 9012"); Assert.DoesNotContain("9820123456", masked); Assert.DoesNotContain("example.com", masked); Assert.DoesNotContain("1234 5678 9012", masked); } [Fact] public void Leaves_identifiers_alone() { // Bill numbers, UHIDs and IPD numbers are what the AI works with. Assert.Equal("Bill 77431 for IPD 8871 dated 14 Sep", _m.MaskText("Bill 77431 for IPD 8871 dated 14 Sep")); Assert.Equal(77431L, _m.MaskValue("BILL_ID", 77431L, null)); Assert.Equal("240518", _m.MaskValue("UHID", "240518", null)); } [Fact] public void Nulls_stay_null() => Assert.Null(_m.MaskValue("PAT_NAME", null, null)); }