26ff8d9b4f
Set up repository with legacy .NET Framework 4.8 source (OLD/), new .NET 10 Blazor solution (NEW/), OpenSpec specifications, documentation, and project configuration.
80 lines
3.1 KiB
C#
80 lines
3.1 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.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_DoesNotAllowDeleteRows()
|
|
{
|
|
using var workbook = new XLWorkbook();
|
|
var worksheet = workbook.Worksheets.Add("Test");
|
|
|
|
WorksheetProtector.ApplyProtection(worksheet, "TestPassword");
|
|
|
|
// DeleteRows should NOT be allowed
|
|
worksheet.Protection.AllowedElements.HasFlag(XLSheetProtectionElements.DeleteRows).ShouldBeFalse();
|
|
}
|
|
|
|
[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();
|
|
}
|
|
}
|