- FolderStructureService.CreateFoldersAsync creates folder hierarchy from CSV rows using BulkOperationRunner - FolderStructureService.BuildUniquePaths deduplicates and sorts paths parent-first by slash depth - TemplateService already committed; verified compilation and interface compliance - FolderStructureServiceTests: 4 unit tests pass (BuildUniquePaths edge cases, deduplication, empty levels, BuildPath) + 1 skip - TemplateServiceTests: 3 unit tests pass (interface impl, SiteTemplate defaults, SiteTemplateOptions defaults) + 2 skip
90 lines
2.9 KiB
C#
90 lines
2.9 KiB
C#
using SharepointToolbox.Core.Models;
|
|
using SharepointToolbox.Services;
|
|
|
|
namespace SharepointToolbox.Tests.Services;
|
|
|
|
public class FolderStructureServiceTests
|
|
{
|
|
[Fact]
|
|
public void FolderStructureService_Implements_IFolderStructureService()
|
|
{
|
|
Assert.True(typeof(IFolderStructureService).IsAssignableFrom(typeof(FolderStructureService)));
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildUniquePaths_FromExampleCsv_ReturnsParentFirst()
|
|
{
|
|
var rows = new List<FolderStructureRow>
|
|
{
|
|
new() { Level1 = "Administration", Level2 = "Comptabilite", Level3 = "Factures" },
|
|
new() { Level1 = "Administration", Level2 = "Comptabilite", Level3 = "Bilans" },
|
|
new() { Level1 = "Administration", Level2 = "Ressources Humaines" },
|
|
new() { Level1 = "Projets", Level2 = "Projet Alpha", Level3 = "Documents" },
|
|
};
|
|
|
|
var paths = FolderStructureService.BuildUniquePaths(rows);
|
|
|
|
// Should contain unique paths, parent-first
|
|
Assert.Contains("Administration", paths);
|
|
Assert.Contains("Administration/Comptabilite", paths);
|
|
Assert.Contains("Administration/Comptabilite/Factures", paths);
|
|
Assert.Contains("Administration/Comptabilite/Bilans", paths);
|
|
Assert.Contains("Projets", paths);
|
|
Assert.Contains("Projets/Projet Alpha", paths);
|
|
|
|
// Parent-first: "Administration" before "Administration/Comptabilite"
|
|
var adminIdx = paths.ToList().IndexOf("Administration");
|
|
var compIdx = paths.ToList().IndexOf("Administration/Comptabilite");
|
|
Assert.True(adminIdx < compIdx);
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildUniquePaths_DuplicateRows_Deduplicated()
|
|
{
|
|
var rows = new List<FolderStructureRow>
|
|
{
|
|
new() { Level1 = "A", Level2 = "B" },
|
|
new() { Level1 = "A", Level2 = "B" },
|
|
new() { Level1 = "A", Level2 = "C" },
|
|
};
|
|
|
|
var paths = FolderStructureService.BuildUniquePaths(rows);
|
|
|
|
Assert.Equal(3, paths.Count); // A, A/B, A/C (deduplicated)
|
|
}
|
|
|
|
[Fact]
|
|
public void BuildUniquePaths_EmptyLevels_StopsAtLastNonEmpty()
|
|
{
|
|
var rows = new List<FolderStructureRow>
|
|
{
|
|
new() { Level1 = "Root", Level2 = "", Level3 = "", Level4 = "" },
|
|
};
|
|
|
|
var paths = FolderStructureService.BuildUniquePaths(rows);
|
|
|
|
Assert.Single(paths);
|
|
Assert.Equal("Root", paths[0]);
|
|
}
|
|
|
|
[Fact]
|
|
public void FolderStructureRow_BuildPath_ReturnsCorrectPath()
|
|
{
|
|
var row = new FolderStructureRow
|
|
{
|
|
Level1 = "Admin",
|
|
Level2 = "HR",
|
|
Level3 = "Contracts",
|
|
Level4 = ""
|
|
};
|
|
|
|
Assert.Equal("Admin/HR/Contracts", row.BuildPath());
|
|
}
|
|
|
|
[Fact(Skip = "Requires live SharePoint tenant")]
|
|
public async Task CreateFoldersAsync_ValidRows_CreatesFolders()
|
|
{
|
|
await Task.CompletedTask;
|
|
}
|
|
}
|