using System; using Junction.Domain; using Xunit; namespace Junction.Tests.Unit { public class OperationErrorTests { [Fact] public void Ctor_StoresFields() { var err = new OperationError("E01", "Repo", "boom"); Assert.Equal("E01", err.Code); Assert.Equal("Repo", err.Source); Assert.Equal("boom", err.Message); } [Fact] public void Ctor_SetsTimestamp() { var before = DateTime.Now; var err = new OperationError("E", "S", "M"); var after = DateTime.Now; Assert.InRange(err.At, before, after); } [Theory] [InlineData(null, null, null)] [InlineData(null, "S", null)] public void Ctor_NullsBecomeEmptyStrings(string? code, string? source, string? message) { var err = new OperationError(code!, source!, message!); Assert.NotNull(err.Code); Assert.NotNull(err.Source); Assert.NotNull(err.Message); } [Fact] public void Of_CreatesErrorWithEmptyCode() { var err = OperationError.Of("Repo", "boom"); Assert.Equal("", err.Code); Assert.Equal("Repo", err.Source); Assert.Equal("boom", err.Message); } [Fact] public void ToString_ContainsFields() { var err = new OperationError("E01", "Repo", "boom"); Assert.Contains("E01", err.ToString()); Assert.Contains("Repo", err.ToString()); Assert.Contains("boom", err.ToString()); } } }