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