using Svrnty.CQRS.Configuration; namespace Svrnty.CQRS.Tests; public class CqrsConfigurationTests { private class TestConfig { public string Value { get; set; } = string.Empty; } private class OtherConfig { public int Number { get; set; } } [Fact] public void SetConfiguration_CanBeRetrieved() { var config = new CqrsConfiguration(); var testConfig = new TestConfig { Value = "hello" }; config.SetConfiguration(testConfig); var retrieved = config.GetConfiguration(); Assert.NotNull(retrieved); Assert.Equal("hello", retrieved.Value); } [Fact] public void GetConfiguration_ReturnsNull_WhenNotSet() { var config = new CqrsConfiguration(); var retrieved = config.GetConfiguration(); Assert.Null(retrieved); } [Fact] public void HasConfiguration_ReturnsTrue_WhenSet() { var config = new CqrsConfiguration(); config.SetConfiguration(new TestConfig()); Assert.True(config.HasConfiguration()); } [Fact] public void HasConfiguration_ReturnsFalse_WhenNotSet() { var config = new CqrsConfiguration(); Assert.False(config.HasConfiguration()); } [Fact] public void SetConfiguration_OverwritesPrevious() { var config = new CqrsConfiguration(); config.SetConfiguration(new TestConfig { Value = "first" }); config.SetConfiguration(new TestConfig { Value = "second" }); var retrieved = config.GetConfiguration(); Assert.Equal("second", retrieved!.Value); } [Fact] public void MultipleConfigTypes_AreIndependent() { var config = new CqrsConfiguration(); config.SetConfiguration(new TestConfig { Value = "test" }); config.SetConfiguration(new OtherConfig { Number = 42 }); Assert.Equal("test", config.GetConfiguration()!.Value); Assert.Equal(42, config.GetConfiguration()!.Number); } [Fact] public void ExecuteMappingCallbacks_InvokesAllCallbacks() { var config = new CqrsConfiguration(); var callCount = 0; config.AddMappingCallback(_ => callCount++); config.AddMappingCallback(_ => callCount++); config.ExecuteMappingCallbacks(new object()); Assert.Equal(2, callCount); } [Fact] public void ExecuteMappingCallbacks_PassesAppObject() { var config = new CqrsConfiguration(); object? receivedApp = null; config.AddMappingCallback(app => receivedApp = app); var expected = new object(); config.ExecuteMappingCallbacks(expected); Assert.Same(expected, receivedApp); } }