PlotDirector/PlotLine.Tests/EntityMergeTests.cs

32 lines
1.5 KiB
C#

using Microsoft.Extensions.Logging.Abstractions;
using PlotLine.Services;
using PlotLine.ViewModels;
internal static class EntityMergeTests
{
public static void ConfirmationAndDistinctRecordsAreRequired()
{
// Null dependencies make any repository access before validation fail this test.
var locations = new LocationService(null!, null!, null!, null!, NullLogger<LocationService>.Instance);
var assets = new AssetService(null!, null!, null!, null!, null!, null!);
foreach (var merge in new Func<EntityMergeForm, Task>[]
{
async form => { await locations.MergeAsync(form); },
async form => { await assets.MergeAsync(form); }
})
{
Reject(merge, new EntityMergeForm { SourceID = 1, TargetID = 2 }, "Confirm");
Reject(merge, new EntityMergeForm { SourceID = 1, TargetID = 1, Confirm = true }, "different");
Reject(merge, new EntityMergeForm { SourceID = 1, TargetID = 0, Confirm = true }, "different");
Reject(merge, new EntityMergeForm { SourceID = 0, TargetID = 2, Confirm = true }, "different");
}
}
private static void Reject(Func<EntityMergeForm, Task> merge, EntityMergeForm form, string message)
{
try { merge(form).GetAwaiter().GetResult(); }
catch (InvalidOperationException ex) when (ex.Message.Contains(message, StringComparison.Ordinal)) { return; }
throw new Exception("Invalid merge was not rejected before database access.");
}
}