using ClosedXML.Excel; using JdeScoping.ExcelIO.Formatting; using Shouldly; using Xunit; namespace JdeScoping.ExcelIO.Tests; public class WorksheetProtectorTests { [Fact] public void ApplyProtection_ProtectsWorksheet() { using var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Test"); WorksheetProtector.ApplyProtection(worksheet, "TestPassword"); worksheet.Protection.IsProtected.ShouldBeTrue(); } [Fact] public void ApplyProtection_AllowsSpecifiedOperations() { using var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Test"); WorksheetProtector.ApplyProtection(worksheet, "TestPassword"); // Check that specified operations are allowed worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.DeleteColumns).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.DeleteRows).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.AutoFilter).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.FormatCells).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.FormatColumns).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.FormatRows).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.SelectLockedCells).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.SelectUnlockedCells).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.EditObjects).ShouldBeTrue(); worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.Sort).ShouldBeTrue(); } [Fact] public void ApplyProtection_AllowsDeleteRows() { using var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Test"); WorksheetProtector.ApplyProtection(worksheet, "TestPassword"); // DeleteRows should be allowed worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.DeleteRows).ShouldBeTrue(); } [Fact] public void ApplyCriteriaProtection_ProtectsWorksheet() { using var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Test"); WorksheetProtector.ApplyCriteriaProtection(worksheet, "CriteriaPassword"); worksheet.Protection.IsProtected.ShouldBeTrue(); } [Fact] public void UnlockExtensionArea_UnlocksSpecifiedRange() { using var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Test"); // First, set some cells to locked (default) worksheet.Range(1, 1, 10, 5).Style.Protection.Locked = true; WorksheetProtector.UnlockExtensionArea(worksheet, 10, 5, 100, 100); // Extension area should be unlocked var extensionCell = worksheet.Cell(1, 6); extensionCell.Style.Protection.Locked.ShouldBeFalse(); } }