| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using Domain.Entities.Stocks;
- using MacroHandler = Application.Features.Api.Stocks.GetMacroIndicators.Handler;
- using MacroQuery = Application.Features.Api.Stocks.GetMacroIndicators.Query;
- namespace Application.Tests;
- [TestClass]
- public sealed class MacroIndicatorQueryHandlerTests
- {
- [TestMethod]
- public async Task GetMacroIndicators_ByCode_ReturnsSeriesAscending_WithLatest()
- {
- // 기대 행위: 지정 Code 필터 + 시점 오름차순 Points + 최신값(마지막 시점)
- var code = $"CPI-{Guid.NewGuid():N}";
- using var db = TestDb.Create();
- await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "소비자물가지수", "202402", 113.78m, "2020=100"));
- await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "소비자물가지수", "202401", 113.17m, "2020=100"));
- await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "소비자물가지수", "202403", 114.30m, "2020=100"));
- await db.SaveChangesAsync(default);
- var handler = new MacroHandler(db);
- var result = await handler.Handle(new MacroQuery([code], 0), default);
- var indicator = result.List.Single(c => c.Code == code);
- Assert.AreEqual("소비자물가지수", indicator.Name);
- Assert.AreEqual(3, indicator.Points.Count);
- Assert.AreEqual("202401", indicator.Points[0].Period, "시점 오름차순");
- Assert.AreEqual("202403", indicator.Points[^1].Period);
- Assert.AreEqual("202403", indicator.LatestPeriod);
- Assert.AreEqual(114.30m, indicator.LatestValue);
- Assert.AreEqual("2020=100", indicator.Unit);
- }
- [TestMethod]
- public async Task GetMacroIndicators_Limit_TakesMostRecentPeriods()
- {
- var code = $"UNEMP-{Guid.NewGuid():N}";
- using var db = TestDb.Create();
- for (var m = 1; m <= 6; m++)
- {
- await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "실업률", $"20240{m}", 3.0m + m, "%"));
- }
- await db.SaveChangesAsync(default);
- var handler = new MacroHandler(db);
- var result = await handler.Handle(new MacroQuery([code], 2), default);
- var indicator = result.List.Single(c => c.Code == code);
- Assert.AreEqual(2, indicator.Points.Count, "Limit=2 → 최근 2시점");
- Assert.AreEqual("202405", indicator.Points[0].Period, "최근 2개를 오름차순으로");
- Assert.AreEqual("202406", indicator.Points[^1].Period);
- Assert.AreEqual("202406", indicator.LatestPeriod);
- }
- [TestMethod]
- public async Task GetMacroIndicators_EmptyCodes_ReturnsAllSeededCodes()
- {
- var codeA = $"A-{Guid.NewGuid():N}";
- var codeB = $"B-{Guid.NewGuid():N}";
- using var db = TestDb.Create();
- await db.MacroIndicator.AddAsync(MacroIndicator.Create(codeA, "가", "202401", 1m, null));
- await db.MacroIndicator.AddAsync(MacroIndicator.Create(codeB, "나", "202401", 2m, null));
- await db.SaveChangesAsync(default);
- var handler = new MacroHandler(db);
- var result = await handler.Handle(new MacroQuery([], 0), default);
- Assert.IsTrue(result.List.Any(c => c.Code == codeA));
- Assert.IsTrue(result.List.Any(c => c.Code == codeB));
- }
- }
|