- auto_npl.py: parse BOT Gross NPLs by business (reportID=794); extract auto loan NPL (20,602 mn THB, 3.95% of NPLs, 2.06% of loans) - /api/v1/themes now exposes auto_npl_pct + auto_npl_amount alongside car-sales volume - 3 new tests; full suite 188 OK; live verified (themes shows auto_npl_pct 3.95)
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
"""Tests for the auto NPL (BOT) collector."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from app import auto_npl
|
|
|
|
|
|
def _bot_npl_html() -> str:
|
|
return """
|
|
<html><body>
|
|
<table>
|
|
<tr><th></th><th></th><th>Q2/2568</th><th></th><th></th><th>Q1/2568</th><th></th><th></th></tr>
|
|
<tr><th></th><th></th><th>ยอดคงค้าง NPL</th><th>% ต่อ NPLs</th><th>% ต่อสินเชื่อรวม</th><th>ยอดคงค้าง NPL</th><th>% ต่อ NPLs</th><th>% ต่อสินเชื่อรวม</th></tr>
|
|
<tr><td>1</td><td>การเกษตร</td><td>10,325</td><td>1.98</td><td>11.81</td><td>10,669</td><td>2.07</td><td>11.94</td></tr>
|
|
<tr><td>12</td><td>รถยนต์</td><td>20,602</td><td>3.95</td><td>2.06</td><td>22,046</td><td>4.10</td><td>2.15</td></tr>
|
|
</table>
|
|
</body></html>
|
|
"""
|
|
|
|
|
|
class AutoNplParseTest(unittest.TestCase):
|
|
def test_parses_auto_npl(self) -> None:
|
|
snap = auto_npl.parse_auto_npl_html(_bot_npl_html())
|
|
self.assertEqual(snap.npl_amount, 20602.0)
|
|
self.assertEqual(snap.pct_of_npls, 3.95)
|
|
self.assertEqual(snap.pct_of_loans, 2.06)
|
|
|
|
def test_no_table_raises(self) -> None:
|
|
with self.assertRaises(auto_npl.AutoNplError):
|
|
auto_npl.parse_auto_npl_html("<html>no data</html>")
|
|
|
|
def test_to_dict(self) -> None:
|
|
snap = auto_npl.parse_auto_npl_html(_bot_npl_html())
|
|
d = snap.to_dict()
|
|
self.assertEqual(d["source"], "bot")
|
|
self.assertEqual(d["npl_amount"], 20602.0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|