diff --git a/tests/ReC.Tests/Application/RecApplicationTestBase.cs b/tests/ReC.Tests/Application/RecApplicationTestBase.cs index abc4c47..90796de 100644 --- a/tests/ReC.Tests/Application/RecApplicationTestBase.cs +++ b/tests/ReC.Tests/Application/RecApplicationTestBase.cs @@ -1,10 +1,14 @@ using System; using System.IO; +using System.Linq; +using System.Threading.Tasks; +using MediatR; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using ReC.Application; using ReC.Application.Common.Options; +using ReC.Application.Profile.Queries; using ReC.Infrastructure; namespace ReC.Tests.Application; @@ -21,6 +25,31 @@ public abstract class RecApplicationTestBase : IDisposable protected IServiceProvider ServiceProvider { get; } + /// + /// Resolves a usable profile id for tests that require an existing profile in the database. + /// Prefers the configured FakeProfileId value; otherwise asks the server for the first + /// available profile via the standard read query. Returns null when no profile is + /// configured and none can be discovered. + /// + protected async Task TryResolveProfileIdAsync() + { + var configured = Configuration.GetValue("FakeProfileId"); + if (configured is > 0) + return configured; + + try + { + using var scope = ServiceProvider.CreateScope(); + var sender = scope.ServiceProvider.GetRequiredService(); + var profiles = await sender.Send(new ReadProfileViewQuery { IncludeActions = false }); + return profiles?.FirstOrDefault()?.Id; + } + catch + { + return null; + } + } + private static IConfiguration BuildConfiguration() { var appSettingsPath = LocateApiAppSettings();