test(17-02): add failing tests for group pill expansion and backward compatibility
- BuildHtml_NoGroupMembers_IdenticalToDefault - BuildHtml_WithGroupMembers_RendersExpandablePill - BuildHtml_WithGroupMembers_RendersHiddenMemberSubRow - BuildHtml_WithEmptyMemberList_RendersMembersUnavailable - BuildHtml_ContainsToggleGroupJs - BuildHtml_Simplified_WithGroupMembers_RendersExpandablePill
This commit is contained in:
@@ -5,15 +5,14 @@ namespace SharepointToolbox.Tests.Services.Export;
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tests for PERM-06: HTML export output.
|
/// Tests for PERM-06: HTML export output.
|
||||||
/// These tests reference HtmlExportService which will be implemented in Plan 03.
|
|
||||||
/// Until Plan 03 runs they will fail to compile — that is expected.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class HtmlExportServiceTests
|
public class HtmlExportServiceTests
|
||||||
{
|
{
|
||||||
private static PermissionEntry MakeEntry(
|
private static PermissionEntry MakeEntry(
|
||||||
string users, string userLogins,
|
string users, string userLogins,
|
||||||
string url = "https://contoso.sharepoint.com/sites/A") =>
|
string url = "https://contoso.sharepoint.com/sites/A",
|
||||||
new("Web", "Site A", url, true, users, userLogins, "Read", "Direct Permissions", "User");
|
string principalType = "User") =>
|
||||||
|
new("Web", "Site A", url, true, users, userLogins, "Read", "Direct Permissions", principalType);
|
||||||
|
|
||||||
private static ReportBranding MakeBranding(bool msp = true, bool client = false)
|
private static ReportBranding MakeBranding(bool msp = true, bool client = false)
|
||||||
{
|
{
|
||||||
@@ -22,6 +21,13 @@ public class HtmlExportServiceTests
|
|||||||
return new ReportBranding(mspLogo, clientLogo);
|
return new ReportBranding(mspLogo, clientLogo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IReadOnlyDictionary<string, IReadOnlyList<ResolvedMember>> MakeGroupMembers(
|
||||||
|
string groupName, params ResolvedMember[] members) =>
|
||||||
|
new Dictionary<string, IReadOnlyList<ResolvedMember>>(StringComparer.OrdinalIgnoreCase)
|
||||||
|
{
|
||||||
|
[groupName] = members.ToList()
|
||||||
|
};
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void BuildHtml_WithKnownEntries_ContainsUserNames()
|
public void BuildHtml_WithKnownEntries_ContainsUserNames()
|
||||||
{
|
{
|
||||||
@@ -87,4 +93,79 @@ public class HtmlExportServiceTests
|
|||||||
Assert.Contains("data:image/png;base64,bXNw", html);
|
Assert.Contains("data:image/png;base64,bXNw", html);
|
||||||
Assert.Contains("data:image/jpeg;base64,Y2xpZW50", html);
|
Assert.Contains("data:image/jpeg;base64,Y2xpZW50", html);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ── Group expansion tests (Phase 17) ──────────────────────────────────────
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuildHtml_NoGroupMembers_IdenticalToDefault()
|
||||||
|
{
|
||||||
|
var entry = MakeEntry("Site Members", "i:0#.f|membership|group@contoso.com", principalType: "SharePointGroup");
|
||||||
|
var svc = new HtmlExportService();
|
||||||
|
var htmlDefault = svc.BuildHtml(new[] { entry });
|
||||||
|
var htmlNullNull = svc.BuildHtml(new[] { entry }, null, null);
|
||||||
|
|
||||||
|
Assert.Equal(htmlDefault, htmlNullNull);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuildHtml_WithGroupMembers_RendersExpandablePill()
|
||||||
|
{
|
||||||
|
var entry = MakeEntry("Site Members", "i:0#.f|membership|group@contoso.com", principalType: "SharePointGroup");
|
||||||
|
var groupMembers = MakeGroupMembers("Site Members", new ResolvedMember("Alice", "alice@co.com"));
|
||||||
|
var svc = new HtmlExportService();
|
||||||
|
var html = svc.BuildHtml(new[] { entry }, null, groupMembers);
|
||||||
|
|
||||||
|
Assert.Contains("onclick=\"toggleGroup('grpmem0')\"", html);
|
||||||
|
Assert.Contains("class=\"user-pill group-expandable\"", html);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuildHtml_WithGroupMembers_RendersHiddenMemberSubRow()
|
||||||
|
{
|
||||||
|
var entry = MakeEntry("Site Members", "i:0#.f|membership|group@contoso.com", principalType: "SharePointGroup");
|
||||||
|
var groupMembers = MakeGroupMembers("Site Members", new ResolvedMember("Alice", "alice@co.com"));
|
||||||
|
var svc = new HtmlExportService();
|
||||||
|
var html = svc.BuildHtml(new[] { entry }, null, groupMembers);
|
||||||
|
|
||||||
|
Assert.Contains("data-group=\"grpmem0\"", html);
|
||||||
|
Assert.Contains("display:none", html);
|
||||||
|
Assert.Contains("Alice", html);
|
||||||
|
Assert.Contains("alice@co.com", html);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuildHtml_WithEmptyMemberList_RendersMembersUnavailable()
|
||||||
|
{
|
||||||
|
var entry = MakeEntry("Site Members", "i:0#.f|membership|group@contoso.com", principalType: "SharePointGroup");
|
||||||
|
var groupMembers = MakeGroupMembers("Site Members"); // empty list
|
||||||
|
var svc = new HtmlExportService();
|
||||||
|
var html = svc.BuildHtml(new[] { entry }, null, groupMembers);
|
||||||
|
|
||||||
|
Assert.Contains("members unavailable", html);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuildHtml_ContainsToggleGroupJs()
|
||||||
|
{
|
||||||
|
var entry = MakeEntry("Site Members", "i:0#.f|membership|group@contoso.com", principalType: "SharePointGroup");
|
||||||
|
var groupMembers = MakeGroupMembers("Site Members", new ResolvedMember("Alice", "alice@co.com"));
|
||||||
|
var svc = new HtmlExportService();
|
||||||
|
var html = svc.BuildHtml(new[] { entry }, null, groupMembers);
|
||||||
|
|
||||||
|
Assert.Contains("function toggleGroup", html);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void BuildHtml_Simplified_WithGroupMembers_RendersExpandablePill()
|
||||||
|
{
|
||||||
|
var innerEntry = new PermissionEntry("Web", "Site A", "https://contoso.sharepoint.com/sites/A",
|
||||||
|
true, "Site Members", "i:0#.f|membership|group@contoso.com", "Read", "Direct Permissions", "SharePointGroup");
|
||||||
|
var simplifiedEntry = new SimplifiedPermissionEntry(innerEntry);
|
||||||
|
var groupMembers = MakeGroupMembers("Site Members", new ResolvedMember("Bob", "bob@co.com"));
|
||||||
|
var svc = new HtmlExportService();
|
||||||
|
var html = svc.BuildHtml(new[] { simplifiedEntry }, null, groupMembers);
|
||||||
|
|
||||||
|
Assert.Contains("onclick=\"toggleGroup('grpmem0')\"", html);
|
||||||
|
Assert.Contains("class=\"user-pill group-expandable\"", html);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user