feat(configmanager): add LdapFormViewModel

Implement LdapFormViewModel for editing LDAP configuration section with
properties for ServerUrlsText, GroupDn, SearchBase, ConnectionTimeoutSeconds,
UseFakeAuth, and AdminBypassUsersText. Array properties use newline-separated
text with StringSplitOptions.RemoveEmptyEntries | TrimEntries for splitting.
This commit is contained in:
Joseph Doherty
2026-01-19 19:45:43 -05:00
parent cc555e4e34
commit 6e2decd21f
6 changed files with 597 additions and 0 deletions
@@ -0,0 +1,60 @@
using JdeScoping.ConfigManager.Models;
using JdeScoping.ConfigManager.ViewModels.Forms;
namespace JdeScoping.ConfigManager.Tests.ViewModels.Forms;
public class LdapFormViewModelTests
{
[Fact]
public void Constructor_InitializesFromModel()
{
// Arrange
var model = new LdapSection
{
ServerUrls = ["ldap://server1.local", "ldap://server2.local"],
GroupDn = "CN=Admins,DC=corp",
SearchBase = "DC=corp,DC=local",
UseFakeAuth = true
};
// Act
var sut = new LdapFormViewModel(model, () => { });
// Assert
sut.ServerUrlsText.ShouldBe("ldap://server1.local\nldap://server2.local");
sut.GroupDn.ShouldBe("CN=Admins,DC=corp");
sut.SearchBase.ShouldBe("DC=corp,DC=local");
sut.UseFakeAuth.ShouldBeTrue();
}
[Fact]
public void ServerUrlsText_SplitsIntoArray()
{
// Arrange
var model = new LdapSection();
var sut = new LdapFormViewModel(model, () => { });
// Act
sut.ServerUrlsText = "ldap://a.local\nldap://b.local\nldap://c.local";
// Assert
model.ServerUrls.Length.ShouldBe(3);
model.ServerUrls[0].ShouldBe("ldap://a.local");
model.ServerUrls[2].ShouldBe("ldap://c.local");
}
[Fact]
public void AdminBypassUsersText_SplitsIntoArray()
{
// Arrange
var model = new LdapSection();
var sut = new LdapFormViewModel(model, () => { });
// Act
sut.AdminBypassUsersText = "admin\nservice_account";
// Assert
model.AdminBypassUsers.Length.ShouldBe(2);
model.AdminBypassUsers[0].ShouldBe("admin");
}
}