Add TryResolveProfileIdAsync method for test profiles
Introduced the `TryResolveProfileIdAsync` method in the `RecApplicationTestBase` class to resolve a usable profile ID for tests. The method prioritizes a configured `FakeProfileId` and falls back to querying the database for the first available profile. Added necessary namespaces (`System.Linq`, `System.Threading.Tasks`, and `MediatR`) to support LINQ, async operations, and the `ISender` interface. Implemented dependency injection for querying profiles and added error handling to ensure robustness.
This commit is contained in:
@@ -1,10 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using MediatR;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using ReC.Application;
|
using ReC.Application;
|
||||||
using ReC.Application.Common.Options;
|
using ReC.Application.Common.Options;
|
||||||
|
using ReC.Application.Profile.Queries;
|
||||||
using ReC.Infrastructure;
|
using ReC.Infrastructure;
|
||||||
|
|
||||||
namespace ReC.Tests.Application;
|
namespace ReC.Tests.Application;
|
||||||
@@ -21,6 +25,31 @@ public abstract class RecApplicationTestBase : IDisposable
|
|||||||
|
|
||||||
protected IServiceProvider ServiceProvider { get; }
|
protected IServiceProvider ServiceProvider { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Resolves a usable profile id for tests that require an existing profile in the database.
|
||||||
|
/// Prefers the configured <c>FakeProfileId</c> value; otherwise asks the server for the first
|
||||||
|
/// available profile via the standard read query. Returns <c>null</c> when no profile is
|
||||||
|
/// configured and none can be discovered.
|
||||||
|
/// </summary>
|
||||||
|
protected async Task<long?> TryResolveProfileIdAsync()
|
||||||
|
{
|
||||||
|
var configured = Configuration.GetValue<long?>("FakeProfileId");
|
||||||
|
if (configured is > 0)
|
||||||
|
return configured;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var scope = ServiceProvider.CreateScope();
|
||||||
|
var sender = scope.ServiceProvider.GetRequiredService<ISender>();
|
||||||
|
var profiles = await sender.Send(new ReadProfileViewQuery { IncludeActions = false });
|
||||||
|
return profiles?.FirstOrDefault()?.Id;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static IConfiguration BuildConfiguration()
|
private static IConfiguration BuildConfiguration()
|
||||||
{
|
{
|
||||||
var appSettingsPath = LocateApiAppSettings();
|
var appSettingsPath = LocateApiAppSettings();
|
||||||
|
|||||||
Reference in New Issue
Block a user