Files
jdescopingtool/NEW/tests/JdeScoping.ExcelIO.Tests/WorksheetProtectorTests.cs
T
Joseph Doherty 5a798b089b feat(excelio): allow DeleteRows on protected worksheets
Enable users to delete rows in protected Excel worksheets for better
data management flexibility.
2026-01-19 00:44:13 -05:00

81 lines
3.2 KiB
C#

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();
}
}