diff --git a/NEW/src/Utils/JdeScoping.ConfigManager/ViewModels/Forms/DataAccessFormViewModel.cs b/NEW/src/Utils/JdeScoping.ConfigManager/ViewModels/Forms/DataAccessFormViewModel.cs new file mode 100644 index 0000000..0b37dd3 --- /dev/null +++ b/NEW/src/Utils/JdeScoping.ConfigManager/ViewModels/Forms/DataAccessFormViewModel.cs @@ -0,0 +1,137 @@ +using JdeScoping.ConfigManager.Models; + +namespace JdeScoping.ConfigManager.ViewModels.Forms; + +/// +/// ViewModel for editing DataAccess configuration section. +/// +public class DataAccessFormViewModel : ViewModelBase +{ + private readonly DataAccessSection _model; + private readonly Action _onChanged; + + public DataAccessFormViewModel(DataAccessSection model, Action onChanged) + { + _model = model ?? throw new ArgumentNullException(nameof(model)); + _onChanged = onChanged ?? throw new ArgumentNullException(nameof(onChanged)); + } + + /// + /// Gets or sets the default query timeout in seconds. + /// + public int DefaultTimeoutSeconds + { + get => _model.DefaultTimeoutSeconds; + set + { + if (_model.DefaultTimeoutSeconds != value) + { + _model.DefaultTimeoutSeconds = value; + OnPropertyChanged(); + _onChanged(); + } + } + } + + /// + /// Gets or sets the lot usage query timeout in seconds. + /// + public int LotUsageTimeoutSeconds + { + get => _model.LotUsageTimeoutSeconds; + set + { + if (_model.LotUsageTimeoutSeconds != value) + { + _model.LotUsageTimeoutSeconds = value; + OnPropertyChanged(); + _onChanged(); + } + } + } + + /// + /// Gets or sets the MIS data query timeout in seconds. + /// + public int MisDataTimeoutSeconds + { + get => _model.MisDataTimeoutSeconds; + set + { + if (_model.MisDataTimeoutSeconds != value) + { + _model.MisDataTimeoutSeconds = value; + OnPropertyChanged(); + _onChanged(); + } + } + } + + /// + /// Gets or sets the production schema name. + /// + public string ProductionSchema + { + get => _model.ProductionSchema; + set + { + if (_model.ProductionSchema != value) + { + _model.ProductionSchema = value; + OnPropertyChanged(); + _onChanged(); + } + } + } + + /// + /// Gets or sets the archive schema name. + /// + public string ArchiveSchema + { + get => _model.ArchiveSchema; + set + { + if (_model.ArchiveSchema != value) + { + _model.ArchiveSchema = value; + OnPropertyChanged(); + _onChanged(); + } + } + } + + /// + /// Gets or sets the stage schema name. + /// + public string StageSchema + { + get => _model.StageSchema; + set + { + if (_model.StageSchema != value) + { + _model.StageSchema = value; + OnPropertyChanged(); + _onChanged(); + } + } + } + + /// + /// Gets or sets whether detailed logging is enabled. + /// + public bool EnableDetailedLogging + { + get => _model.EnableDetailedLogging; + set + { + if (_model.EnableDetailedLogging != value) + { + _model.EnableDetailedLogging = value; + OnPropertyChanged(); + _onChanged(); + } + } + } +} diff --git a/NEW/tests/JdeScoping.ConfigManager.Tests/ViewModels/Forms/DataAccessFormViewModelTests.cs b/NEW/tests/JdeScoping.ConfigManager.Tests/ViewModels/Forms/DataAccessFormViewModelTests.cs new file mode 100644 index 0000000..5c1bdd1 --- /dev/null +++ b/NEW/tests/JdeScoping.ConfigManager.Tests/ViewModels/Forms/DataAccessFormViewModelTests.cs @@ -0,0 +1,43 @@ +using JdeScoping.ConfigManager.Models; +using JdeScoping.ConfigManager.ViewModels.Forms; + +namespace JdeScoping.ConfigManager.Tests.ViewModels.Forms; + +public class DataAccessFormViewModelTests +{ + [Fact] + public void Constructor_InitializesFromModel() + { + // Arrange + var model = new DataAccessSection + { + DefaultTimeoutSeconds = 60, + ProductionSchema = "dbo", + EnableDetailedLogging = true + }; + + // Act + var sut = new DataAccessFormViewModel(model, () => { }); + + // Assert + sut.DefaultTimeoutSeconds.ShouldBe(60); + sut.ProductionSchema.ShouldBe("dbo"); + sut.EnableDetailedLogging.ShouldBeTrue(); + } + + [Fact] + public void PropertyChange_UpdatesModelAndInvokesOnChanged() + { + // Arrange + var model = new DataAccessSection(); + var changedInvoked = false; + var sut = new DataAccessFormViewModel(model, () => changedInvoked = true); + + // Act + sut.ArchiveSchema = "hist"; + + // Assert + model.ArchiveSchema.ShouldBe("hist"); + changedInvoked.ShouldBeTrue(); + } +}