63 lines
1.8 KiB
C#
63 lines
1.8 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using Xunit;
|
|
|
|
namespace QuantEngine.Core.Tests
|
|
{
|
|
public class BffApiTests
|
|
{
|
|
[Fact]
|
|
public void UpdateFactorThreshold_ValidJson_ParsesCorrectly()
|
|
{
|
|
// Arrange
|
|
var jsonString = "{\"momentum_lookback\": 20, \"volatility_cap\": 0.05}";
|
|
|
|
// Act
|
|
using var doc = JsonDocument.Parse(jsonString);
|
|
var root = doc.RootElement;
|
|
var lookback = root.GetProperty("momentum_lookback").GetInt32();
|
|
var cap = root.GetProperty("volatility_cap").GetDouble();
|
|
|
|
// Assert
|
|
Assert.Equal(20, lookback);
|
|
Assert.Equal(0.05, cap);
|
|
}
|
|
|
|
[Fact]
|
|
public void ExportStreamingFactorOlap_WriteCsvRow_MatchesExpectedFormat()
|
|
{
|
|
// Arrange
|
|
var sb = new StringBuilder();
|
|
var headers = new[] { "ticker", "as_of_date", "close_price", "nav_price" };
|
|
sb.AppendLine(string.Join(",", headers));
|
|
|
|
var row = new object[] { "123456", "2026-07-25", 50000, 49800 };
|
|
sb.AppendLine(string.Join(",", row));
|
|
|
|
// Act
|
|
var output = sb.ToString();
|
|
|
|
// Assert
|
|
Assert.Contains("ticker,as_of_date,close_price,nav_price", output);
|
|
Assert.Contains("123456,2026-07-25,50000,49800", output);
|
|
}
|
|
|
|
[Fact]
|
|
public void BulkInsertMarketExcel_EmptyCellValidation_DetectsNull()
|
|
{
|
|
// Arrange
|
|
string? ticker = null;
|
|
double? price = null;
|
|
|
|
|
|
// Act
|
|
bool isInvalid = string.IsNullOrEmpty(ticker) || !price.HasValue;
|
|
|
|
// Assert
|
|
Assert.True(isInvalid);
|
|
}
|
|
}
|
|
}
|