Skip to content

Commit 545967b

Browse files
author
Svetlozar Stoykov
committed
Add AppendErrors method to OperationResult<TResult> and related tests
1 parent c43786b commit 545967b

2 files changed

Lines changed: 85 additions & 0 deletions

File tree

src/OneBitSoftware.Utilities.OperationResult/OperationResult.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,17 @@ public OperationResult(TResult resultObject) : base()
295295
/// </summary>
296296
public TResult? ResultObject { get; set; }
297297

298+
/// <summary>
299+
/// Appends error from <paramref name="otherOperationResult"/> to the current instance.
300+
/// </summary>
301+
/// <param name="otherOperationResult">The <see cref="OperationResult"/> to append from.</param>
302+
/// <returns>The original <see cref="OperationResult"/> with the appended messages from <paramref name="otherOperationResult"/>.</returns>
303+
public new OperationResult<TResult> AppendErrors(OperationResult? otherOperationResult)
304+
{
305+
base.AppendErrors(otherOperationResult);
306+
return this;
307+
}
308+
298309
/// <summary>
299310
/// This method will append an error with a specific `user-friendly` message to this operation result instance.
300311
/// </summary>

tests/OneBitSoftware.Utilities.OperationResultTests/OperationResultAppendErrorsTests.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,78 @@ public void AppendErrors_ShouldLogWhenCreatedWithNoLogger()
177177
// Assert
178178
Assert.Equal(1, testLogger.LogMessages.Count);
179179
}
180+
181+
[Fact]
182+
public void AppendErrors_NonGenericSource_To_GenericTarget_Retains_Generic_Type_And_MergesErrors()
183+
{
184+
// Arrange
185+
var source = new OperationResult();
186+
source.AppendError("E1", 101, LogLevel.Warning, "D1");
187+
188+
var target = new OperationResult<string>();
189+
target.AppendError("E0", 100, LogLevel.Information, "D0");
190+
191+
// Act
192+
var returned = target.AppendErrors(source);
193+
194+
// Assert
195+
Assert.Same(target, returned);
196+
Assert.True(target.Fail);
197+
Assert.Equal(2, target.Errors.Count);
198+
Assert.NotNull(target.Errors.Single(e => e is { Code: 100, Message: "E0" }));
199+
Assert.NotNull(target.Errors.Single(e => e is { Code: 101, Message: "E1" }));
200+
}
201+
202+
[Fact]
203+
public void AppendErrors_GenericSource_To_GenericTarget_Retains_Generic_Type_And_MergesErrors()
204+
{
205+
// Arrange
206+
var source = new OperationResult<double>();
207+
source.AppendError("E1", 101, LogLevel.Warning, "D1");
208+
209+
var target = new OperationResult<string>();
210+
target.AppendError("E0", 100, LogLevel.Information, "D0");
211+
212+
// Act
213+
var returned = target.AppendErrors(source);
214+
215+
// Assert
216+
Assert.Same(target, returned);
217+
Assert.True(target.Fail);
218+
Assert.Equal(2, target.Errors.Count);
219+
Assert.NotNull(target.Errors.Single(e => e is { Code: 100, Message: "E0" }));
220+
Assert.NotNull(target.Errors.Single(e => e is { Code: 101, Message: "E1" }));
221+
}
222+
223+
[Fact]
224+
public void AppendErrors_WithNullSource_On_NonGenericTarget_Returns_Same_Instance_And_NoChange()
225+
{
226+
// Arrange
227+
var target = new OperationResult();
228+
target.AppendError("E0", 100, LogLevel.Information, "D0");
229+
var beforeCount = target.Errors.Count;
230+
231+
// Act
232+
var returned = target.AppendErrors(null);
233+
234+
// Assert
235+
Assert.Same(target, returned);
236+
Assert.Equal(beforeCount, target.Errors.Count);
237+
}
238+
239+
[Fact]
240+
public void AppendErrors_WithNullSource_On_GenericTarget_Returns_Same_Instance_And_NoChange()
241+
{
242+
// Arrange
243+
var target = new OperationResult<object>();
244+
target.AppendError("E0", 100, LogLevel.Information, "D0");
245+
var beforeCount = target.Errors.Count;
246+
247+
// Act
248+
var returned = target.AppendErrors((OperationResult)null);
249+
250+
// Assert
251+
Assert.Same(target, returned);
252+
Assert.Equal(beforeCount, target.Errors.Count);
253+
}
180254
}

0 commit comments

Comments
 (0)