76 lines
2.6 KiB
C#
76 lines
2.6 KiB
C#
using FluentAssertions;
|
|
using IBKRTrader.Core.Modularity;
|
|
using IBKRTrader.Hosting.Web.Endpoints;
|
|
using IBKRTrader.Modules.CongressTrading;
|
|
using IBKRTrader.Modules.DebugTrading;
|
|
using IBKRTrader.Modules.OptionsWheel;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Routing;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
namespace IBKRTrader.Tests.Web;
|
|
|
|
[Trait("cat", "unit")]
|
|
public class ModuleEndpointsTests
|
|
{
|
|
[Fact]
|
|
public void Map_RegistersEndpoints_ForConfiguredModules()
|
|
{
|
|
var services = new ServiceCollection();
|
|
services.AddSingleton<IModule>(new CongressTradingModule());
|
|
services.AddSingleton<IModule>(new OptionsWheelModule());
|
|
services.AddSingleton<IModule>(new DebugTradingModule());
|
|
|
|
var sp = services.BuildServiceProvider();
|
|
|
|
var builder = WebApplication.CreateBuilder();
|
|
var app = builder.Build();
|
|
var api = app.MapGroup("/api");
|
|
|
|
// Act
|
|
ModuleEndpoints.Map(api, sp);
|
|
|
|
// Assert - Verify registered endpoints
|
|
var routeBuilder = (IEndpointRouteBuilder)app;
|
|
var patterns = routeBuilder.DataSources
|
|
.SelectMany(ds => ds.Endpoints)
|
|
.OfType<RouteEndpoint>()
|
|
.Select(e => e.RoutePattern.RawText)
|
|
.ToList();
|
|
|
|
patterns.Should().Contain(p => p != null && p.Contains("/modules/congresstrading"));
|
|
patterns.Should().Contain(p => p != null && p.Contains("/modules/optionswheel/status"));
|
|
patterns.Should().Contain(p => p != null && p.Contains("/modules/optionswheel/underlyings"));
|
|
patterns.Should().Contain(p => p != null && p.Contains("/modules/debugtrading/status"));
|
|
patterns.Should().Contain(p => p != null && p.Contains("/modules/debugtrading/positions"));
|
|
|
|
// Verify Supervisor is NOT registered
|
|
patterns.Should().NotContain(p => p != null && p.Contains("/supervisor"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Map_DoesNotRegisterEndpoints_WhenModulesOmitted()
|
|
{
|
|
var services = new ServiceCollection();
|
|
// Empty modules list
|
|
var sp = services.BuildServiceProvider();
|
|
|
|
var builder = WebApplication.CreateBuilder();
|
|
var app = builder.Build();
|
|
var api = app.MapGroup("/api");
|
|
|
|
// Act
|
|
ModuleEndpoints.Map(api, sp);
|
|
|
|
// Assert - None of the module endpoints should be mapped
|
|
var routeBuilder = (IEndpointRouteBuilder)app;
|
|
var patterns = routeBuilder.DataSources
|
|
.SelectMany(ds => ds.Endpoints)
|
|
.OfType<RouteEndpoint>()
|
|
.Select(e => e.RoutePattern.RawText)
|
|
.ToList();
|
|
|
|
patterns.Should().BeEmpty();
|
|
}
|
|
}
|