MacroIndicatorQueryHandlerTests.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Domain.Entities.Stocks;
  2. using MacroHandler = Application.Features.Api.Stocks.GetMacroIndicators.Handler;
  3. using MacroQuery = Application.Features.Api.Stocks.GetMacroIndicators.Query;
  4. namespace Application.Tests;
  5. [TestClass]
  6. public sealed class MacroIndicatorQueryHandlerTests
  7. {
  8. [TestMethod]
  9. public async Task GetMacroIndicators_ByCode_ReturnsSeriesAscending_WithLatest()
  10. {
  11. // 기대 행위: 지정 Code 필터 + 시점 오름차순 Points + 최신값(마지막 시점)
  12. var code = $"CPI-{Guid.NewGuid():N}";
  13. using var db = TestDb.Create();
  14. await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "소비자물가지수", "202402", 113.78m, "2020=100"));
  15. await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "소비자물가지수", "202401", 113.17m, "2020=100"));
  16. await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "소비자물가지수", "202403", 114.30m, "2020=100"));
  17. await db.SaveChangesAsync(default);
  18. var handler = new MacroHandler(db);
  19. var result = await handler.Handle(new MacroQuery([code], 0), default);
  20. var indicator = result.List.Single(c => c.Code == code);
  21. Assert.AreEqual("소비자물가지수", indicator.Name);
  22. Assert.AreEqual(3, indicator.Points.Count);
  23. Assert.AreEqual("202401", indicator.Points[0].Period, "시점 오름차순");
  24. Assert.AreEqual("202403", indicator.Points[^1].Period);
  25. Assert.AreEqual("202403", indicator.LatestPeriod);
  26. Assert.AreEqual(114.30m, indicator.LatestValue);
  27. Assert.AreEqual("2020=100", indicator.Unit);
  28. }
  29. [TestMethod]
  30. public async Task GetMacroIndicators_Limit_TakesMostRecentPeriods()
  31. {
  32. var code = $"UNEMP-{Guid.NewGuid():N}";
  33. using var db = TestDb.Create();
  34. for (var m = 1; m <= 6; m++)
  35. {
  36. await db.MacroIndicator.AddAsync(MacroIndicator.Create(code, "실업률", $"20240{m}", 3.0m + m, "%"));
  37. }
  38. await db.SaveChangesAsync(default);
  39. var handler = new MacroHandler(db);
  40. var result = await handler.Handle(new MacroQuery([code], 2), default);
  41. var indicator = result.List.Single(c => c.Code == code);
  42. Assert.AreEqual(2, indicator.Points.Count, "Limit=2 → 최근 2시점");
  43. Assert.AreEqual("202405", indicator.Points[0].Period, "최근 2개를 오름차순으로");
  44. Assert.AreEqual("202406", indicator.Points[^1].Period);
  45. Assert.AreEqual("202406", indicator.LatestPeriod);
  46. }
  47. [TestMethod]
  48. public async Task GetMacroIndicators_EmptyCodes_ReturnsAllSeededCodes()
  49. {
  50. var codeA = $"A-{Guid.NewGuid():N}";
  51. var codeB = $"B-{Guid.NewGuid():N}";
  52. using var db = TestDb.Create();
  53. await db.MacroIndicator.AddAsync(MacroIndicator.Create(codeA, "가", "202401", 1m, null));
  54. await db.MacroIndicator.AddAsync(MacroIndicator.Create(codeB, "나", "202401", 2m, null));
  55. await db.SaveChangesAsync(default);
  56. var handler = new MacroHandler(db);
  57. var result = await handler.Handle(new MacroQuery([], 0), default);
  58. Assert.IsTrue(result.List.Any(c => c.Code == codeA));
  59. Assert.IsTrue(result.List.Any(c => c.Code == codeB));
  60. }
  61. }