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