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();