- FileTransferService.cs: CSOM copy/move via MoveCopyUtil.CopyFileByPath/MoveFileByPath - Conflict policies: Skip (catch ServerException), Overwrite (overwrite=true), Rename (KeepBoth=true) - ResourcePath.FromDecodedUrl for special character support - Recursive folder enumeration with system folder filtering - EnsureFolderAsync creates intermediate destination folders - Best-effort metadata preservation (ResetAuthorAndCreatedOnCopy=false) - FileTransferServiceTests.cs: 4 passing tests, 3 skipped (integration)
57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
using SharepointToolbox.Core.Models;
|
|
using SharepointToolbox.Services;
|
|
|
|
namespace SharepointToolbox.Tests.Services;
|
|
|
|
public class BulkMemberServiceTests
|
|
{
|
|
[Fact]
|
|
public void BulkMemberService_Implements_IBulkMemberService()
|
|
{
|
|
// GraphClientFactory requires MsalClientFactory which requires real MSAL setup
|
|
// Verify the type hierarchy at minimum
|
|
Assert.True(typeof(IBulkMemberService).IsAssignableFrom(typeof(BulkMemberService)));
|
|
}
|
|
|
|
[Fact]
|
|
public void BulkMemberRow_DefaultValues()
|
|
{
|
|
var row = new BulkMemberRow();
|
|
Assert.Equal(string.Empty, row.Email);
|
|
Assert.Equal(string.Empty, row.GroupName);
|
|
Assert.Equal(string.Empty, row.GroupUrl);
|
|
Assert.Equal(string.Empty, row.Role);
|
|
}
|
|
|
|
[Fact]
|
|
public void BulkMemberRow_PropertiesSettable()
|
|
{
|
|
var row = new BulkMemberRow
|
|
{
|
|
Email = "user@test.com",
|
|
GroupName = "Marketing",
|
|
GroupUrl = "https://contoso.sharepoint.com/sites/Marketing",
|
|
Role = "Owner"
|
|
};
|
|
|
|
Assert.Equal("user@test.com", row.Email);
|
|
Assert.Equal("Marketing", row.GroupName);
|
|
Assert.Equal("Owner", row.Role);
|
|
}
|
|
|
|
[Fact(Skip = "Requires live SharePoint tenant and Graph permissions")]
|
|
public async Task AddMembersAsync_ValidRows_AddsToGroups()
|
|
{
|
|
}
|
|
|
|
[Fact(Skip = "Requires live SharePoint tenant")]
|
|
public async Task AddMembersAsync_InvalidEmail_ReportsPerItemError()
|
|
{
|
|
}
|
|
|
|
[Fact(Skip = "Requires Graph permissions - Group.ReadWrite.All")]
|
|
public async Task AddMembersAsync_M365Group_UsesGraphApi()
|
|
{
|
|
}
|
|
}
|