using System;
using System.Collections.Generic;
using Xunit;
using KArtSell.Modules.ModelOperations.Domain;
namespace KArtSell.Integration.Tests.Features.Portfolio;
///
/// VS-08 TESTOPS: Dashboard aggregation integration tests (5 simple tests)
///
/// Validates:
/// - Health score calculation based on risk metrics
/// - Risk insights generation
/// - Dashboard data validation
/// - Alert severity ranking
/// - Stress scenario classification
///
/// Uses mock data (real implementation needs DB + API)
///
public sealed class VS08_DashboardSimpleTests
{
[Fact]
public void Policy_CalculateHealthScore_WithGoodMetrics_ReturnsHighScore()
{
var riskMetrics = new DashboardPolicy.RiskMetricsSnapshot(
5000, 2.5m, 3.0m, 12m, 45m, 30m);
var alerts = new List();
var score = DashboardPolicy.CalculateHealthScore(riskMetrics, alerts);
Assert.True(score >= 80, $"Expected score >= 80, got {score}");
}
[Fact]
public void Policy_CalculateHealthScore_WithHighConcentration_DeductsPoints()
{
var riskMetrics = new DashboardPolicy.RiskMetricsSnapshot(
5000, 2.0m, 2.5m, 10m, 75m, 50m);
var alerts = new List();
var score = DashboardPolicy.CalculateHealthScore(riskMetrics, alerts);
Assert.True(score < 80, $"Expected score < 80, got {score}");
}
[Fact]
public void Policy_CalculateHealthScore_WithActiveAlerts_DeductsPoints()
{
var riskMetrics = new DashboardPolicy.RiskMetricsSnapshot(
5000, 2.0m, 2.5m, 10m, 40m, 25m);
var alerts = new List
{
new(Guid.NewGuid(), "Concentration", 75m, "Warning", "Test alert"),
new(Guid.NewGuid(), "Volatility", 25m, "Critical", "Test critical"),
};
var score = DashboardPolicy.CalculateHealthScore(riskMetrics, alerts);
Assert.True(score < 80, $"Expected score < 80, got {score}");
}
[Fact]
public void Policy_SummarizeRiskInsights_GeneratesInsights()
{
var riskMetrics = new DashboardPolicy.RiskMetricsSnapshot(
15000, 0.8m, 1.2m, 28m, 72m, 45m);
var stressResults = new List
{
new("bear", -18m, 13750),
};
var insights = DashboardPolicy.SummarizeRiskInsights(riskMetrics, stressResults, new());
Assert.NotEmpty(insights);
}
[Fact]
public void Policy_RankAlertsBySeverity_OrdersByCriticality()
{
var alerts = new List
{
new(Guid.NewGuid(), "A", 50m, "Initial", "msg"),
new(Guid.NewGuid(), "B", 75m, "Critical", "msg"),
new(Guid.NewGuid(), "C", 60m, "Warning", "msg"),
};
var ranked = DashboardPolicy.RankAlertsBySeverity(alerts);
Assert.Equal("Critical", ranked[0].Severity);
Assert.Equal("Warning", ranked[1].Severity);
Assert.Equal("Initial", ranked[2].Severity);
}
}