KoreaEximRateParserTests.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Infrastructure.StockData;
  2. namespace Application.Tests;
  3. [TestClass]
  4. public sealed class KoreaEximRateParserTests
  5. {
  6. [TestMethod]
  7. public void Parse_ItemNameAndRate_MappedFromCandidateFields()
  8. {
  9. // 수출입은행 AP02/AP03 응답 골격 — 최상위 배열, 항목명은 cur_nm, 금리 수치는 후보 필드(deal_bas_r 등)에서 첫 성공값
  10. const string json = """
  11. [
  12. {"result":1,"cur_nm":"리보 1개월","deal_bas_r":"4.5321"},
  13. {"result":1,"cur_nm":"리보 3개월","deal_bas_r":"4.6789"}
  14. ]
  15. """;
  16. var rows = KoreaEximRateParser.Parse(json);
  17. Assert.AreEqual(2, rows.Count);
  18. Assert.AreEqual("리보 1개월", rows[0].ItemName);
  19. Assert.AreEqual(4.5321m, rows[0].Rate);
  20. Assert.AreEqual("리보 3개월", rows[1].ItemName);
  21. Assert.AreEqual(4.6789m, rows[1].Rate);
  22. }
  23. [TestMethod]
  24. public void Parse_ThousandsCommaStrippedAndFailedResultSkipped()
  25. {
  26. // 천단위 콤마 방어 + result != 1 행 skip
  27. const string json = """
  28. [
  29. {"result":4,"cur_nm":"일일제한초과행","deal_bas_r":"1.0000"},
  30. {"result":1,"cur_nm":"우대금리","deal_bas_r":"1,234.5000"}
  31. ]
  32. """;
  33. var rows = KoreaEximRateParser.Parse(json);
  34. Assert.AreEqual(1, rows.Count, "result=4 행은 제외");
  35. Assert.AreEqual("우대금리", rows[0].ItemName);
  36. Assert.AreEqual(1234.5000m, rows[0].Rate, "천단위 콤마 제거");
  37. }
  38. [TestMethod]
  39. public void Parse_NoNumericField_KeepsItemWithNullRate()
  40. {
  41. // 수치 후보 필드가 전부 빈값/미제공이면 항목만 보존하고 Rate=null (0 과 구분)
  42. const string json = """
  43. [
  44. {"result":1,"cur_nm":"미고시항목","deal_bas_r":"","ttb":"-","tts":""}
  45. ]
  46. """;
  47. var rows = KoreaEximRateParser.Parse(json);
  48. Assert.AreEqual(1, rows.Count);
  49. Assert.AreEqual("미고시항목", rows[0].ItemName);
  50. Assert.IsNull(rows[0].Rate, "수치 없으면 null");
  51. }
  52. [TestMethod]
  53. public void Parse_EmptyArrayOrBlank_ReturnsEmpty()
  54. {
  55. // 주말/공휴일·오전 이전 빈 배열, 빈 응답 → 0건 (예외 없음)
  56. Assert.AreEqual(0, KoreaEximRateParser.Parse("[]").Count);
  57. Assert.AreEqual(0, KoreaEximRateParser.Parse("").Count);
  58. Assert.AreEqual(0, KoreaEximRateParser.Parse("{}").Count, "배열이 아니면 0건");
  59. }
  60. }