146 lines
5.3 KiB
C#
146 lines
5.3 KiB
C#
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using System;
|
|
using System.Linq;
|
|
using YLErp.DBModels;
|
|
using YLErp.Modules.DataProviderModule;
|
|
|
|
namespace YLErp.Modules.VolatilityModule
|
|
{
|
|
[TestClass]
|
|
public class VarietyVolServiceTest : YLUnitTestBase
|
|
{
|
|
[ClassInitialize]
|
|
public static void Init(TestContext context)
|
|
{
|
|
using (var db = DbContextFactory.GetYLDbContext())
|
|
{
|
|
db.OptUser = new OptUserInfo(0, "UnitTest");
|
|
|
|
db.Database.ExecuteSqlCommand("truncate table variety_vol;");
|
|
|
|
var datas = new[] {
|
|
new VarietyVol{ VarietyId = 1,ValueDate = new DateTime(2020,9,1),Vol = 0.301 },
|
|
new VarietyVol{ VarietyId = 1,ValueDate = new DateTime(2020,9,3),Vol = 0.311 },
|
|
new VarietyVol{ VarietyId = 1,ValueDate = new DateTime(2020,9,13),Vol = 0.331 },
|
|
|
|
new VarietyVol{ VarietyId = 2,ValueDate = new DateTime(2020,9,21),Vol = 0.401 },
|
|
new VarietyVol{ VarietyId = 2,ValueDate = new DateTime(2020,9,22),Vol = 0.501 },
|
|
new VarietyVol{ VarietyId = 2,ValueDate = new DateTime(2020,10,10),Vol = 0.601 },
|
|
};
|
|
|
|
foreach (var data in datas)
|
|
{
|
|
data.OptId = 0;
|
|
data.OptName = "UnitTest";
|
|
data.OptDate = DateTime.Now;
|
|
}
|
|
|
|
db.variety_vol.AddRange(datas);
|
|
db.SaveChanges();
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestGetVols()
|
|
{
|
|
var dates = new[] { new DateTime(2020, 9, 10), new DateTime(2020, 9, 22) };
|
|
var check = new[] {
|
|
new Action<VarietyVolDto[]>(n=>{
|
|
Assert.IsTrue(n.Length == 1);
|
|
Assert.IsTrue(n[0].Vol == 0.311);
|
|
Assert.IsTrue(n[0].ValueDate == new DateTime(2020, 9, 3));
|
|
}),
|
|
new Action<VarietyVolDto[]>(n=>{
|
|
Assert.IsTrue(n.Length == 2);
|
|
Assert.IsTrue(n[0].Vol == 0.331);
|
|
Assert.IsTrue(n[0].ValueDate == new DateTime(2020, 9, 13));
|
|
|
|
Assert.IsTrue(n[1].Vol == 0.501);
|
|
Assert.IsTrue(n[1].ValueDate == new DateTime(2020, 9, 22));
|
|
}),
|
|
};
|
|
|
|
for (var i = 0; i < dates.Length; i++)
|
|
{
|
|
var date = dates[i];
|
|
|
|
var grpQry = from vol in DbContext.variety_vol
|
|
where vol.ValueDate <= date
|
|
group vol by vol.VarietyId into grp
|
|
select new
|
|
{
|
|
VarietyId = grp.Key,
|
|
ValueDate = grp.Max(n => n.ValueDate)
|
|
};
|
|
|
|
var qry = from gv in grpQry
|
|
join vol in DbContext.variety_vol on gv equals new { vol.VarietyId, vol.ValueDate }
|
|
orderby gv.VarietyId
|
|
select new VarietyVolDto
|
|
{
|
|
VarietyId = vol.VarietyId,
|
|
ValueDate = vol.ValueDate,
|
|
Vol = vol.Vol
|
|
};
|
|
|
|
var qryDatas = qry.ToArray();
|
|
|
|
check[i](qryDatas);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestGetVols2()
|
|
{
|
|
var dates = new[] { new DateTime(2020, 9, 10), new DateTime(2020, 9, 22) };
|
|
var check = new[] {
|
|
new Action<VarietyVolDto[]>(n=>{
|
|
Assert.IsTrue(n.Length == 3);
|
|
Assert.IsTrue(n[0].Vol == 0.311);
|
|
Assert.IsTrue(n[0].ValueDate == new DateTime(2020, 9, 3));
|
|
|
|
Assert.IsTrue(n[1].Vol == 0.3);
|
|
Assert.IsTrue(n[1].ValueDate == new DateTime(2020, 9, 10));
|
|
|
|
Assert.IsTrue(n[2].Vol == 0.3);
|
|
Assert.IsTrue(n[2].ValueDate == new DateTime(2020, 9, 10));
|
|
}),
|
|
new Action<VarietyVolDto[]>(n=>{
|
|
Assert.IsTrue(n.Length == 3);
|
|
Assert.IsTrue(n[0].Vol == 0.331);
|
|
Assert.IsTrue(n[0].ValueDate == new DateTime(2020, 9, 13));
|
|
|
|
Assert.IsTrue(n[1].Vol == 0.501);
|
|
Assert.IsTrue(n[1].ValueDate == new DateTime(2020, 9, 22));
|
|
|
|
Assert.IsTrue(n[2].Vol == 0.3);
|
|
Assert.IsTrue(n[2].ValueDate == new DateTime(2020, 9, 22));
|
|
}),
|
|
};
|
|
|
|
for (var i = 0; i < dates.Length; i++)
|
|
{
|
|
var date = dates[i];
|
|
|
|
var qryDatas = new VarietyVolService(this).GetVols(date, new[] { 1, 2, 3 });
|
|
|
|
check[i](qryDatas.ToArray());
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TestGetVols3()
|
|
{
|
|
var provider = new VarietyVolProvider(new DateTime(2020, 9, 22));
|
|
|
|
Assert.IsTrue(provider.TryGetVol(1, out var vol1)&&vol1 == 0.331);
|
|
|
|
Assert.IsTrue(provider.TryGetVol(5, out var vol11)&&vol11 == 0.3);
|
|
|
|
Assert.IsTrue(provider.TryGetVol("RB00", out var vol2) && vol2 == 0.501);
|
|
|
|
Assert.IsTrue(provider.TryGetVol("ceshi1", out var vol3) && vol3 == 0.3);
|
|
}
|
|
}
|
|
}
|